如何恢复glScalef()?

时间:2009-03-11 18:12:40

标签: opengl zoom scaling

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

glScalef(1.0f/ZOOM, 1.0f/ZOOM, 1);

它在高变焦时效果不好......(也许是因为丢失的小数?)

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

4 个答案:

答案 0 :(得分:8)

你可以这样做:

ZOOMSQRT = sqrt(ZOOM);
glScalef(1.0f/ZOOMSQRT, 1.0f/ZOOMSQRT, 1);
glScalef(1.0f/ZOOMSQRT, 1.0f/ZOOMSQRT, 1);

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

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

答案 1 :(得分:5)

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

答案 2 :(得分:4)

在第一个glScalef()之前使用glPushMatrix()将当前模型矩阵推送到堆栈,然后在想要恢复原始比例时使用glPopMatrix(),这样就不会出现任何舍入错误没有计算。

答案 3 :(得分:2)

将之前的大小存储在某个位置,比如堆叠,然后使用它。

(动画转换回上一个缩放,平移和旋转设置非常有趣而不是缩放)