[기타]게임 회전각도 및 회전좌표 구하기

2022. 3. 28. 15:36카테고리 없음

제글에 종종 등장하는

게임에서 2D좌표상 회전각도 혹은 일정각도가 회전된 위체 따른 각도를 구하는 방법에 대한 이미지가 있습니다.

게임에서 아주 광범위 하게 사용되며 이동관련 머터리얼을 제작할때 아주 자주 사용되는방법으로 이에 대한 설명이 부족한것 같아 저도 자세히는 모르지만 이에 대해 어느정도(제가 이해한 정도로) 쉽게 풀어서 설명하는 글을 작성합니다.

 

위의 이미지가 사용된 부분은 현재 제 글에 회전모듈을 작성할때와 스폰 머터리얼을 작성할때 두곳에서 사용되었지만

실제 저의 프로젝트에는 상당히 많이 사용됩니다.

 

우선 위의 내용을 게임의 머터리얼과 나이아가라 모듈의 노드로 살펴보겠습니다.

(지금 보니 머터리얼쪽에는 노드설명이 아예없군요 매우 불친절하게...ㅜㅜ )

 

머터리얼

나이아가라

위의 노드는 로컬 좌표계의 위치값을 얻는 방법과 단위(각도냐 정규화된 값이냐)의 차이만 있을뿐 그외의 내용은 똑같습니다.

로컬좌표계의 x좌표와 y좌표로 arctan계산을 해주면 로컬좌표계 기준으로 각도가 나오게 됩니다.

 

 

수학전공이나 수학을 깊게 알지 못하기에 부정확한 설명이 될수 있지만

 

일단 위 계산을 이해하기 위해서는

삼각함수 sin cos tan 에대해 계략적인 이해를 해야하고(sin이 왜 -1과 1사이를 왓다갓다하는지 정도)

  삼각함수에서 가장 많이 사용되는 sin cos tan 는 입력값이 각도이며

  출력값은 각 변끼리의 비율이 나옵니다.

 

위 그림에서 b^+a^ = h^정도를 알고

  실제 각도를 계산할때는 사용하지 않지만 원하는 각도를 얻어 그각도의 특정 지점에 배치할 때 필요합니다.

 

역함수의 개념에 대해 알고 있으면 됩니다.(실제로 어떻게 연산하는지는 저도 잘 몰름)

  역함수는 쉽게 입력과 출력이 바뀐함수라고 생각하시면 쉽습니다.(역수라고 표현되는 코시컨트 랑은 다릅니다 아크사인 아크 코사인 아크 탄젠트입니다)

 

  

맨위 이미지를 좀더 쉽게 표현한 그림+설명입니다.

  

 

 

 

보통 게임에서 알고 있는것은 

꼭지점 B의 위치와 오브젝트의 중심점인 A의 위치 입니다.

그리고 회전운동 표현을 위해서는 꼭지점 B를 꼭지점 C로 보내야합니다.

 

A의 위치와 B의 위치를 알면 당연히 직각삼각형 이므로 각AB 의 위치는 (Bx. Ay)가 되므로 

각 변의 길이와 위치를 알 수 있습니다.

쉽게 위 그림의 좌표를 A = 0, 0 B=2, 1 C = 1, 2라고 가정하면

밑변은 2 높이는 1 대변은 루트5가 되는것입니다.

 

위 값을 이용해 각변(밑변과 높이)의 비율을 입력하면 각이 나오는 아크탄젠트 수식을 사용해

각B의 값을 얻게됩니다.

사인 코사인 탄젠트는 변의 비율을 입력해 각을 찾는 함수이며

아크사인 아크코사인 탄젠트는 위와 입력값과 출력값이 바뀐 함수입니다.

 

 

위에서 현재 좌표의 위치로 얻어낸 각 B에 원한만큼의 수를 더한뒤(각C)

그 각C로  점C의 좌표를 얻을 수 있습니다.(cosC, sinC)

 

즉 각 B에 매틱마다 일정 수치를 더해주면 꼭지점 B는 회전 운동을 하게 됩니다.

 

동일한 지름을 갖는 회전운동에 크기 변화등을 주기위해서 마지막으로 b^+a^ = h^ 를통해 원하는 크기의 원으로

만들게 되면 자연스러운 회전을 하는 점을 만들수 있습니다.