OpenGL旋转的问题
Problems with OpenGL rotation
在我的OpenGL应用程序中,我有一个使用键盘(移动)和鼠标(环顾四周)控制的相机。
到目前为止,一切都工作得很好,我注意到,如果我在Y轴上移动相机300以上,当移动鼠标时,它开始变得一团糟。例如,如果我移动到Y =310,并向上移动鼠标,当它开始向上看时,它也开始向左转。
我不确定这是什么原因。有人能帮忙吗?
下面是计算gluLookAt()
向前和向上位置的代码double cosR, cosP, cosY;//从的sin/cos的临时值双sinR sinP sinY;//输入的横摇/俯仰/偏航
if(Yaw > 359) Yaw = 0;
if(Pitch > 359) Pitch = 0;
if(Yaw < 0) Yaw = 359;
if(Pitch < 0) Pitch = 359;
cosY = cosf(Yaw*3.1415/180);
cosP = cosf(Pitch*3.1415/180);
cosR = cosf(Roll*3.1415/180);
sinY = sinf(Yaw*3.1415/180);
sinP = sinf(Pitch*3.1415/180);
sinR = sinf(Roll*3.1415/180);
//forward position
forwardPos.x = sinY * cosP*360;
forwardPos.y = sinP * 360;
forwardPos.z = cosP * -cosY*360;
//up position
upPos.x = -cosY * sinR - sinY * sinP * cosR;
upPos.y = cosP * cosR;
upPos.z = -sinY * sinR - sinP * cosR * -cosY;
金宝锁。
四元数是这个问题的标准解决方案。
简单地说,在你上面的计算中,当两个轴角相互接近时,会导致可用运动的损失。你需要一个四自由度来防止这种情况-这就是四元数数学所允许的。
相关文章:
- ASCII 旋转光标 (TUI) 动画出现问题
- 将四元数旋转的游戏对象旋转另一个四元数时出现问题
- 在OpenGL(GLM/C++)中使用四元数旋转时出现问题
- 从iPhone相机拍摄的视频似乎被OpenCV旋转了90度?我该如何解决这个问题?
- 2D旋转问题C Directx
- glulookat() - 旋转问题
- AVL二进制树旋转和删除树的C 问题
- AVL 树旋转问题
- 将矩阵逆时针旋转 180 度的问题
- 四元数 -> 欧拉角 -> 旋转矩阵问题 (GLM)
- C++OpenGl相机旋转使用四元数问题
- OpenGl 自定义旋转问题
- 这种在Qt中渲染旋转椭圆的尝试有什么问题
- OpenGL 旋转问题
- OpenGL:问题使图标旋转
- Turbo c++ 3D旋转问题
- 向量旋转问题
- OpenGL旋转的问题
- 检测Qt问题中的屏幕旋转
- 虚幻引擎中的四元数旋转框架问题