2010-11-21 71 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); 

它爲你做許多轉換類似:扭轉以前做過,做了改造,重做舊的。我希望它有幫助。