在2个轴旋转OpenGL场景(Rotating OpenGL scene in 2 axes)

2019-09-23 17:38发布

我有一个包含位于空间的任何地方,我正在做一个轨迹球一样的界面对象的场景。

我想使它这样我可以将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度。 我只是需要让他们相互独立的!

Answer 1:

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

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



Answer 2:

你也许可以使用这样的:

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


Answer 3:

当你说垂直和水平方向旋转,你的意思是像高射炮 - 绕垂直Z轴,面对一个特定的罗盘航向(偏航),然后旋转到一个特定的标高(间距)?

如果是这样的话,那么你只需做你的两个旋转以正确的顺序,以及一切都会好起来。 在这个例子中,你首先必须做的“基音”旋转,然后将“偏航”旋转。 一切都将迎刃而解。

如果你的意思是更复杂的东西(例如像精英的“眼镜蛇”飞船),那么你就需要一个更繁琐的解决方案。



文章来源: Rotating OpenGL scene in 2 axes