0

因此,对于图片中的快速示例:

这个是正常的: 普通的

这是在 X 或 Y 轴上旋转 180 度之后: 旋转

我根本不明白为什么会这样。我正在使用 OpenTK 渲染一个简单的子弹物理场景。代码很简单,处理矩阵的方式似乎有问题。这是直接的渲染代码:

        GL.PushMatrix();
        GL.MultMatrix(Body.MotionState.WorldTransform.ToArray());
        GL.Scale(HalfX * 2, HalfY * 2, HalfZ * 2);
        GL.Color4(Color4.Blue);
        GL.Begin(PrimitiveType.Lines);
        GL.Vertex3(0, 0, 0);
        GL.Vertex3(0, 0, 10);
        GL.End();
        GL.Color4(Color4.Yellow);
        GL.Begin(PrimitiveType.Lines);
        GL.Vertex3(0, 0, 0);
        GL.Vertex3(0, 10, 0);
        GL.End();
        GL.Color4(Color4.Green);
        GL.Begin(PrimitiveType.Lines);
        GL.Vertex3(0, 0, 0);
        GL.Vertex3(10, 0, 0);
        GL.End();
        if (Body.ActivationState == ActivationState.ActiveTag)
        {
            GL.Color4(Color4.Blue);
        }
        else if (Mass == 0)
        {
            GL.Color4(Color4.Red);
        }
        else
        {
            GL.Color4(Color4.Green);
        }
        model.Draw();
        GL.PopMatrix();

我试过把它分解成它的组件:平移向量很好,缩放很好,在 Z 轴上旋转看起来很好......当你在 X 或 Y 轴上添加旋转时,它开始飞行。我有控制台输出:在两个图像中,框在 Z 轴上正好是 6.9999。

我哪里错了?我错过了什么?我该如何解决?!

4

1 回答 1

1

好的...PushAttrib(AttribMask.AllAttribBits); PushMatrix();在我的 /TEXTFONT LOADING CODE/ 中修复了它。不知何故,在加载字体以稍后渲染的代码中设置了一些奇怪的属性,使 GL.Rotate 围绕 (0, 0, 1) 而不是 (0, 0, 0) 旋转...... OpenGL 肯定是气质......

所以这里的教训是......在处理 OpenGL 时,永远不要假设不相关的代码是真正不相关的。

于 2014-10-25T19:52:47.590 回答