2010-11-21 22 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からカメラを移動した場合、それが悪い行きます。 このようなことを達成する方法を教えてくれるWeb上に利用できるものはありますか? 私はいろいろなことを試しましたが、まったく私の頭の中に頭を浮かべているようには見えません。 私はOgre3Dでこれを達成したので、J3Dの土地の法則に精通していないので、コンセプトに精通しています。回答:)を事前に

おかげ

答えて

1

ストアammoundあなたは各軸(xとy)を中心に回転し、あなたが例えばx軸の周りに回転しようとすると、yの周りの回転を逆にしています、 xの周りを回転させ、yの回りに回転をやり直してください。

私はあなたの2番目の質問を正しく理解していません。ビューアとモデルの変換は二重であるため、世界自体を変換することでカメラの動きをシミュレートできます。回転しているx軸とy軸を変換したくない場合は、使用している主TransformGroupに別のTransformGroupを追加し、新しいTransformGroupで変換します。

編集:あなたは、あなたがしなければならない変換3のうちのTransform3Dを行うことができますので、最初のソリューションは、かなり遅いです:

あなたは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); 

それはあなたが作る多くの変換に似ています:古いものをやり直し、変換か、以前に行わ逆転。私はそれが助けて欲しい

関連する問題