5

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

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

它在高变焦时效果不佳......(可能是因为丢失了小数点?)

我如何在没有像上面这样的任何计算的情况下将它完美地恢复到原始大小?

4

4 回答 4

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...]
于 2009-03-11T18:16:16.020 回答
5

您可以简单地保存您的投影矩阵。glPushMatrix(), glScalef(), ..., glPopMatrix()

于 2009-03-11T18:17:28.560 回答
4

在你的第一个 glScalef() 之前使用 glPushMatrix() 将当前模型矩阵推入堆栈,然后当你想取回原始比例时使用 glPopMatrix() ,这样不会有任何舍入错误,因为没有计算正在做。

于 2009-03-11T18:18:41.253 回答
2

将以前的大小存储在某个地方,比如说在堆栈中,然后使用它。

(动画转换回之前的缩放、平移和旋转设置比缩放更有趣)

于 2009-03-11T18:16:48.793 回答