--
tagInfo에 pos와 Dir, Look (항상 0도를 바라보는 방향백터다) 추가
기본적으로 Look백터와 연산한다
내적을 할때는 항상 두 백터가 단위백터야 한다 .
ex)))
두 개의 백터를 내적한다고 치자
v1 v2 cos세타 를 곱하면
여기서 v1과 v2가 단위백터라면 v1 v2 cos세타를 연산하면 그 결과 자체가 cos세타가 나온다
Look벡터를 (1, 0 , 0)으로 해 놓으면 그 자체가 단위백터가 된다는 뜻이다
--
4 x 4 행렬을 사용하겠다
행렬 왜쓰냐?
- 백터에서 표현할 수 있는게 위치 , 방향, 룩 백터 등이 있고
- 행렬로는 크기 , 회전 , 이동 을 표현한다
백터로 플레이어로 이미 움직였는데 왜 행렬로 이동을 하느냐?
- 행렬의 곱셈의 특성상 여러가지 상태를 하나의 행렬로 합칠 수 있다.
--
월드행렬 = 스케일링 * 자전 * 이동 * 공전 * 부모
각 단어의 의미
스케일링은 크기를 의미
자전은 스스로 도는 것을 의미
이동은 말 그대로 위치 이동을 의미
공전을 어떤 축을 기준으로 그 축을 돈다
부모는 어떤 축을 기준으로 얼마나 떨어져있는지 의미(위치를 의미)
--
항등행렬은 0으로 값을 초기화 하면안된다 -> 왜냐면 각 자리마다 상태값을 가지고 있기 때문에 0으로 하면 상태가 사라짐
D3DXMatrixIdentitiy(&행렬)->항등행렬 초기화 하는 행렬
D3DXMatrixScaling(&matScale , x , y , x); 크기변환행렬-> 인자값이 비율로 들어온다
(1, 1, 1)로 들어오면 크기가 그대로 유지 ( 2 , 2 , 2)로 들어오면 2배의 크기가 된다.
따라서 이미지가 한장만 있어도 다 표현이 가능하다
D3DXMatrixTranslation(&matTrans , x , y , x) 이동행렬 -> 백터에서 취기와 크기 방향을 표현하지만
연산의 간편화를 위해서 사용한다. 객체에 대한 모든 변화을 수행한 후에 행렬에 담아 사용한다.
x,y,z는 백터의 x, 백터의 y , 백터의 z가 들어간다 .(백터에서 미리 이동을 모조리 끝내고 적용만 하는것이다 )
--
Z축 회전 행렬
(xcos세타 - ysin세타 xsin세타 + ycos세타)
--
백터와 행렬의 곱셈
백터는 (x,y,z) 인데 우리가 쓰는 행렬은 4x4의 행렬이다
숫자가 맞지않기 때문에
임의로 백터를 (x,y,z,w)로 맞춰 4x4와 곱셈이 가능하도록 변경
이 임의에 w에 1이 들어갈때와 0이 들어갈때는 값이 다르다
TransformCoord(에는 위치이동행렬에 사용 w가 1이 들어갈때) 위치 적용
TransformNormal(에는 0이 들어간다) 위치 미적용 - Normal을 좀 많이씀 - 단위백터화 시키는 함수다 (헤더 추가해야됨)
--
MoveTo로 사각형을 그리고
포신을 돌리자
w a s d 로 몸체를 돌리자
회전행렬 공식 이용 ( z축 회전공식 )
--
'back-end > MFC' 카테고리의 다른 글
8. 종합 mfc (0) | 2023.07.24 |
---|---|
6. 삼각함수 법칙 (0) | 2023.07.24 |
5. D3DXVec3Transform 세가지 함수 (0) | 2023.07.24 |
4. D3DXVec3TransformCoord 함수 (0) | 2023.07.24 |
3. d2d (0) | 2023.07.24 |