我正在使用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);
}
所以我想询问是否有一些方法可以绘制圆圈,这将不受此旋转的影响(将在屏幕上的相同位置)。
答案 0 :(得分:0)
如果我正确理解了您的问题,那么您需要做的就是在绘制圆圈之前将模型视图矩阵设置回身份。您可以使用PushMatrix()和PopMatrix()函数轻松完成此操作。像这样:
//Draw normal things
GL.MatrixMode(MatrixMode.Modelview);
GL.PushMatrix();
GL.LoadIdentity();
//Draw un-rotated circle
GL.PopMatrix();
PushMatrix()将当前矩阵保存到堆栈中,PopMatrix()弹出该堆栈的顶部矩阵。这意味着完成圆圈后,PopMatrix()将带您回到正常的旋转参考框架。