1

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

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);
}

そこで、この回転の影響を受けない(画面上の同じ位置にある)円を描く方法があるかどうかを尋ねたいと思います。

4

1 に答える 1

0

私があなたの質問を正しく理解していれば、円を描く前にモデルビュー マトリックスを ID に戻すだけで済みます。これは、PushMatrix() および PopMatrix() 関数を使用して簡単に行うことができます。このようなもの:

//Draw normal things

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

//Draw un-rotated circle

GL.PopMatrix();

PushMatrix() は現在のマトリックスをスタックに保存し、PopMatrix() はそのスタックから最上位のマトリックスをポップします。つまり、PopMatrix() は、円を処理した後、通常の回転された参照フレームに戻ります。

于 2012-03-04T07:34:18.617 に答える