프로그래밍 2021. 3. 29. 23:13
728x90

 

 

빌보드 매트릭스 구성은

 

m_matBill._11 = matView._11; (카메라)
m_matBill._13 = matView._13;
m_matBill._31 = matView._31;
m_matBill._33 = matView._33;

zMatrixInverse( &m_matBill, NULL, &m_matBill );

 

m_matBill 을

빌보드용 오브젝트의 회전 매트릭스로 대체하여 사용

 

결과로는

빌보드 오브젝트는

항상 카메라 정면만을 바라보게 Y축 회전을 한다

 

 

m_matBill 구성을 좀더 파고들어 보자

_11, _13, _31, _33 에는 실제 어떤 값이 들어가 있을까?

 

 

우리가 카메라뷰 구성에 많이 사용하는 LookAt 함수를 살펴보자

/*
D3DXMatrixLookAtLH(Out, Eye, At, Up)
v = Normalized(At?Eye)
r = v*Up
u = v*r

r.x u.x v.x 0
r.y u.y v.y 0
r.z u.z v.z 0
?dot(r,Eye) ?dot(u,Eye) ?dot(v,Eye) 1


D3DXMatrixLookAtLH의 실제 구현을 코드로 보면
D3DXVECTOR3 CameraView = *pAt - *pEye;
D3DXVec3Normalize (&CameraView, &CameraView);

D3DXVECTOR3 CameraRight;
D3DXVec3Cross (&CameraRight, pUp, &CameraView);
D3DXVec3Normalize (&CameraRight, &CameraRight);

D3DXVECTOR3 CameraUp;
D3DXVec3Cross (&CameraUp, &CameraView, &CameraRight);
D3DXVec3Normalize (&CameraUp, &CameraUp);

D3DXMATRIX matView;

//
matView._11 = CameraRight.x;
matView._21 = CameraRight.y;
matView._31 = CameraRight.z;
matView._41 = -D3DXVec3Dot(CameraRight, CameraPosition);

matView._12 = CameraUp.x;
matView._22 = CameraUp.y;
matView._32 = CameraUp.z;
matView._42 = -D3DXVec3Dot(CameraUp, CameraPosition);

matView._13 = CameraView.x;
matView._23 = CameraView.y;
matView._33 = CameraView.z;
matView._43 = -D3DXVec3Dot(CameraView, CameraPosition);

matView._14 = 0.0;
matView._24 = 0.0;
matView._34 = 0.0;
matView._44 = 1.0;
*/

 

즉, 결과는

matView._11 = CameraRight.x; //축기준벡터x

matView._13 = CameraView.x; //방향벡터x

matView._31 = CameraRight.z; //축기준벡터z

matView._33 = CameraView.z; //방향벡터z

 

기준과 방향 벡터 -> 회전정보 -> 회전값

 

이때의 벡터들,

x, z 회전값은 모든축 회전이 적용된 결과값들이다

 

m_matBill._11 = matView._11;
m_matBill._13 = matView._13;
m_matBill._31 = matView._31;
m_matBill._33 = matView._33;

zMatrixInverse( &m_matBill, NULL, &m_matBill );

 

m_matBill 를

역행렬 변환하면, 

x, z 축 회전값은 완전 무효화되고,

x, z 축 회전값속에 포함되어 있던, y 축 회전값만이 남는

 

방식이라고 대충 이해가 가는듯 한데,

 

 

좀더 확실히 이해하기위해

파고들어가려면,

 

역행렬 변환 과정도 살펴보고

카메라뷰 매트릭스와

역행렬변환이 끝난 m_matBill 의 요소 값을 

비교해봐야할듯 하다

 

일단 여기서 패스~

728x90
posted by BK dddDang
: