イメージを回転した後、私のモデルの翻訳と回転動作を修正しようとしています。これはよくある問題のようです。私はこれまでに尋ねられたことを見てきましたが、私のコードにそれを適用する方法を理解するような方法でそれが返答されているのを見たことはありません。私は単に画像を回転する前の状態に翻訳と回転の振る舞いを残しておきたいだけです。最初の回転の後、平行移動と回転は永遠に歪められます。また、私はOpenGLで非常にグリーンですので、ゆっくり話してください。イメージを回転した後、翻訳ベクトルが歪んでいます
Private Sub GlControl1_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles GlControl1.MouseMove
If _MouseButtonLeft Then
'
' get new position of mouse
_XposEnd = e.X - _Xpos
_YposEnd = _Ypos - e.Y
'
' reset the mouse start position
_Xpos = e.X
_Ypos = e.Y
'
' change projection
GL.MatrixMode(MatrixMode.Projection)
GL.Translate(_XposEnd * _MouseSpeed, _YposEnd * _MouseSpeed, 0)
GlControl1.Invalidate()
'
End If
'
If _MouseButtonRight Then
'
' get new position of mouse
_XposEnd = e.X - _Xpos
_YposEnd = _Ypos - e.Y
'
' reset the mouse start position
_Xpos = e.X
_Ypos = e.Y
'
' change projection
GL.MatrixMode(MatrixMode.Projection)
GL.Rotate(_XposEnd * _MouseSpeed, 1, 0, 0)
GL.Rotate(_YposEnd * _MouseSpeed, 0, 1, 0)
GlControl1.Invalidate()
'
End If
End Sub
EDIT 1:
マイドローループは次のとおりです。
GL.Clear(ClearBufferMask.ColorBufferBit)
GL.Clear(ClearBufferMask.DepthBufferBit)
GL.MatrixMode(MatrixMode.Modelview)
GL.LoadIdentity()
drawStuff()
GlControl1.SwapBuffers()
投影行列:バック秒まで私をしてみましょう。 3D空間[Vertex3]に何千もの頂点を持つCADモデルを描いています。私は2D空間[Ortho]でそれらを見ています。異なる視点からモデルを見るために投影行列を修正します。私は、モデル全体を再描画してすべての頂点を変換するよりも簡単だと思いました。私の心の中でカメラを動かすことは、何千もの頂点の位置を再計算するよりも簡単です。私はそれが標準であると考えました。そうでなければ、私はすべての耳です。
ねえ、あなたはあなたのドロー・ループ内のどこglLoadIdentityを使うのですか?あなたがglRotateをスタックしたいので、あなたはしないと思います。これが問題であれば、熟考してください。また、Projection matrixを変更したいと思っているのは非常に奇妙です。 –