【发布时间】:2026-02-09 00:50:01
【问题描述】:
我正在使用 glScalef() 来放大我的程序,现在当我使用代码将其恢复为原始大小时:
glScalef(1.0f/ZOOM, 1.0f/ZOOM, 1);
它在高变焦时效果不佳...(可能是因为丢失了小数点?)
如何在不进行上述任何计算的情况下将其完美恢复到原始大小?
【问题讨论】:
我正在使用 glScalef() 来放大我的程序,现在当我使用代码将其恢复为原始大小时:
glScalef(1.0f/ZOOM, 1.0f/ZOOM, 1);
它在高变焦时效果不佳...(可能是因为丢失了小数点?)
如何在不进行上述任何计算的情况下将其完美恢复到原始大小?
【问题讨论】:
在你的第一个 glScalef() 之前使用 glPushMatrix() 将当前模型矩阵推入堆栈,然后当你想取回原始比例时使用 glPopMatrix() ,这样就不会有任何舍入错误在那里没有进行任何计算。
【讨论】:
您可以简单地保存您的投影矩阵。 glPushMatrix(), glScalef(), ..., glPopMatrix()
【讨论】:
将之前的大小存储在某个地方,比如堆栈,然后使用它。
(动画转换回之前的缩放、平移和旋转设置比缩放更有趣)
【讨论】:
你可以这样做:
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...]
【讨论】: