尝试渲染时意外的飞行箱

时间:2014-10-22 02:36:41

标签: opengl matrix rendering opentk bullet

所以快速浏览照片:

这是正常的: normal

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

我不知道为什么会发生这种情况。我使用OpenTK渲染一个简单的Bullet物理场景。代码是直截了当的,几乎看起来矩阵的处理方式有问题。它是直接的渲染代码:

        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。

我哪里错了?我错过了什么?我该如何解决这个问题?!

1 个答案:

答案 0 :(得分:1)

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

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