【发布时间】:2011-05-25 14:43:00
【问题描述】:
我创建了一个相机类。可以用我的鼠标旋转 360 度并上下移动。正如我所想,就像在所有游戏中一样。也可以像所有游戏一样前进和后退。但是不知道如何实现左右移动。
我执行以下操作:
每帧都会调用它:
gluLookAt(_posX , _posY , _posZ,
_viewX, _viewY, _viewZ,
_upX, _upY, _upZ );
我的移动功能
不工作:
void Camera::moveLeft()
{
float rot= (_viewY / 180 * PI);
_moveX -= float(cos(rot)) * 0.5;
_moveZ -= float(sin(rot)) * 0.5;
}
有效
在场景中前进:
void Camera::moveForward()
{
float viewX = _viewX - _posX;
float viewY = _viewY - _posY;
float viewZ = _viewZ - _posZ;
_posX += viewX * speed
_posY += viewY * speed;
_posZ += viewZ * speed;
_viewX += viewX * speed;
_viewY += viewY * speed;
_viewZ += viewZ * speed;
}
当我只用鼠标移动时,没有问题。但是如果我使用这个功能并用鼠标旋转,我会得到一些奇怪的相机运动
关于如何解决这个问题的任何想法?
谢谢
@编辑
所以我删除了 glTranslated 语句并将 moveLeft 函数更改为以下内容:
void Camera::moveLeft(){
float x = ((_viewY * _upZ) - (_viewZ * _upY));
float y = ((_viewZ * _upX) - (_viewX * _upZ));
float z = ((_viewX * _upY) - (_viewY * _upX));
float magnitude = sqrt( (x * x) + (y * y) + (z * z) );
x /= magnitude;
y /= magnitude;
z /= magnitude;
_posX -= x;
_posY -= y;
_posZ -= z;
}
我显然做错了什么,因为左右移动“更好”,但仍然不是你所期望的。
【问题讨论】: