如何恢复glScalef()?

5 opengl scaling zoom

我使用glScalef()来缩放我的程序,现在当我用代码将其恢复为原始大小时:

glScalef(1.0f/ZOOM, 1.0f/ZOOM, 1);
Run Code Online (Sandbox Code Playgroud)

它在高变焦时不能很好地工作......(可能是因为丢失的小数?)

如何在没有上述任何计算的情况下将其完美地恢复到原始尺寸?

sch*_*der 8

你可以这样做:

ZOOMSQRT = sqrt(ZOOM);
glScalef(1.0f/ZOOMSQRT, 1.0f/ZOOMSQRT, 1);
glScalef(1.0f/ZOOMSQRT, 1.0f/ZOOMSQRT, 1);
Run Code Online (Sandbox Code Playgroud)

或者使用glPushMatrix/glPopMatrix在缩放前恢复原始矩阵:

glPushMatrix();
glScalef(ZOOM, ZOOM, 1);
[do whatever you like here...]
glPopMatrix(); // now it's at normal scale again
[do other things here...]
Run Code Online (Sandbox Code Playgroud)


Cod*_*ous 5

您只需保存投影矩阵即可.glPushMatrix(),glScalef(),...,glPopMatrix()