2010-11-21 4 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 회전, 나쁜 간다. 웹에서 이러한 종류의 작업을 수행하는 방법을 설명 할 수있는 것이 있습니까? 나는 많은 다른 것들을 시도했지만 그저 내 머리를 맞대고있는 것처럼 보이지 않습니다. Ogre3D에서이 개념을 구현 했으므로이 개념을 잘 알고 있습니다. J3D의 토지법에 익숙하지 않은 것 같습니다. 답변 : 사전에

감사

답변

1

저장합니다 ammound 각 축 (x와 y)를 중심으로 회전하고, 예를 들어 x 축 중심으로 회전 할 때, y를 중심으로 회전을 반전 한 x를 중심으로 회전 한 다음 y를 중심으로 회전을 다시 실행합니다.

두 번째 질문을 올바르게 이해하고 있는지 잘 모르겠습니다. 뷰어와 모델 변환은 이중이기 때문에 월드 자체를 변형하여 카메라 이동을 시뮬레이션 할 수 있습니다. 회전하려는 x 축과 y 축을 변환하지 않으려면 사용중인 주 TransformGroup에 다른 TransformGroup을 추가하고 새 TransformGroup에서 변형을 수행하십시오.

편집 : 지금 당신이 필요로하는

는 x 축 (Translate3D의 xrot)을 중심으로 회전 한 말, 그리고 : 당신이 3 밖으로 Transform3D을 당신이해야 할 변환 할 수 있도록 첫 번째 솔루션은 매우 느린 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); 

: 이전 일을 다시는 변환을 수행 할 이전을 반대. 나는 그것이 도움이되기를 바랍니다.