在2轴上旋转OpenGL场景

时间:2009-08-14 15:04:40

标签: opengl translation rotation dependencies

我有一个包含位于太空任何地方的物体的场景,我正在制作一个类似轨迹球的界面。

我想制作它以便我可以移动2个单独的滑块分别在x和y轴上旋转它:

glRotatef(drawRotateY,0.0,1.0f,0);
glRotatef(drawRotateX,1.0f,0.0,0.0);
//draw stuff in space

但是,上面的代码不起作用,因为X旋转将依赖于Y旋转。

如何在不使用gluLookAt()的情况下实现这一目标?

编辑: 我想说我的实现比轨迹球界面更简单。基本上,如果x滑块值为80且y滑块为60,则垂直旋转80度,水平旋转60度。我只需要让它们彼此独立!

3 个答案:

答案 0 :(得分:0)

此代码可以帮助您入门:http://www.cse.ohio-state.edu/~crawfis/Graphics/VirtualTrackball.html

它解释了如何使用GL窗口中的当前鼠标位置实现虚拟轨迹球。

答案 1 :(得分:0)

你可以使用这样的东西:

Vector v = new Vector(drawRotateX, drawRotateY, 0);
float length = v.length();
v.normalize();
glRotatef(length, v.x, v.y, v.z);

答案 2 :(得分:0)

当你说垂直和水平旋转时,你的意思是像一架高射炮 - 围绕垂直Z轴旋转,面向特定的罗盘航向(偏航),然后旋转到特定的高度(俯仰)? / p>

如果是这种情况,那么你只需按正确的顺序进行两次旋转,一切都会顺利进行。在此示例中,您必须首先执行“俯仰”旋转,然后执行“偏航”旋转。一切都会好起来的。

如果你的意思更复杂(例如像精英中的'Cobra'宇宙飞船)那么你将需要一个更加繁琐的解决方案。