2017-09-27 5 views
0

기기 방향 제어 기능을 사용하고 있지만 문제가있는 추가 기능이 필요합니다.Three.js : 기본 방향이 다른 DeviceOrientationControl 사용

사용자가 카메라를 "잠글 수 있도록"카메라 방향이 변경되지 않도록하고 싶습니다. 잠금을 해제하면 뷰가 잠긴 위치에서 카메라를 회전 시키길 원합니다. 보기가 잠겨있는 동안 휴대 전화의 방향이 변경 되었더라도 카메라가 다른 방향으로 "점프"하는 것을 원하지 않습니다.

여기 DeviceOrientaionControls.js의 수정 된 버전에 대한 코드입니다 : https://gist.github.com/BruOp/a3fb2f0854357eb1182671cafd3fae89

결정적인 부분이 update, disconnectreconnect에 있습니다.

나는 사용자가 "잠글"때 방향을보고 (lockedRot이라고 부름) "잠기지 않음"(unlockedRot) 때 장치의 방향을 취하고 있습니다.

deviceToPercieved * unlockedRot = lockedRot

하지만 정말 작동하지 않습니다 : 그때 deviceToPercieved 있도록 사원 수를 찾을 수 있습니다. 경우에 따라 카메라가 잠기지 않고 잠길 때만 점프 할 수 있지만 다른 경우에는 잠금 해제시 완전히 잠긴 자세를 유지하지 못할 수도 있습니다.

여기에 잘못된 접근 방식을 사용하고 있습니까? 아니면 더 근본적인 것을 놓치고 있습니까?

답변

0

문제점을 발견했습니다. 이것은 쿼터니언 deviceToPerceived을 계산할 때 곱셈의 순서에 불과했습니다. 그것은이었다

this.deviceToPercieved.multiplyQuaternions(
    this.unlockedRot.clone().conjugate(), 
    this.lockedRot 
).normalize(); 

그러나 실제로는해야한다 :

this.deviceToPercieved.multiplyQuaternions(
    this.lockedRot, 
    this.unlockedRot.clone().conjugate() 
); 

공지 사항 곱셈의 순서의 변화와 normalized() 전화의 낙하.

이제 제대로 작동합니다!