2012-04-26 7 views
4

3JS로 실험 중이며 카메라의 위치를 ​​확인하고 장면의 원점 (0 , 0,0). 원점에 초점을 유지하면서 설정된 거리 (반경)로 y 축을 중심으로 원을 중심으로 카메라를 움직이고 싶지만 방정식을 설정하는 방법을 모르겠습니다. 현재, 객체 자체를 회전시키고 있지만 대신 카메라를 회전시키고 싶습니다. 카메라를 이동 예를 들어 어떤 종류의 것이 여기javascript/threejs - (3D 공간에서) 중심 Y 축을 중심으로 원을 그리는 방정식

function checkRotation(){ 
    if (keyboard.pressed("left")){ 
     mesh.rotation.y += .05; 
    } 

    if (keyboard.pressed("right")){ 
     mesh.rotation.y -= .05; 
    } 
} 

과 : 다음은 메시를 이동 내 코드의

camera.position.x = ??? (x 위치를 이동시키는 몇 가지 방정식) camera.position.z = ??? (일부 위치에서 z 위치로 이동) camera.lookAt (mesh.position);

제공 할 수있는 도움이 있으면 도움이 될 것입니다. 감사!

+1

나는 자바 스크립트 또는 threeJS 모르지만 방정식은 매우 간단합니다 : x '= cos (t) x - sin (t) y , y '= sin (t) x + cos (t) y이다. – Beta

+0

예 - 제가 고심하고있는 것은 시간 문제입니다. 이전 x 및 z 값을 기준으로 증가 시키려면 시간의 함수가 아닌이 값이 필요합니다. 나는 다음과 같이 말하면서 뭔가 할 일이있다. – mheavers

+0

timer = Date.now() * 0.0005; camera.position.x = ((Math.cos (timer) * 5) * 5); camera.position.z = ((Math.sin (timer) * 5) * 5); - 버튼을 치는 것을 멈 추면, 다음에 그들이 치는 다음 번에 점프합니다. – mheavers

답변

12

다음 라인을 따라 수동으로 카메라의 위치를 ​​설정할 수

// let theta be the amount you want to rotate by 
var x = camera.position.x; 
var z = camera.position.z; 

camera.position.x = x * Math.cos(theta) + z * Math.sin(theta); 
camera.position.z = z * Math.cos(theta) - x * Math.sin(theta); 
camera.lookAt(mesh.position); // or camera.lookAt(0, 0, 0); 

는 x, y, z 축에 대해서 회전 행렬에 대해 동등한 http://en.wikipedia.org/wiki/Rotation_matrix#In_three_dimensions 참조.

키보드가 아닌 마우스를 사용하도록 TrackballControls를 조정할 수도 있습니다.

기본 트랙볼 동작 : http://mrdoob.github.com/three.js/examples/misc_camera_trackball.html

참고 : 나는 아직 테스트 해 보지 않았다 - 나는 직장에서입니다.

+1

3JS의 새로운 변화는 카메라 통계가 업데이트되기 전에 'lookat'를 호출해야한다는 것입니다. 그의 유스 케이스에서는 항상 0,0,0을 볼 것입니다. – david

+0

아, 건배. 업데이트 됨. –

+0

좋은 하나, 고마워! – mheavers

1

조금 늦었지만 다른 사람들은 Three.js (examples/js/controls에서 제공)와 함께 제공되는 OrbitControls를 살펴볼 수 있습니다. 자동 회전으로 설정할 수 있습니다. 그것은 당신을 위해 수학 돌볼 것입니다. 당신은 사용자가 카메라 위치를 스스로 제어 할 수 원하지 않는 경우 requestAnimationFrame 소위 업데이트 기능에서 다음

var controls = new THREE.OrbitControls(camera); 
controls.autoRotate = true; 
controls.autoRotateSpeed = [whatever speed you want] 

camera.lookAt(new THREE.Vector3(0,0,0)); 

...

controls.update(); 

, 당신이 찾을 수 있습니다 확신 해요 그것을 해제하는 방법, 또는 당신이 필요로하는 코드를 추출 ...