2012-12-26 1 views
4

three.js를 사용하여 webgl에서 rubik 큐브 게임을 만들려고합니다 (시도해 볼 수 있습니다) (here). 그리고 마녀 축을 감지하는 데 문제가 있습니다. 큐브의 회전에 따라 큐브를 회전해야합니다. 예를 들어 큐브가 원래 위치/회전에있는 경우 왼쪽 레이어를 위에서 아래로 회전하려면 Y 축에서 회전해야합니다. 그러나 저는 큐브를 Y 위에서 90도 회전시킵니다. Z 축에서 회전시켜 왼쪽 레이어를 아래에서 위로 회전시켜야합니다.rubik 큐브의 방향을 찾는 방법은 무엇입니까?

큐브의 방향에 따라 올바른 회전 축을 가져 오는 방법을 찾으려고합니다. 큐브의 회전 행렬 축의 마녀 벡터를 확인하는 순간 맨 앞의 레이어를 아래에서 위로 이동하려면 벡터 (0,1,0)와 가장 평행합니다. 그러나 예를 들어 다음과 같이 가장자리의 경우에없는 일을 수행

cube orientation

내가 그렇게 할 수있는 몇 가지 간단한 방법이 생각,하지만 난 매트릭스 수학 물건 :

+0

축을 _x_, _y_, _z_로 라벨을 지정하고 질문을 편집하여 "왼쪽", "아래"등 대신에 사용하면 도움이됩니다. 또한 회전의 경우 "CW"및 "CCW 그려진 축이 양의 방향이라고 가정합니다. 그것이 그대로, 귀하의 설명은 매우 모호합니다. –

+4

마우스를 드래그 할 때 'TrackballControls'과 같은 것을 사용하는 것이 좋습니다. (또는 자신의 버전을 코드화하십시오.) 그런 식으로 움직이는 것은 _camera_이며, 큐브 자체는 전역 축과 평행하게 유지됩니다. 이렇게하면 회전이 더 간단 해집니다. 또한, 배경을 검은 색으로 설정하는 것이 훨씬 좋습니다 IMHO. :-) – WestLangley

+0

당신은 @WestLangley처럼 카메라를 제어 할 수있다. 그렇지 않으면 개인 rubik 조각을 부모 object3D에 추가 한 다음 그것에 대한 컨트롤을 사용할 수있다. 그렇게하면 개별 객체에 변경 사항을 적용 할 때 부모 객체 내에 로컬로 배치되므로 기본적으로 (사용하기 쉬운) 기본 설정을 가져야합니다. 최소한 필자는 이것이 내가 생각한 것입니다. [this] (http : /// xor1.com/Sudoku). – 0xor1

답변

0
에 충분하지 않다

AxisHelper에는 방향을 결정할 수있는 장면의 aix가 표시 될 수 있습니다.

var axishelper = new THREE.AxisHelper(40); 
axishelper.position.y = 300; 
scene.add(axishelper); 

는 또한 log 큐브와 크롬 개발자 도구 또는 방화범이 끌려와 positionrotation 속성을 확인할 수 있습니다.

0

각 큐브의 방향을 큐브의 로컬 좌표에서 월드 좌표까지 가져 오는 고유 한 4x4 매트릭스 (즉, "모델"매트릭스)에 저장할 수 있습니다. 이제 큐브를 월드 좌표에서 축 (즉 벡터)으로 회전하려고하므로 축을 큐브 좌표로 변환해야합니다. 이것은 모델 행렬의 역함이 산출하는 것과 정확히 같습니다.

관련 문제