Graphics OpenTK圆旋转

Graphics OpenTK圆旋转,graphics,rotation,opentk,Graphics,Rotation,Opentk,我正在使用openTk进行我的第一个项目。我正在为三维模型旋转创建虚拟电弧球。它工作得很好,但我需要添加一个不会随模型旋转的圆。这个圆圈应该是弧形的。 我实现旋转的代码是: private void SetCamera() { GL.MatrixMode(MatrixMode.Modelview); Matrix4 scale = Matrix4.Scale(magnification / diameter); Matrix4 translation1 = Matrix4

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

因此,我想问一下,是否有某种方法可以绘制圆,而圆不会受到旋转的影响(将位于屏幕上的同一位置)。

如果我正确理解了您的问题,那么您只需在绘制圆之前将modelview矩阵设置回标识即可。您可以使用PushMatrix()和PopMatrix()函数轻松完成此操作。大概是这样的:

//Draw normal things

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

//Draw un-rotated circle

GL.PopMatrix();

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

它们与我过去的做法相同……您只需使用常规projecton matrix渲染所有3D内容,然后将其替换为“2d矩阵”,并渲染UI的其余部分