【问题标题】:LWJGL Rotating Only One Object On ScreenLWJGL 仅在屏幕上旋转一个对象
【发布时间】:2012-09-05 01:50:41
【问题描述】:

我正在尝试旋转屏幕上的两个对象之一。我该怎么做?我只能让它旋转屏幕上的所有对象。 代码:

            glColor3f(1, 0, 0);
        glBegin(GL_QUADS);
            glVertex3f(0f, 0f, 0f);
            glVertex3f(0f, .5f, 0f);
            glVertex3f(.5f, .5f, 0f);
            glVertex3f(.5f, 0f, 0f);
        glEnd();
        glRotated(.1, 0f, 1f, 0f);
        glRotated(.1, 1f, 0f, 0f);
        glRotated(.1, 0f, 0f, 1f);
        glBegin(GL_QUADS);
            glVertex3f(2f, 0f, 0f);
            glVertex3f(2f, .5f, 0f);
            glVertex3f(2.5f, .5f, 0f);
            glVertex3f(2.5f, 0f, 0f);
        glEnd();

到目前为止我的代码。

【问题讨论】:

  • 你看到两个四边形了吗?两者都是旋转的?目前您只旋转了非常小的量(十分之一度),几乎不会被注意到。
  • 我在游戏循环之前调用了 glIdentity(),所以它每帧旋转 0.1 度

标签: java 3d rotation lwjgl


【解决方案1】:

在不重置矩阵的情况下无休止地调用glRotated 是个坏主意。舍入误差会累积。您目前不调用glIdentity 每一帧。按以下方式渲染每一帧:

  1. 致电glIdentity
  2. 绘制第一个四边形
  3. 旋转
  4. 绘制第二个四边形

您渲染事物的方式,两个四边形的旋转差异只有三个轴上的 1/10 度 - 这并不明显。

请务必阅读 OpenGL,了解当前的 OpenGL 编程方式并尝试改进您的代码。看起来你好像不太明白自己在做什么,没有冒犯。

【讨论】:

    【解决方案2】:

    使用 glPushMatrix();在您的旋转变换和 glPopMatrix();在渲染第二个四边形之后,只有第二个四边形会受到旋转变换的影响。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-01
      • 2021-11-10
      • 2011-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多