[DX9] 2.정점의 렌더링 3 – 표시의 렌더링

이것으로 정점 버퍼에 정점이 격납되었습니다. 다음은 표시를 렌더링합니다. 표시의 렌더링에서는 먼저 백 버퍼를 클리어 해 청색으로 하고 그 다음 BeginScene 을 호출합니다.

g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0L );
g_pd3dDevice->BeginScene();

정점 버퍼로부터 정점 데이터를 렌더링 하려면 몇 단계를 거칩니다. 우선 스트림 소스를 설정합니다. 이 때 스트림 0을 사용합니다. 스트림 소스는 IDirect3DDevice9::SetStreamSource 를 호출해서 지정합니다.

g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) );

첫번째 파라메터는 스트림 번호, 두번째 파라메터는 정점 버퍼로의 포인터 입니다. 세번째 파라메터는 스트림의 선두로부터 정점 데이터의 선두까지의 오프셋입니다. 이 예에서는 0입니다. 마지막 파라메터는 정점 선언의 각요소의 바이트 수입니다.

다음은 IDirect3DDevice9::SetFVF 를 호출해 고정기능의 정점 쉐이더를 식별합니다. 완전한 커스텀 정점 쉐이더는 고도의 토픽입니다만 여기서의 정점 쉐이더는 간단한 플렉서블 정점 포맷(FVF) 코드에 불과합니다. 다음 샘플 코드는 FVF 코드를 설정하고있습니다.

g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );

SetFVF 의 유일한 파라메터가 정점 데이터 레이아웃을 정의하는 고정 정점 함수 코드입니다.

다음은 아래의 샘플 코드에 나오는 것처럼 IDirect3DDevice9::DrawPrimitive 를 사용해 정점 버퍼의 정점을 렌더링 합니다.

g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 1 );

DrawPrimitive 가 받아들이는 1번째의 파라메터는 Direct3D에 드로우하는 프리머티브의 종류를 지시하는 플래그입니다. 이 샘플에서는 D3DPT_TRIANGLELIST 플래그를 사용해 삼각형의 리스트를 지정합니다. 두번째 파라메터는 처음 로드할 정점의 인덱스입니다. 세번째 파라메터는 드로우할 프리머티브의 수를 나타냅니다. 이 샘플에서는 1개의 삼각형만 드로우하므로 이 값은 1이 설정됩니다.

각종 프리머티브의 자세한 내용에 대해서는 「프리머티브」를 참조해 주십시오.

마지막으로 신을 종료한 후 백 버퍼를 프론트 버퍼에 할당합니다. 이 예를 다음 코드에 나타냈습니다.

g_pd3dDevice->EndScene();
g_pd3dDevice->Present( NULL, NULL, NULL, NULL );

백 버퍼를 프론트 버퍼에 할당하면 클라이언트 윈도우에 3개의 다른 컬러의 포인터를 가진 삼각형이 표시됩니다.

이 튜토리얼에서는 정점을 사요해서 지오메트릭 쉐이프를 렌더링하는 방법을 다뤘습니다.「튜토리얼 3: 행렬의 사용방법」에서 행렬의 컨셉과 그 사용방법을 소개합니다.

댓글 남기기

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

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