[DX9] 3.행렬의 사용방법 1 – 월드 트랜스폼 행렬 정의

이 튜토리얼에서는 행렬의 개념을 소개하고, 행렬의 사용방법을 보여줍니다. Vertices 샘플 프로젝트에서는 2D의 정점을 렌더링하고 삼각형을 드로우했습니다. 그리고, 이 튜토리얼에서는 3D 정점의 트랜스폼을 처리합니다. 행렬은 카메라와 뷰포트의 셋업에도 사용됩니다.

Matrices 샘플 프로젝트에서는 지오메트리의 렌더링을 실행하기 전에 애플리케이션 정의의 SetupMatrices 함수를 호출해 3D 삼각형의 렌더링에 사용하는 행렬 트랜스폼의 작성과 정의를 실행합니다. 이들 타입의 트랜스폼은 통상 3D 신의 경우에 설정됩니다. 이들 일반적인 각각의 트랜스폼을 작성하는 것을 다루도록 하겠습니다.

==========================
[DX9] 3.행렬의 사용방법 1 – 월드 트랜스폼 행렬 정의

월드 트랜스폼 행렬에서는 3D모델 공간에서 지오메트리의 평행이동, 스케일링, 회전을 실행하는 방법을 정의합니다.

다음의 코드에서는 삼각형을 y축 회전으로 회전 시킨 뒤 Direct3D 디바이스에 대한 현재의 월드 트랜스폼을 설정합니다

D3DXMATRIX matWorld;
D3DXMatrixRotationY( &matWorld, timeGetTime()/150.0f );
g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );

처음에는 D3DXMatrixRotationY 메소드를 호출해 삼각형을 y축 회전으로 회전시킵니다. 첫번째 파라메터는 연산의 결과가 되는 3DXMATRIX 구조체로의 포인터입니다. 두번째 파라메타는 회전의 각도(라디언 단위)입니다.

다음은, IDirect3DDevice9::SetTransform 을 호출해 Direct3D 디바이스에 대한 월드 트랜스폼을 정의합니다. IDirect3DDevice9::SetTransform 에 넘긴 첫번째 파라메터에 의해 설정한 트랜스폼을  Direct3D 에 지시합니다. 이 샘플에서는 D3DTS_WORLD 마크로를 사용해 월드 트랜스폼의 설정이 필요하다는 것을 지정합니다. 두번째 파라메터는 현재의 트랜스폼으로 설정된 행렬로의 포인터입니다.

월드 트랜스폼의 자세한 사항에 대해서는 「월드 트랜스폼 (Direct3D 9)」을 참조해 주세요.

신에 대한 월드 트랜스폼을 정의하면 뷰 트랜스폼 행렬을 사용할 수있게 됩니다. 이 경우도 트랜스폼을 정의하는 순서는 중요치 않습니다. 다만, Direct3D에서는 다음 순서로 신에 행렬을 적용합니다.

  1. 월드(World)
  2. 뷰(View) 
  3. 사영(Projection)

뷰 트랜스폼 행렬의 정의에 대해서는「2 – 뷰 트랜스폼 행렬의 정의」를 참조해 주십시오.

One thought on “[DX9] 3.행렬의 사용방법 1 – 월드 트랜스폼 행렬 정의”

  1. 여러 행렬을 겹치려면?

    D3DXMATRIXA16 mX,mY, mS, matWorld;

    UINT iTime = timeGetTime() % 1000;
    FLOAT fAngle = iTime * ( 2.0f * D3DX_PI ) / 1000.0f;
    D3DXMatrixRotationX( &mX, fAngle );
    D3DXMatrixRotationY( &mY, fAngle );
    D3DXMatrixScaling( &mS, (float)iTime/500, (float)iTime/500, (float)iTime/500);

    matWorld = mX * mY * mS;

ASTERiS에게 댓글 남기기 댓글 취소

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.