2012-05-27 1 views
0

3D 게임을 만들고 있는데 플레이어 메쉬가 항상 카메라 뒤쪽을 향하게해야합니다. 이미 2D 속도 벡터 (xz 평면에 따른 방향)를 얻는 방법을 알아 냈습니다. 그러나 이제는 속도 벡터의 방향으로 메시를 회전해야합니다 ...2D 방향 벡터가 주어지면 y 축을 따라 회전을 계산하는 방법은 무엇입니까?

기본적으로 모든 메쉬는 .rotation 속성을 가지고 있습니다. 속성은 3D 벡터입니다. 저는 단지 y 축상의 회전에 관심이 있습니다. 이것은 평면 (x-z) 평면에 수직 인 회전입니다.

회전이도를 사용하지 않지만, 라디안, 그래서 그것을 이런 식으로 뭔가 될 것이라고 생각 :

mesh.rotation.y = (mesh.direction.x - mesh.direction.z)*Math.PI*2;

그러나이 그것을 잘라하지 않는 것 ...

방향/속도는 2D 벡터와 같으며 -1과 1 사이의 실수로 구성됩니다. 항상 sqrt(x*x + y*y) == 1이므로 속도는 모든 방향에서 동일해야하므로 "원"을 형성합니다 분명히. 만약 내가 제대로 이해하고

var c = Math.sqrt(cameraPos.x*cameraPos.x + cameraPos.z*cameraPos.z); //This is the distance from the camera to the mesh, which is at (0, 0) for simplicity of this presentation. 
var rat = 1/c; 

mesh.direction.x = cameraPos.x*rat; //Direction vector = the speed vector 
mesh.direction.z = cameraPos.z*rat; 
+0

중복 : http://stackoverflow.com/questions/10773693/how-to-do-this-coordinate-system-operation-more-efficiently –

답변

1

atan2이 트릭을 할 것입니다 :

나는 화면 위에 마우스를 드래그 그래서 회전해야하고,이 같은 계산에만 속도 벡터의 변화

mesh.rotation.y = Math.atan2(mesh.direction.z, mesh.direction.x) 

결과는 라디안으로 표시됩니다. 기본적으로 벡터와 X 축 간의 각도를 계산합니다. 매개 변수를 전환하거나 마이너스 연산자를 여기저기서 사용해야 할 수도 있습니다.

+0

매력처럼 작동합니다, 감사합니다! – corazza