0

写真の簡単なサンプルについては、次のとおりです。

これは正常です: 正常

これは、X 軸または Y 軸で 180 度回転した後です。 回転した

なぜこれが起こっているのか、まったくわかりません。私は 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 にあります。

どこが間違っていますか?私は何が欠けていますか?どうすればこれを修正できますか?!

4

1 に答える 1

1

わかりました... PushAttrib(AttribMask.AllAttribBits); PushMatrix();/TEXTFONT LOADING CODE/で修正しました。どういうわけか、後でレンダリングするためにフォントをロードするコードに設定されたいくつかの奇妙な属性により、GL.Rotate は (0, 0, 0) ではなく (0, 0, 1) を中心に回転します... OpenGL は確かに気まぐれです...

したがって、ここでの教訓は... OpenGL を扱うときに、無関係なコードが本当に無関係であると想定しないことです。

于 2014-10-25T19:52:47.590 に答える