OpenGL变换问题

发布于 2024-09-30 00:45:12 字数 282 浏览 6 评论 0原文

有人可以解释一下下面的例子中发生了什么吗:

glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glRotatef(45,0,0,1);
DrawCube();
glTranslatef(4,0,0);
glRotatef(-45,0,0,1);
DrawCube();
glPopMatrix();

我假设它只会旋转正方形,将其右移 4 个单位,然后将其旋转回原来的旋转状态。这似乎太简单了,我是否缺少什么?

Can someone explain what is happening in the example below:

glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glRotatef(45,0,0,1);
DrawCube();
glTranslatef(4,0,0);
glRotatef(-45,0,0,1);
DrawCube();
glPopMatrix();

I am assuming that it will just rotate the square, shift it right 4 units, and then rotate it back to its original rotation. It seems too easy though, is there something I am missing?

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

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

发布评论

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

评论(1

帅哥哥的热头脑 2024-10-07 00:45:12

大致 -

  • 确保 OpenGL 将矩阵运算应用于模型视图堆栈
  • 保存堆栈的当前值(稍后由弹出操作恢复)
  • 加载恒等式,清除所有旋转/变换/任何内容
  • 将当前矩阵变换围绕矩阵旋转 45 度X 轴
  • 绘制一个立方体(使用已旋转的当前矩阵变换)
  • 将当前矩阵变换在 X 轴上平移 4 个单位
  • 将当前矩阵变换绕 x 轴旋转 -45 度
  • 绘制另一个立方体已从第一个立方体的位置平移和旋转的
  • 矩阵 恢复由 Push 保存的原始矩阵变换

这将导致绘制两个立方体。第一个位于中心,旋转了 45 度,第二个在旋转的 x 轴上 4 个单位之外,本身旋转了 -45 度。

Roughly-

  • Make sure OpenGL applies matrix operations to the modelview stack
  • Save the current value of the stack (to be reverted by the pop later)
  • Load the identity, clearing any and all rotates/transforms/whatever
  • Rotate the current matrix transformation 45 degrees around the X axis
  • Draw a cube (using the current matrix transformation, which has been rotated)
  • Translate the current matrix transformation 4 units in the X axis
  • Rotate the current matrix transformation -45 degrees around the x axis
  • Draw another cube that has been translated and rotate from the position of the first cube
  • Restore the original matrix transform that was saved by the Push

This results in two cubes being drawn. The first is in the center, and rotated 45 degrees, and the second 4 units away on the rotated x-axis, and itself rotated -45 degrees.

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