하나의 장면을 만들고 렌더링하는 데 필요한 개념을 배웠다.

이제 배운 내용을 실전에 적용하여 Direct3D 내에서 기학적인 물체를 그리는 방법을 살펴볼 것이다.



목표

  • Direct3D에서 버텍스와 인덱스 데이터가 보관하는 방법을 배운다.
  • 렌더 상태를 이용해 기하물체가 렌더링되는 방식을 변경한다.
  • 장면을 렌더링하는 방법을 배운다.
  • D3DXcreate* 함수들을 이용해 좀더 복잡한 3D 형태를 만드는 방법을 배운다.



버텍스/인덱스 버퍼

버텍스와 인덱스 버퍼 만들기

버퍼 메모리에 접근하기

버텍스 버퍼와 인덱스 버퍼에 대한 정보 얻기

렌더 상태

드로잉 준비

버택스/인덱스 버퍼를 이용한 드로잉

IDirect3DDevice9::DrawPrimitive

IDirect3DDevice9::DrawlndexedPrimitive

장면의 시작/끝

D3DX 기하 물체

예제 애플리케이션: 삼각형, 입방체, 주전자, D3DXCreate*



요약

  • 버텍스 데이터는 IDirect3DVertexBuffer9 인터페이스에 보관되며, 인덱스 데이터는 IDirect3DIndexBuffer9 인터페이스에 보관된다. 버텍스와 인덱스 버퍼를 이용하는 것은 데이터를 비디오 메모리 내에 보관할 수 있기 때문이다.
  • 정적인(각 프레임마다 갱신할 필요가 없는) 기하보정의 경우에는 정적 버텍스/인덱스 버퍼에 보관해야 하며, 동적인 기하정보(각 프레임마다 갱신해야 하는)는 동적 버텍스/인덱스 버퍼에 보관해야 한다.
  • 렌더 상태는 기하정보가 렌더링 되는 방식에 영향을 주며, 한 번 지정되면 바뀔 때까지 영향을 미친다. 모든 렌더 상태는 초기의 디폴트 값을 가진다.
  • 버텍스 버퍼와 인덱스 버퍼의 내용물을 그리기 위해서는 다음의 과정을 거쳐야 한다.
    1. IDirect3DDevice9::SetstreamSource 메서드를 호출하여 그리려는 버텍스를 포함하는 버텍스 버퍼를 스트림과 연결한다.
    2. IDirect3DDevice9::SetFVF 메서드를 호출하여 버텍스의 포맷을 지정한다.
    3. 인덱스 버퍼를 이용한다면 IDirect3DDevice9::SetIndices 메서드를 호출하여 이용하려는 인덱스 버퍼를 지정한다.
    4. IDirect3DDevice9::BeginScene와 IDirect3DDevice9::EndScene 메서드 호출블록 내부에서 IDirect3DDevice9::DrawPrimitive나 IDirect3DDevice9::DrawIndexedPrimitive 메서드를 호출하여 드로잉을 수행한다.
  • D3DXCreate* 함수를 이용하면 구체나 원기동, 주전자 등과 같은 좀더 복잡한 3D 물체의 기하정보를 만들어낼 수 있다.


반응형