내 목표는 사용자가 3D 모델을 업로드하고 웹 브라우저를 사용하여 위치를 지정할 수 있도록하는 것입니다. 이렇게하려면 BabylonJS-&을 잘 사용하고 있습니다. 그런 다음 내 사용자가 웹 브라우저를 사용하여 설정 한 위치와 동일한 위치로 기본 앱에서 동일한 모델을 볼 수있게하려고합니다. 네이티브 응용 프로그램에 사용하고있는 프레임 워크는 OpenSceneGraph (OSG)입니다. 내가 가지고있는 문제는 OpenSceneGraph가 BabylonJS에서 일어나는 일을 정확하게 반영 할 수 있도록 회전이 제대로 작동하지 못한다는 것입니다.오일러 각도 회전을 축 + 각도로 변환
저는 웹 사이트 사용자가 이해하기 쉬운 (예 : X 축을 중심으로 90도 회전하고 Y를 중심으로 180도 회전하고 Z 모델을 중심으로 0도 회전 등) 쉬운 바울러스 쥬스에서 오일러 각을 사용하고 있습니다. rotation = new BABYLON.Vec3 (90,180,0)). 그러나 OSG는 회전 축과 회전 각도가 필요한 OpenGL glrotate() 함수를 사용합니다. 이것을하기 위해 저는 Euler 각도에서 Quaternion을 만들기 위해 BabylonJS를 사용합니다;
function getAxisAngle(){
var q = BABYLON.Quaternion.RotationYawPitchRoll(m.rotation.y, m.rotation.x, m.rotation.z),s,r={};
/*Convert quaternion to axis+angle*/
if(q.w > 1){
q = q.normalise();
}
r.angle = BABYLON.Tools.ToDegrees(2 * Math.acos(q.w));
s = Math.sqrt(1-q.w*q.w);
if(s < 0.001){
r.ax = q.x;
r.ay = q.y;
r.az = q.z;
}else{
r.ax = q.x/s;
r.ay = q.y/s;
r.az = q.z/s;
}
return r;
}
http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm 내가 BJS 및 OSG 사이의 근본적인 차이를 실현 BJS 좌표계 왼손잡이라는 것이다; 그리고 난이 페이지에서 자바 예제를 기반으로 쓴 기능을 사용하여 OSG는 오른 손잡이입니다. 그래서 나는 시계 방향으로 얼굴을 감아 서 OSG를 왼손잡이로 만들었습니다. 내 모델의 z 축을 -1만큼 크기 조정합니다.
한 번에 한 축을 분리하면 기본 수준에서 작동합니다. 예 : 만약 내가 단지 y 축을 중심으로 회전한다면; 다른 축을 중심으로 회전하지 마십시오. 그러나 동시에 두 개 또는 세 개의 오일러 각을 시도하고 결합하면; 나는 OSG에서 똑같이 보이도록 할 수는 없다.
나는 오일러 각을 권장하지 않는다는 것을 읽었습니다. 부분적으로 회전이 각 축에 적용되는 순서가 중요하기 때문입니다. 가능한 원인입니까?
한쪽 끝에 쿼터니언을 사용하고 다른 쪽 끝에 오일러 각을 사용 했으므로 짐발 잠금으로 인해 오일러 각에 대해 쿼터니언을 사용하는 것의 차이점을 잘 알고 있기 때문에 추측하고 있습니다. 응용 프로그램이 오일 축을 사용하여 여러 회전 축에서 회전을 수행하고 짐벌 잠금이 발생하면 회전이 중단됩니다. 축에서 회전을 할 때 오일러 각을 계속 사용하려면 짐벌 잠금 (Gimbal Lock)이 [-89.99, 89.99]가되는 것을 막기 위해 사이를 구속해야합니다. (... 계속) –
(... 계속) 짐벌 잠금의 이유는 90도 또는 PI/4가 직각 또는 직교로 인한 것입니다. Sine (90) 또는 Sine (PI/4) = 1, Cosine (90) 또는 Cosine (PI/4) = 0이고 Tangent = 사인/코사인 이후 당신의 탄젠트는 0으로 나누기 때문에 정의되지 않습니다. X 축 90 °, Y 90 °, Z 90 ° 또는 -90 °로 움직입니다. 두 축이 연동되고 두 개의 고정 축 중 하나에서 다시 회전 할 때 발생합니다. 이 함수는 회전 할 축을 결정할 수 없습니다. (... 계속) –
(...계속) Quaternions에 대한 명확한 이해를 얻으려면이 비디오를 확인하십시오. 아마도 수학적으로는 아니지만 적어도 시각적으로는 알 수 있습니다. https://www.youtube.com/watch?v=zc8b2Jo7mno –