2015-11-19 66 views
1

我在开放式GL中有一个立方体。我通过乘以旋转矩阵来旋转立方体。如下所示,我还使用gluLookAt让相机在x轴上绕着立方体旋转。openGL - 使用gluLookAt在对象上方和下方旋转

case 'j': 
     eyeX = 10*cos(angle); 
     eyeZ = 10*sin(angle); 
     centerX = -cos(angle); 
     centerZ = -sin(angle); 
     angle -= 0.1; 
     break; 
    case'l': 
     eyeX = 10*cos(angle); 
     eyeZ = 10*sin(angle); 
     centerX = -cos(angle); 
     centerZ = -sin(angle); 
     angle += 0.1; 
     break; 

其中

gluLookAt(eyeX, eyeY, eyeZ, centerX, centerY, centerZ, 0.0, 1.0, 0.0); 

我所用越来越相机上面旋转和盘旋立方体它在y轴下方挣扎。

回答

0

为了使凸轮轨道的物体

  • 减去对象的世界正。从凸轮世界POS,

    cam_pos_os = cam_pos_ws - object_pos_ws

  • 就像你在你的代码

  • 添加对象的世界正做在世界空间旋转矢量指向cam_pos_os。再次到凸轮pos。在物空间,

    cam_pos_ws = cam_pos_os + object_pos_ws

+0

谢谢。我完全理解你的意思我只是无法理解openGL和C++。你推荐glTranslate glRotate和glTranslate吗?我如何获得世界位置和相机位置? –

+0

世界坐标中的cam pos是您在gluLookAt中输入的eyeX,Y,Z。你可以通过你想要的任何方式进行旋转和翻译(给出的正确性);但我可以推荐你跳过弃用的“glTranform/Rotate/Scale”东西,并转移到基于现代Shader/Buffer/Uniform的GL,并使用[glm](http://glm.g-truc.net/0.9.5/) index.html)用于剩余的CPU端代数。 –