회전과 Normal 벡터

오른손 좌표계에서 정점의 회전에 따른 노멀 벡터의 값을 변화를 알아보자.
Z-Up으로 XY 평면의 유나를 위에서 아래로 내려다 보는 카메라를 설치 하였다.

실제로 회전에 따라 정점 버퍼의 노멀값을 변화 시키지는 않는다. 월드 매트릭스에 따라 정점을 변환 계산후 ComputeNormal( )로 노멀값을 계산한다.
 

Pitch Rotate 90도 회전하면 Normal Z 축값은 1이 나온다.

pitch, yaw, roll의 라디안 값은 아래의 전역변수에 추가된다.

float    g_pitchAngle = 0.0f;

float    g_yawAngle = 0.0f;

float    g_rollAngle = 0.0f;

Render3D 메쏘드에서 에디터 창의 입력값을 노멀값으로 변환한다.
D3DXQuaternionRotationYawPitchRoll( ) 다이렉트 X API로 쿼트니언 구한후 월드 행렬로 변환한다.

HRESULT Render3D ()

{

    D3DXMATRIX    matWorld;

 

    D3DXQUATERNION quat;

    D3DXQuaternionRotationYawPitchRoll( &quat, DEGtoRAD(g_yawAngle), DEGtoRAD(g_pitchAngle), DEGtoRAD(g_rollAngle) );

    D3DXMatrixRotationQuaternion( &matWorld, &quat );

 

    DisplayNormal( matWorld );

 

    .................

}

이번장은 회전값에 따라 노멀값이 어떻게 변화 하는지 눈으로 보기 위해서 만들었다.
평면의 기울기 Z성분 각도에 따라 Z 성분의 노멀값이 어떻게 되는지 보자.

노멀값에 따라 공이나 박스를 던질때 그라운드 충돌로 처리 할지, 벽 충돌로 처리 할지 판단할 수 있을 것이다.

프로젝트 : tutorial16_normal.zip