그리기 (Render)
2022. 8. 14. 22:56ㆍPublic/GraphicsAPI
VOID Render()
{
/// 후면버퍼를 파란색(0,0,255)으로 지운다.
g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );
/// 렌더링 시작
if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
{
/// 정점버퍼의 삼각형을 그린다.
/// 1. 정점정보가 담겨있는 정점버퍼를 출력 스트림으로 할당한다.
g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) );
/// 2. D3D에게 정점쉐이더 정보를 지정한다. 대부분의 경우에는 FVF만 지정한다.
g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
/// 3. 기하 정보를 출력하기 위한 DrawPrimitive()함수 호출
g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 1 );
/// 렌더링 종료
g_pd3dDevice->EndScene();
}
/// 후면버퍼를 보이는 화면으로!
g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
}
BeginScene()과 EndScene() 사이에 추가된 것이 3개 있다.
- SetStreamSource()로 출력할 정점 버퍼를 디바이스에 바인딩(결합)한다.
- SetFVF()로 정점 포맷을 디바이스에 지정한다.
- DrawPrimitive()로 정점 버퍼의 폴리곤을 그린다.
SetStreamSource(), SetFVF(), DrawPrimitive()등의 함수에 대한 자세한 설명은 DirectX 9.0 SDK 도움말을 참고하기 바란다. 특히 DrawPrimitive()가 삼각형을 그려주는 함수인데, 첫 번째 전달인자에 따라서 다양한 동작을 한다. 예를 들어 D3DPT_LINESTRIP으로 바꾸면 폴리곤의 내부가 텅 빈 삼각형을 그릴 것이다.
DrawPrimitive() 함수는 다양한 변종이 있는데, DrawIndexedPrimitive(),DrawPrimitiveUP(),DrawIndexedPrimitiveUP() 등이 있다. 이중에서 실제 게임개발에 가장 많이 사용되는 함수는 DrawIndexedPrimitive()와 DrawIndexedPrimitiveUP()함 수로 인덱스를 가진 함수들이다. (이 중에서 DrawIndexedPrimitive()의 속도가 가장 빠름)
이제 컴파일해서 화면을 잘 살펴보자. 녹색과 적색이 적절히 배분된 삼각형이 나올 것이다. 이는 각각의 정점에 다른 색을 주었기 때문인데, D3D가 폴리곤 내부를 칠할 때 3개 정점의 색을 보간(interpolation)하여 적절한 색으로 칠해준 것이다. 소스에서 색을 적당히 변경하여 다시 실행해 보는 것도 재밌을 것이다.
'Public > GraphicsAPI' 카테고리의 다른 글
광원 (0) | 2022.08.15 |
---|---|
행렬 01 (0) | 2022.08.15 |
정점 버퍼 (0) | 2022.08.14 |
FVF (0) | 2022.08.14 |
일반적인 WIN32 구조와 D3D 비교 (0) | 2022.08.10 |