2011-12-19 19 views
1

私はopenTkを使って私の最初のプロジェクトに取り組んでいます。私は3Dモデルの回転のための仮想アークボールを作成しています。それは正常に動作しますが、私はモデルで回転しない円を追加する必要があります。この円は、アークボールを視覚化する必要があります。 回転を達成するために私のコードは次のとおりです。OpenTKサークルローテーション

private void SetCamera() 
{ 
    GL.MatrixMode(MatrixMode.Modelview); 
    Matrix4 scale = Matrix4.Scale(magnification/diameter); 
    Matrix4 translation1 = Matrix4.CreateTranslation(-center); 
    Matrix4 rotation = Matrix4.CreateFromAxisAngle(axisOfRotation, angleOfRotation*(float)numericSensitivity.Value); 
    Matrix4 translation2 = Matrix4.CreateTranslation(0.0f, 0.0f, -1.5f); 
    if (rotationChanged) 
    { 
     oldRotation *= rotation; 
     rotationChanged = false; 
    } 
    modelview = translation1 * scale * oldRotation * translation2; 
    GL.LoadMatrix(ref modelview); 
} 

は、だから私はこのrotattionの影響を受けないことがウィル円を描画するためにどのようにいくつかの方法があるかどうかお尋ねしたいと思います(画面上の同じ位置になります)。

+0

これまで私はそれをやったことがあります...普通のプロジェクションマトリックスを使って3Dのものをレンダリングしてから、それをあなたの「2次元マトリックス」に置き換えて残りのUIをレンダリングするだけです – mpen

答えて

0

あなたの質問を正しく理解していれば、サークルを描画する前にmodelview行列をIDに戻すだけで済みます。 PushMatrix()とPopMatrix()関数を使って簡単に行うことができます。このような何か:

//Draw normal things 

GL.MatrixMode(MatrixMode.Modelview); 
GL.PushMatrix(); 
GL.LoadIdentity(); 

//Draw un-rotated circle 

GL.PopMatrix(); 

PushMatrix()は、スタックに現在の行列を保存し、そしてPopMatrixは()はスタックから最上位行列をポップ。これは、円で終わった後、PopMatrix()があなたの通常の回転基準フレームに戻ることを意味します。

関連する問題