我正在开发一个在其视口交互中与 MotionBuilder 具有相似功能的应用程序。它有三个按钮: 按钮 1 根据 X/Y 鼠标拖动围绕 X 和 Y 旋转视口。按钮 2 根据 X/Y 鼠标拖动来平移 X 和 Y 周围的视口。按钮 3 通过沿 Z 轴平移“缩放”视口。
代码很简单:
glTranslatef(posX,posY,posZ);
glRotatef(rotX, 1, 0, 0);
glRotatef(rotY, 0, 1, 0);
现在,问题是如果我先平移,平移将是正确的,但旋转会跟随世界轴。我也试过先旋转:
glRotatef(rotX, 1, 0, 0);
glRotatef(rotY, 0, 1, 0);
glTranslatef(posX,posY,posZ);
^ 旋转有效,但平移根据世界轴进行。
我的问题是,我怎样才能做到这两点才能实现代码片段 1 的翻译和代码片段 2 的旋转。
编辑我画了这个相当粗糙的图像来说明我所说的世界和局部旋转/翻译的意思。我需要相机围绕其局部轴旋转和平移。 http://i45.tinypic.com/2lnu3rs.jpg