728x90
반응형

--

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축 회전공식 )

 

--

728x90
반응형

'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

+ Recent posts