OpenTK循环旋转

时间:2011-12-19 22:55:04

标签: graphics rotation opentk

我正在使用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);
}

所以我想询问是否有一些方法可以绘制圆圈,这将不受此旋转的影响(将在屏幕上的相同位置)。

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,那么您需要做的就是在绘制圆圈之前将模型视图矩阵设置回身份。您可以使用PushMatrix()和PopMatrix()函数轻松完成此操作。像这样:

//Draw normal things

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

//Draw un-rotated circle

GL.PopMatrix();

PushMatrix()将当前矩阵保存到堆栈中,PopMatrix()弹出该堆栈的顶部矩​​阵。这意味着完成圆圈后,PopMatrix()将带您回到正常的旋转参考框架。