画像を回転させた後、モデルの移動と回転の動作を修正しようとしています。これはよくある問題のようです。これが以前に尋ねられたのを見たことがありますが、コードに適用する方法を理解できるような方法で回答されたのを見たことがありません。画像を回転する前に、移動と回転の動作をそのままにしておきたいだけです。最初の回転の後、平行移動と回転は永遠に歪んでいます。また、私は 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
編集1:
私の描画ループは次のとおりです。
GL.Clear(ClearBufferMask.ColorBufferBit)
GL.Clear(ClearBufferMask.DepthBufferBit)
GL.MatrixMode(MatrixMode.Modelview)
GL.LoadIdentity()
drawStuff()
GlControl1.SwapBuffers()
プロジェクション マトリックス: ちょっと話を戻します。3D 空間 [Vertex3] に数千の頂点を持つ CAD モデルを描画しています。2D 空間 [オルソ] で表示しています。射影行列を変更して、さまざまな視点からモデルを表示します。モデル全体を再描画してすべての頂点を変換するよりも簡単だと思いました。私の考えでは、何千もの頂点の位置を再計算するよりも、カメラを動かす方が簡単です。それがスタンダードだと思いました。そうでなければ、私はすべての耳です。