2011-09-02 4 views
0

를 여행하는 방향으로 객체를 회전 : http://deeplogic.info/project/webGL/WebGL을 - 그것은이 예에서

어떻게 내가 여행하는 방향으로 개체를 회전 할 수 있습니까?

+0

나는 완전히 그 질문을 이해하고 있는지 확신 할 수 없다 - 바퀴가 땅을 따라 움직이는 것처럼 바퀴가 회전하는 것처럼 의미 하는가? 그렇다면 링크 된 예제가 2 차원이라는 점에 유의하십시오. 그런 식으로 유지하거나 3 차원을 추가하고 싶습니까? – Tommy

+0

링크 된 예제는 2 차원 평면에서만 움직이지만 3d로되어 있습니다. 그래서 z 축을 중심으로 회전합니다. 내가 원하는 것은 직사각형이 그 방향을 가리 키도록하는 방향으로 움직이는 것입니다. – Sycren

답변

1

방향 (x, y) 방향으로 움직이는 물체에 대해 z를 중심으로 회전하려면 Math.atan2(y,x) 방법을 사용할 수 있습니다. 라디안 단위의 각도를 반환합니다. ES 2 이전의 OpenGL 컨벤션은 각도로 작업했지만, 요즘에는 코드를 버텍스 쉐이더로 푸시해야합니다. 아마도 변환을 원할 것입니다.이 경우 결과에 180을 곱하고 (도수 반원) pi (라디안 반원)로 나눕니다.

+3

삼각법에 사용되는 호출자에게는 지겨워 요. 사람, 선형 선형 대수학은 그다지 어렵지 않습니다. 보다 직접적인 접근 방식에 대한 내 대답을보십시오. – datenwolf

+0

그리고 세 개의 삼각 함수 (회전 행렬 만들기 포함)의 효율성과 세 개의 제곱근에 대한 확고한 규칙이 있다고는 생각하지 않지만 제곱근에 대한 결과는 지겨워요. 더 많은 정당성 : 사람들은 선형 대수학보다 일찍 삼각법을 연구하는 경향이 있으며 각도를 통해 작업하는 것은 회전의 개념을 불러오는 질문에 대한보다 직접적이고 구체적인 답변입니다. – Tommy

+1

선형 대수보다 먼저 삼각법을 수행하는 사람들이 문제입니다. 거의 모든 삼각 문제는 선형 대수학으로 표현할 수 있습니다. 그리고 회전의 경우, 각도는 단지 약간의 정보가 부족합니다. 회전을 표현하는 유일한 방법은 행렬, 쿼터니언 또는 쿼터니언의 하위 집합 인 2D 복소수의 경우 SU (2) 그룹의 요소를 사용하는 것입니다. 그리고 "방향을 가리 키도록하십시오"의 경우에는 이미 방향 벡터가 있습니다. – datenwolf

3

개체가 방향 D로 이동하고 있다고 가정하면 그 방향에 수직 인 벡터를 찾는 것뿐입니다. 경우에 당신의 운동은 정상적인 비행기 N.이 그 정상화 후 3 개 벡터 D, E 및 N. 당신을 얻을 수

E = D × N 

와 D의 십자가 제품을 복용하여 벡터 E를 찾을 수있는 단 하나 개의면에 회전 된 좌표계의 기초를 형성한다. 당신은

D_x E_x N_x 
D_y E_y N_y 
D_z E_z N_z 

는 4 × 4 균일 한

D_x E_x N_x 0 
D_y E_y N_y 0 
D_z E_z N_z 0 
    0 0 0 1 

에이 행렬을 확장 3 × 3 행렬의 열로 넣을 수 있습니다 그리고 당신은에 적용 할 glMultMatrix로하는 OpenGL을 전달할 수 있습니다 행렬 스택

+1

여기에서 객체가 xy 평면을 따라 움직이는 특수한 경우에는 좌표를 전환하고 부정으로 직각 좌표를 얻은 다음 건물을 향해있는 (비공식) 대칭을 활용할 수 있습니다 하나의 벡터 만 정규화하십시오. – Tommy

+0

@ 토미 : XY 평면에서 벡터의 교차 곱을 Z로 취한 것을 확인했다면, 이것이 정확히 일어날 것입니다. – datenwolf

+0

나는 완전히 알고있다. 특수한 경우는 일반적인 경우에 대한 논의에서도 관련이있다. – Tommy

관련 문제