我使用glScalef()放大我的程序,现在当我用代码将其恢复为原始大小时:
glScalef(1.0f/ZOOM, 1.0f/ZOOM, 1);
它在高变焦时效果不好......(也许是因为丢失的小数?)
如何在没有上述任何计算的情况下将其完美地恢复到原始大小?
答案 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)
将之前的大小存储在某个位置,比如堆叠,然后使用它。
(动画转换回上一个缩放,平移和旋转设置非常有趣而不是缩放)