【发布时间】:2014-04-30 17:46:18
【问题描述】:
我在使用 gluLookAt 时遇到问题。
我的相机可以通过管道在相对鼠标运动事件中沿 X 和 Y 轴旋转。问题是 Z 轴 - 我不知道如何计算。
所以,我的相机可以向上、向下、向左和向右看。但我不知道如何完全旋转 360 度!
有人可以帮忙吗?
编辑:
所以,到目前为止,这是我的代码的一个简单示例:
Point3 test(0,0,0);
Matrix4 camera = Camera::getInstance().getCameraM();
if ((event.motion.xrel > 200) || (event.motion.yrel > 200))
{
break;
}
float mx = (event.motion.xrel);
float my = -(event.motion.yrel);
mx /= 20;
my /= 20;
test.setX(test.getX()+mx);
test.setY(test.getY()+my);
Camera::getInstance().lookAt(Point3(0,0,15),test,Vector3(0,-1,0));
Camera::lookAt 简单地封装了 glu lookAt 函数。
【问题讨论】:
-
FPS 相机通常不会滚动(绕 Z 旋转)。
gluLookAt (...)是专门为考虑该属性而构建的。它总是产生一个与向上 (Y) 和向前 (Z) 成直角的右向量(X 轴)。如果您无法弄清楚如何实现滚动,这可能就是原因。您必须先旋转您的 Y 轴(向上矢量),然后再将其输入gluLookAt (...)。
标签: c++ opengl camera sdl-2 glulookat