2012-07-26 2 views
8

Three.js에서 THREE.quaternion을 사용하여 카메라 객체를 선택한 객체로 회전 시키려고합니다.Three.js 쿼터니언을 사용하여 카메라를 회전하는 방법

웹을 검색했지만이 쿼터니언 클래스를 사용하는 방법에 대한 예제/데모 또는 문서가 없습니다.

camera = new THREE.PerspectiveCamera(40, window.innerWidth/window.innerHeight, 1, 10000); 
    camera.position.y = 10; 
    camera.position.z = 0; 
    camera.position.x = radious; 
    camera.useQuaternion = true; 

    // I did use the TrackballTrackballControls. Maybe it causes the problem so I put it here 
    controls = new THREE.TrackballControls(camera, document.getElementById(_canvasElement)); 

    // function to make the camera rotate to the object 
    function focusOn3DObject(obj){ 
     obj.useQuaternion = true; 
     obj.quaternion = new THREE.Quaternion(obj.position.x, obj.position.y, obj.position.z, 1); 

     var newQuaternion = new THREE.Quaternion(); 
     THREE.Quaternion.slerp(camera.quaternion, obj.quaternion, newQuaternion, 0.07); 
     camera.quaternion = newQuaternion; 
    } 

을하지만 그것은 작동하지 않습니다

나는 다음 코드를 사용하여 내 운을 시험해. 내가 뭐 놓친 거 없니? 도와주세요. 미리 감사드립니다. 당신은 당신이 자동으로 obj.quaternion에 적용됩니다 회전 할 때, 현장에 객체를 추가 한 후

obj.useQuaternion = true 

을 설정해야

obj.quaternion = new THREE.Quaternion(obj.position.x, obj.position.y, obj.position.z, 1); 

:

+2

새로운 THREE.js 빌드에서는 'useQuaternion'이 제거되었습니다. 이제 라이브러리는 기본적으로 쿼터니언을 사용합니다. –

+0

또한 오늘 (Aug/2015) THREE의 Camera 객체에는 .lookAt (vector3) 메서드가 있습니다. - 보려는 객체의 위치를 ​​Vector3로받습니다. 카메라가 볼 수 있도록 object3d.position을 매개 변수로 전달할 수 있습니다. 그것을 확인하십시오 : http://threejs.org/docs/index.html#Reference/Cameras/Camera – Tiago

답변

1

나는이 라인 못해 일을 생각합니다.

두 번째 요점은 카메라가 아닌 컨트롤에 개체를 적용해야한다는 것입니다. 카메라가 아닌 객체를 제어하려고하기 때문에?

+0

카메라를 회전시키고 물체에 초점을 맞추고 싶습니다. 카메라가 물체를 따라 움직입니다. 그래서 저는 카메라가 통제 될 것이라고 생각합니다. 내가 틀렸어? – user1533481

+0

어둠 속에서 문서 나 예제가 없기 때문에 어둠 속에서 찾는 것처럼 보입니다. (슬럼프 기능을 설명해 주시겠습니까?) 매개 변수가 무엇입니까? 제안을 시도했지만 성공하지 못했습니다. – user1533481

+6

참고 새로운 THREE.js 빌드에서'useQuaternion'이 제거되었습니다. 라이브러리는 이제 기본적으로 쿼터니언을 사용합니다 .. –

13

슬렙은 아주 쉽습니다.

  • targetRotation 실제 카메라 회전
  • destinationRotation 객체 회전
  • percentOfRotation이 매개 변수는 새로운 카메라 회전 놀이터가 될 것입니다 destinationRotation 새로운 사원 수, 내가 사용 0.07 : 그것은 4 개 매개 변수를 여기 지금은 0 (0 %)에서 1 (100 %) 사이의 값일 수 있습니다.

이것은 내 순환 게재 방법입니다.

var qm = new THREE.Quaternion(); 
THREE.Quaternion.slerp(camera.quaternion, destRotation, qm, 0.07); 
camera.quaternion = qm; 
camera.quaternion.normalize(); 

이 정보가 도움이되기를 바랍니다. 그리고 귀찮게하지 말고 나는 완벽한 카메라를 따라 몇 주간 일했습니다.

+0

안녕하세요. 문서에서 .slerp는 2 개의 매개 변수 만 가지고 있습니다 ... https://threejs.org/docs/#Reference /Math/Quaternion... 내가 뭔가 잘못 이해 했나요? –

+0

@ SébastienGarcia-Roméo Quaternion에는 두 가지 slerp 메서드가 있습니다 -이 대답에 사용 된 것은 정적인데 둘 다 [quaternion docs] 페이지 (https : //threejs.org/docs/#api/math/Quaternion.slerp) 정적 메서드는 맨 아래에 있습니다. –

관련 문제