2010-11-21 40 views
1

我一直在寻找一个晚上,但无法找到我要找的,甚至如果可能的话,这是非常令人痛心的信息;我使用Java3D的和无法弄清楚如何)Java3D:旋转世界坐标中的对象?

在世界空间旋转相机。

我的左/右和上/下旋转都发生在本地空间。 这意味着如果我左右移动,一切看起来都很好。然而,如果我向下看90度,然后向右看90度,那么一切似乎都在它的一边。

目前,我正在做以下工作。这将导致上述效果:

TransformGroup cam = universe.getViewingPlatform().getViewPlatformTransform(); 
Transform3D trfcam = new Transform3D(); 
cam.getTransform(trfcam); 

trfcam.mul(Camera.GetT3D()); //Gets a Transform3D containing how far to rotate left/right and how far to move left/right/forward/back 

trfcam.mul(Camera.GetRot()); //Gets a t3d containing how far to rotate up/down 

cam.setTransform(trfcam); 

另外,有一点我想是旋转的根源,而是绕0,所以如果我从0移动相机了,它会坏的。 在网上有什么东西可以通过我如何实现这种事情来讨论我吗? 我尝试了很多不同的东西,但似乎无法让我的头在附近。 我很熟悉这个概念,因为我在Ogre3D中已经实现了它,只是不熟悉J3D中的土地法则。

预先感谢答复:)

回答

1

商店你身边的每个轴(x和y)旋转,当您试图绕X轴旋转,例如反向围绕y的转动而ammound,在x周围旋转,然后在y周围重做旋转。

我不确定我是否正确理解你的第二个问题。由于观看者和模型转换是双重的,您可以通过转换世界本身来模拟相机移动。如果您不想翻译正在旋转的x和y轴,只需将另一个TransformGroup添加到您正在使用的主TransformGroup中,然后在新的TransformGroup中进行变换。

编辑:第一方案是相当缓慢的,所以你可以做的Transform3D出3变换你要做的:

说你有绕X轴(Translate3D xrot)旋转,而现在则需要要绕Y:

Translate3D yrot = new Translate3D(); 
yrot.rotY(angle); 

Translate3D temp = xot; 
xrot.mul(yrot); // Dont forget the reverse order. xrot is the previous translate 
xrot.mul(yrot); // xrot = xrot * yrot * xrot^-1 
temp.transpose(); // Get the reverse transform of the old transform 
xrot.mul(temp); 

yrot = xrot; // Store it for future rotation around x axis 
cam.setTransform(yrot); 

它为你做许多转换类似:扭转以前做过,做了改造,重做旧的。我希望它有帮助。