首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >OpenGL旋转的问题

OpenGL旋转的问题
EN

Stack Overflow用户
提问于 2013-04-12 06:44:57
回答 1查看 114关注 0票数 1

在我的OpenGL应用程序中,我有一个使用键盘(移动)和鼠标(环视)控制的相机。

到目前为止,一切都运行得很好,我已经注意到,如果我在Y轴上将相机移动到300以上,当我移动鼠标时,它会开始变得混乱。例如,如果我转到Y =310,并向上移动鼠标,当它开始向上查找时,它也开始向左旋转。

我不确定这是什么原因。有人能帮上忙吗?

下面是计算gluLookAt()的向前和向上位置的代码

double cosR,cosP,cosY;//来自double sinR,sinP,sinY的sin/cos临时值;//输入的横摇/俯仰/偏航

代码语言:javascript
运行
复制
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;
EN

回答 1

Stack Overflow用户

发布于 2013-04-12 06:47:33

万能锁。It is explained here.

四元数是这个问题的标准解决方案。

简而言之,在上面的计算中,当两个轴角彼此接近时,会导致可用移动的损失。你需要第四个自由度来防止这种情况--这是四元数数学所允许的。

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

https://stackoverflow.com/questions/15960172

复制
相关文章

相似问题

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