在2个轴上旋转OpenGL场景

我有一个场景,其中包含位于空间任何位置的对象,并且我正在制作一个类似轨迹球的界面。

我想使它能够移动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度。 我只需要让他们彼此独立!


这段代码应该让你开始:http://www.cse.ohio-state.edu/~crawfis/Graphics/VirtualTrackball.html

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


你可以使用这样的东西:

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

当你说垂直和水平旋转时,你的意思是像防空炮 - 围绕垂直Z轴旋转,面对特定的罗盘航向(偏航),然后旋转到特定高程(俯仰)?

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

如果你的意思更复杂一些(例如像精英中的'Cobra'太空船),那么你需要一个更复杂的解决方案。

链接地址: http://www.djcxy.com/p/14341.html

上一篇: Rotating OpenGL scene in 2 axes

下一篇: How slow are Java exceptions?