2015-01-12 1 views
0

필자는 관성으로 대상쪽으로 이동하는 대상을 만들었습니다. 나는 대상이 목적지를 향하게하는 데 많은 어려움을 겪고 있습니다. 내 코드는 간단합니다. 각도를 계산하고 각도로 변환 한 다음 그 각도를 localTransform (장면 그래프)를 조정하는 Matrix4 회전 함수에 전달합니다.대상을 향한 대상을 향해 탄 2 사용하기

문제는 개체가 생성되어 끝없이 회전한다는 것입니다. 천천히 목표물쪽으로 진행하지만 회전 만 계속합니다. 번역없이 테스트했는데, 그 자리에서 상관없이 회전합니다. 내가 필요한 것은 물체가 목적지를 향하는 것이다. 내 Translate/Rotate 함수가 올바르게 작동하고, 객체를 회전시키고, 부모 방향으로 객체를 스폰하고 그 방향으로 향하게하는 데 사용했습니다. GLM 라이브러리는 1 : 1 결과를 제공합니다.

나는 aTan2에서 순서 변환을 시도했지만 각도 변환은 제거하지 않았지만 (회전 기능은 각도가 필요하지 않음) 변환/회전 순서를 바꿨습니다.

localTransform은 결합 된 회전/비율/변환 행렬입니다. 행 [3] 항목 [1] Y. [3] [0]을 처리하는 방법에 대한 조언 X.

float fAngle = atan2(v3Destination[1] - localTransform.data[3][1] , v3Destination[0] - localTransform.data[3][0]); 
float fAngleDegrees = fAngle * 180/PI; 
localTransform = Matrix4::Rotate(localTransform, fAngleDegrees, Vector3(0.0f, 0.0f, 1.0f)); 

Vector3 Movement; 
Movement[0] = v3Destination[0] - localTransform.data[3][0]; 
Movement[1] = v3Destination[1] - localTransform.data[3][1]; 

Movement = Movement * fSpeed * Application.GetTimeStep(); 
localTransform = Matrix4::Translate(localTransform, Movement); 

이다? 이것은 모두 2D 좌표이지만 회전은 Z 축에서 수행됩니다.

+0

벡터에서 대상까지의 각도를 계산하고 있지만 대상의면을 고려하지 않은 것처럼 보입니다. 객체가 한 번 단계로 돌아간 후에는 다음 단계에서 벡터의 각도만큼 다시 회전합니다. – Kolmar

답변

0

각성 단계마다 완전히 재 계산 된 localTransform 매트릭스입니다.

또는 이전 반복에서 이미 회전 된 행렬에 회전을 추가 할 수 있습니까?

이렇게하면 연속 회전을 설명 할 수 있습니다.

+0

localTransform은 루프간에 지속됩니다. 현재 X/Y/Z/Rotation/Scale입니다. 오, 알겠습니다. fAngle은 이전 fAngle에 관계없이 모든 루프에서 계산되므로 반복해서 동일한 순환 게재를 반복 적용합니다. 각도를 읽지 않고 점을 향한 각도를 계속 조정하려면 어떻게해야합니까 (X/Y 아래로 이동하고 직선이 아님). –

+0

아마 단위 행렬에서 시작하여 전체 행렬을 다시 계산할 수 있습니다. 그런 다음 각도로 회전하고 현재 위치로 변환합니다. – Joe

+0

완벽하게 작동했습니다. 내가 각도를 계산할 필요가있는 객체에 대해 루프마다 00, 01, 10 및 11 (회전 데이터)을 지웠다. 고마워요. 끝없는 반복이 끝났습니다. –

관련 문제