首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenTK圆旋转

OpenTK圆旋转
EN

Stack Overflow用户
提问于 2011-12-20 06:55:04
回答 1查看 1.2K关注 0票数 1

我正在使用openTk做我的第一个项目。我正在为3D模型旋转创建虚拟的arcball。它工作得很好,但我需要添加不会随模型旋转的圆。这个圆应该是arcball的可视化图形。我实现旋转的代码是:

代码语言:javascript
复制
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);
}

所以我想问一下,有没有什么方法可以画出不受旋转影响的圆(在屏幕上的相同位置)。

EN

回答 1

Stack Overflow用户

发布于 2012-03-04 15:34:19

如果我没理解错你的问题,那么你所需要做的就是在画圆之前将模型视图矩阵重新设置为身份。您可以使用PushMatrix()和PopMatrix()函数轻松完成此操作。如下所示:

代码语言:javascript
复制
//Draw normal things

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

//Draw un-rotated circle

GL.PopMatrix();

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8568674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档