为什么这个OpenGL旋转也会翻译我的对象
Why does this OpenGL rotation also translate my object?
我试图旋转一个对象(一个箭头),它的默认位置指向右边。我一直在寻找周围,我使用glloadiidentity()和glPushMatrix()和glPopMatrix()作为一种方法,只旋转对象在我的glBegin函数,而不是整个场景:
glLoadIdentity();
glPushMatrix();
glRotatef(5, 0.0f, 0.0f, 1.0f);
glBegin(GL_TRIANGLE_FAN);
glColor3f(1.0f, 0.0f, 1.0f);
glVertex2f(xx2-0.01, yy2);
glVertex2f(xx2-0.06, yy2+0.03);
glVertex2f(xx2-0.06, yy2-0.03);
glEnd();
glPopMatrix();
然而,它也翻译我的箭头,而不仅仅是旋转它。我需要将偏移量转换回它的原始位置吗?还是我做错了什么?
解决:
glLoadIdentity();
glPushMatrix();
glTranslatef(xx2, yy2, 0);
glRotatef(45, 0.0f, 0.0f, 1.0f);
glTranslatef(-xx2, -yy2, 0);
glBegin(GL_TRIANGLE_FAN);
glColor3f(1.0f, 0.0f, 1.0f);
glVertex2f(xx2-0.01, yy2);
glVertex2f(xx2-0.06, yy2+0.03);
glVertex2f(xx2-0.06, yy2-0.03);
glEnd();
glPopMatrix();
需要转换回中心(0,0,0),应用旋转,然后返回到原始位置(xx2, yy2, 0)
所有的旋转都围绕原点。
是的,如果你想绕其他点旋转,你必须从那个点平移到原点,旋转,然后再平移回来
您的代码是正确的,但是您的操作顺序乱了。具体来说,您需要先应用旋转,然后应用平移。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 我的字符计数代码计算错误.为什么
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- cmake在我的项目中所需的所有静态库都不成功
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 为什么我的for循环不能正确获取argv
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 0-1背包代码中的错误.我的代码中有什么错误
- 当我的阵列太大时出现分段错误
- 如何确认我的constexpr表达式实际上已经在编译时执行
- 为什么二进制搜索在我的测试中不起作用
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 无法通过字符串循环我的程序以将其从英语翻译成猪拉丁语
- C++如何用类和函数将我的代码翻译成OOP
- P/调用语法 - 我是否在 C# 中正确翻译了我的C++函数
- 为什么Visual C++中的“我的语言”翻译器程序不用翻译就覆盖文件
- 为什么这个OpenGL旋转也会翻译我的对象