我有一个包含位于空间的任何地方,我正在做一个轨迹球一样的界面对象的场景。
我想使它这样我可以将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轴,面对一个特定的罗盘航向(偏航),然后旋转到一个特定的标高(间距)?
如果是这样的话,那么你只需做你的两个旋转以正确的顺序,以及一切都会好起来。 在这个例子中,你首先必须做的“基音”旋转,然后将“偏航”旋转。 一切都将迎刃而解。
如果你的意思是更复杂的东西(例如像精英的“眼镜蛇”飞船),那么你就需要一个更繁琐的解决方案。