如何恢复glScalef()?

发布于 2024-07-14 11:00:12 字数 189 浏览 5 评论 0原文

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

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

它在高缩放中效果不佳......(也许是因为丢失了小数?)

我如何将其恢复回来完全达到原始尺寸而不需要像上面那样进行任何计算?

Im using glScalef() for zooming in my program, now when i revert it back to the original size with code:

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

It doesnt work very well in high zooms... (maybe because of the lost decimals?)

How i can revert it back perfectly to the original size without any calculations like above?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

゛时过境迁 2024-07-21 11:00:12

您可以这样做:

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...]

You could either do it like this:

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

or use glPushMatrix/glPopMatrix to restore the original matrix before zooming:

glPushMatrix();
glScalef(ZOOM, ZOOM, 1);
[do whatever you like here...]
glPopMatrix(); // now it's at normal scale again
[do other things here...]
一城柳絮吹成雪 2024-07-21 11:00:12

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

You can simply save your projection matrix. glPushMatrix(), glScalef(), ..., glPopMatrix()

谎言月老 2024-07-21 11:00:12

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

Use glPushMatrix() before your first glScalef() to push the current model matrix onto the stack, and then glPopMatrix() when you want to get back the original scale, that way there won't be any rounding errors as there are no calculations being done.

咆哮 2024-07-21 11:00:12

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

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

Store the previous size somewhere, say in a stack, and use that.

(animating the transition back to a previous zoom, pan and rotate setting is quite fun rather than zooming)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文