티스토리 뷰

Logical

캐릭터와 적과의 사이각

ACABerry 2018. 8. 21. 21:17
반응형

ACABERRY와 함께하는 프로그래밍 공부

캐릭터와 적과의 사이각


3D 기초인데, 평소 유니티로 쉽게 생각해서 사용하는 부분이지요.


Quaternion.LookRotation과 아카베리라이브러리유틸을 애용하다보니 이부분을 잊고있었네요.


막상 다이렉트X 라이브러리들로 각차를 구한다거나, 면접질문이 있을때 문득 생각이 안날 수 있다고 생각하게되어 포스팅을 시작합니다.






이 부분은 제 ACABattleShip 프로젝트의 포탑회전부에서 이들을 사용해 적을 바라봐야하는 각차를 구하고 있기도 합니다.


포탑구현부는 특히 [ 포신때문에 움직일 수 없는 MAX범위 ]를 가지고 있어서, 포신이 돌아가지 않는 각일경우, 포를 원래위치로 돌려놔야하는 상황이 발생합니다. ( 월쉽에서는 항상 타겟방향을 가지고있어서 그 방향을 향해 계속 포탑회전 )


이런저런 부분에서 사용했던 내용이지만, 막상 수학적 설명을 하자면 정확한 과정을 알고있어야 하기에 한번 정리해봅니다.





DOT~


Acos( Dot( 캐릭터의 방향, 노멀라이즈( 타겟위치 - 내위치 ) ) )


가 기본 공식입니다.




먼저, 영상을 보도록 합니다.



플레이어가 랑색

적이 강색




물론, Angle()로 동일한 결과를 얻을 수 있습니다.


먼저, Dot을 활용해 


1) 자신의 캐릭터의 방향벡터를 구합니다.


MyCharacterTransform의 .foward 면 충분하겠네요.



2) 내가 타겟을 바라보는 방향벡터를 구합니다.


타겟.포지션 - 나.포지션 을 하게되면, 내 위치에서 상대 위치까지에 해당하는 벡터를 구해옵니다.


하지만 사용할 벡터는 방향벡터이므로 노멀라이즈 해줍니다.



3) 1과 2를 내적해줍니다.


내적 결과는 아래와 같습니다.




이런 상태를 이해하고나면, 이를 삼각함수( 0~1~0~-1~0 to 각도 )를 활용해 '각도'로 전환이 가능합니다.


여기에 맞는게 아크코사인이고 이를 거치면 아래와 같은 결과가 나타납니다.





dot = acos
 0 = 0

 1 = 1.57

-1 = 3.14



Acos를 덮을경우 이렇게 적과의 각차를 Rad값으로 구할 수 있습니다.


이 라디안값은 유니티의 Mathf.Rad2Deg 에 있으며,


public const float Rad2Deg = 57.29578F


값은 57.29578F입니다.


이를 곱하게되면 최종적으로 우리가 원하는 Angle값이 나타납니다.







CROSS~


좌표계를 따지며 보통 


오른손 엄지 - 검지 - 중지


순으로


결과값 - A - B


입니다.


이는, A 벡터와 B 벡터를 외적하게되면 나오는 결과값은 그 각차만큼의 Y값이 표기되어 나타납니다.


영상은 아래와 같습니다.



플레이어가 랑색

적이 강색





이런식으로, 왼쪽의 경우 -결과값이, 오른쪽의 경우 +의 결과값이 나타납니다.


무슨일일까요...?! 이부분은 좀 더 봐야할 것 같네요 :P




왼손 / 오른손 좌표계의 외적

http://3dmpengines.tistory.com/755





내가 바라보는 방향(A)보다 적(B)이 오른쪽에 있을때 +값이 되는군요 (!)




A값은 플레이어의 정면값.


B값은 타겟까지의 방향벡터( 타겟 - 나 ) 값.




다음번엔 피타고라스 시리즈를 시뮬레이션해보도록 하겠습니다.






―――― ACABERRY's STUDY ―――― ACABERRY's STUDY ―――― ACABERRY's STUDY ――――

▶대부분 퍼온 내용이기에 출처를 꼭 명시합니다.

문제되는 부분이 있다면 요청주시면 언제든 수정 & 삭제합니다.

포스팅의 목적은 공부하시는 분들이 쉽게 접하고 정답을 찾아가는데 도움을 드리고자 함입니다.

―――― ACABERRY's STUDY ―――― ACABERRY's STUDY ―――― ACABERRY's STUDY ――――




반응형

'Logical' 카테고리의 다른 글

[잡공부] JOB STUDY  (0) 2018.07.28
[LINK] 마샬링관련내용  (0) 2016.10.07
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함