둠이나 단간론파처럼 스프라이트가 2D이지만 게임 저체는 3D인 환경에서 스프라이트가 항상 플레이어를 바라보도록 하려면 어떻게 해야할까?
플레이어, 그리고 스프라이트의 3차원 상의 위치가 주어졌다고 가정하자. (E, P)
일단 스프라이트에서 플레이어로 향하는 방향을 구하면 F = P - E 이다.
이걸 구하면 우리는 플레이어의 시야와 스프라이트가 우측으로 90도를 이루는 R벡터를 구할 수 있다. 어떤 두 벡터를 외적하면 그 두 벡터 모두에 수직인 벡터를 구할 수 있다는 것을 우리는 이미 한 차례 다뤘었다.
R = F x (0,1,0)
(여기서 F와 외적중인 벡터가 (0,1,0), 즉 global한 up vector임을 기억하자. U벡터는 스프라이트 자체의 상대좌표계상에서의 up벡터를 의미한다.)
이제 F와 R을 외적하는 것으로 F와 R 모두에 수직인 U 벡터를 구할 수 있다.
이제 U와 R벡터, 그리고 스프라이트의 위치인 P를 이용해 스프라이트가 그려질 좌표계를 표현할 수 있다.
U,R,P는 게임 공간에 대한 기저 벡터(Basis vector)이다. 즉 1. URP는 서로 수직이고(Orthogonal), 2.URP에 각각 실수배를 해주는 것으로 게임 공간의 모든 위치를 표현할 수 있다.(Span)
같은 의미로 U와 R은 스프라이트 표면 좌표계에 대한 기저 벡터이다.
스프라이트가 사각형이라고 가정했을때, P에 U와 R을 더하거나 빼는 것으로 4개의 꼭짓점을 모두 표현할 수 있다.
텍스쳐를 사각형의 좌표에 렌더링하는 코드
'mathematics > game mathematics' 카테고리의 다른 글
[Mathematics] 9. Scaling (0) | 2022.02.07 |
---|---|
[Mathematics] 8. 좌표계 변환 (0) | 2022.02.06 |
[Mathematics] 6. 총알 소리 (Bullet whizzes) (0) | 2022.01.23 |
[Mathematics] 5. AABB Intersection (0) | 2022.01.23 |
[Mathematics] 4. Interpolation (0) | 2022.01.20 |