ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 렌더링 파이프라인
    Programing/DirectX 2008. 1. 27. 20:29

    간단하게 3D 세계를 2D로 표현하는 방법론이라 할 수 있다.

    1. 로컬 스페이스 -> 월드 스페이스로 변환
     
    : 3차원 그래픽에서 모든 정점은 기본적으로 로컬 좌표계값을 갖는다. 하나의 물체라면 모를까.. 두개 이상의 물체라면 원점을 공유하여 겹치는 현상이 생긴다. 이를 위하여 월드 좌표계로의 변환이 필요하다. 이를 변환 행렬 TM(Transform Matrix)라 한다. SetTransform 메서드를 사용한다.

    ex) g_pd3dDevice->SetTransform(D3DTS_WORLD, &matWorld);

    2. 월드 스페이스 -> 뷰 스페이스

    : 카메라 관점의 변환이다. 카메라는 원점에 위치시키고 물체를 바라보고 있다고 생각하자. 이때 사용하는 메소드가 D3DXMatrixLookAtLH 이다.

    D3DXMATRIX *D3DXMatrixLookAtLH(         
              D3DXMATRIX *pOut,
              CONST D3DXVECTOR3 *pEye,
              CONST D3DXVECTOR3 *pAt,
              CONST D3DXVECTOR3 *pUp
              );

    *pOut : 결과 행렬을 받을 포인터

    *pEye : 월드 내의 카메라 위치

    *pAt : 월드 내의 카메라가 보는 지점

    *pUp : 카메라의 상방 벡터

    사용예 : D3DXMatrixLookAtLH( &matView, &veye, &vLookatPt, &vUpVec );
                g_pd3dDevice->SetTransform( D3DTS_VIEW, &matView );



    3. 뷰 스페이스 -> 후면 제거 -> 조명 - >클리핑

    관찰점으로 부터 보이지 않는 후면은 제거하는것이 효율적이다. 또한 조명도 뷰스페이스에 맞게끔 조절하는 방법이 필요하다. 클리핑작업은 화면내에 보이지 않는 부분을 제거하는 작업이다. 큰 의미에선 후면 제거도 클리핑에 해당한다.

    4. 뷰 스페이스 -> 투영

    : 이제 3D장면의 2D 표현을 얻는 과정이다. D3DXMatrixPerspectiveFovLH 메소드를 사용한다.

    D3DXMATRIX *D3DXMatrixPerspectiveFovLH(         
        D3DXMATRIX *pOut,
        FLOAT fovY,
        FLOAT Aspect,
        FLOAT zn,
        FLOAT zf
    );


    pOut : 투영 행렬을 리턴

    fovY: 시야각의 수직 영역(라디안)

    Aspect: 종횡비 = 너비 /높이

    zn: 가까운 평면까지의 거리

    zf: 먼 평면까지의 거리

    사용 예) D3DXMATRIXA16 matProj;
     D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f );
     g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );


    'Programing > DirectX' 카테고리의 다른 글

    D3DPRESENT_PARAMETERS 구조체  (0) 2008.05.07
    자주 사용하는 API 함수  (1) 2008.02.16
    ID3DXSprite 사용하기  (1) 2008.02.13
    D3DXCreateTextureFromFileEx 함수  (0) 2008.01.30
    DrawPrimitive, DrawIndexedPrimitive, DrawPrimitiveUP, DrawIndexedPrimitiveUP  (1) 2008.01.28
    버텍스 렌더링 하기  (0) 2008.01.26
    Lock()  (0) 2008.01.26
    CreateVertexBuffer 메서드  (0) 2008.01.26
    CreateWindow() 함수  (0) 2008.01.25
    WNDCLASSEX 구조체  (0) 2008.01.25
Designed by Tistory.