2012-11-03 2 views
3

나는 간단한 비행기 비행 게임을 만들려고 노력하고 있습니다. 사용자 화살표 키를 사용하여 위아래가 비행기의 수평 위치에 상대적인 Y 축인 360도 영역 주위로 비행기를 회전시키고 싶습니다. 왼쪽 및 오른쪽 화살표는 z 축을 중심으로 평면을 회전시키고 새로운 Y 축 위치를 가질 수있게합니다. 내 질문은 - 새로운 수평 위치에 상대적인 Y 축에서 비행기를 어떻게 회전시킬 수 있습니까?Three.js 비행기의 3D 회전

나는 airplane이라는 그룹이 있는데, airplane.rotation.z (왼쪽 및 오른쪽) 및 airplane.rotation.x (위아래)와 같은 작업을 수행했지만 x 축은 새로운 수평 평면. 또한 airplane.children [1] .matrix.rotation.x를 사용하여 그룹 내의 모델/메시에 액세스하여 상대 Y 축을 변경할 수 있는지 확인하려고 시도했지만 동일한 문제가 발생합니다. 상대 Y 축을 현재 가로 위치로 찾으려면 어떻게해야합니까?

내 코드는 jsfiddle here

어떤 도움을 크게 감상 할 수에서 볼 수 있습니다.

+0

Ctrl 키-F를''사용할 수 있습니다. 현재 귀하의 질문은 (거의) 텍스트의 큰 벽이며, 구조 조정 및 더 나은 형식을 고려해야합니다. 정확하게 질문이 무엇인지 명확하게하십시오. – phant0m

+2

@ phant0m - 질문을 단순화했습니다. 전에는 분명하지 않다면 미안 해요. – Robbie

+0

jsfiddle.net에서 문제를 보여줄 수 있습니까? – Neil

답변

4

솔직히 말해서 나는 당신의 질문을 이해하는데 어려움을 겪고 있습니다.하지만 질문은 "화살표 키를 사용하여 객체를 내부 z 축 또는 x 축 주위로 회전시키는 방법은 무엇입니까?"라고 생각합니다.

이와 같은 루틴은 작업을 수행합니다

var _q1 = new THREE.Quaternion(); 

function rotateOnAxis(object, axis, angle) { 

    _q1.setFromAxisAngle(axis, angle); 
    object.quaternion.multiplySelf(_q1); 

}  

이 루틴은 구현을위한 쿼터니언을 사용합니다. 실제로 큰 문제는 아닙니다. 다음을 설정하면됩니다.

object.useQuaternion = true; 

다음은 업데이트 된 피들입니다. http://jsfiddle.net/Lc8gH/20/입니다.


편집 : 일치 : 당신은 지금 Object3D.rotateOnAxis(axis, angle);

three.js를 r.58

+0

이것은 내가 찾고있는 것입니다. 죄송합니다. 제 언어가 너무 혼란 스러웠습니다. 정말 감사드립니다! – Robbie