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

如果我正确理解了您的问题,那么您需要做的就是在绘制圆圈之前将模型视图矩阵设置回身份。您可以使用 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 回答