꼭짓점 버퍼 만들기(Direct3D 9)
5개의 매개 변수를 허용하는 IDirect3DDevice9::CreateVertexBuffer 메서드를 호출하여 꼭짓점 버퍼 개체를 만듭니다. 첫 번째 매개 변수는 꼭짓점 버퍼 길이(바이트)를 지정합니다. sizeof 연산자를 사용하여 꼭짓점 형식의 크기를 바이트 단위로 결정합니다. 다음 사용자 지정 꼭짓점 형식을 고려합니다.
struct CUSTOMVERTEX {
FLOAT x, y, z;
FLOAT rhw;
DWORD color;
FLOAT tu, tv; // Texture coordinates
};
// Custom flexible vertex format (FVF) describing the custom vertex structure
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1)
4개의 CUSTOMVERTEX 구조를 저장할 꼭짓점 버퍼를 만들려면 Length 매개 변수에 [4*sizeof(CUSTOMVERTEX)]를 지정합니다.
두 번째 매개 변수는 사용 컨트롤 집합입니다. 무엇보다도 해당 값은 꼭짓점 버퍼가 보기 영역 외부에 있는 꼭짓점의 클립 플래그 형태로 클리핑 정보를 포함할 수 있는지 여부를 결정합니다. 클립 플래그를 포함할 수 없는 꼭짓점 버퍼를 만들려면 Usage 매개 변수에 대한 D3DUSAGE_DONOTCLIP 플래그를 포함합니다. D3DUSAGE_DONOTCLIP 플래그는 꼭짓점 버퍼에 변환된 꼭짓점이 포함됨을 나타내는 경우에만 적용됩니다. D3DFVF_XYZRHW 플래그는 FVF 매개 변수에 포함됩니다. 버퍼에 변형되지 않은 꼭짓점(D3DFVF_XYZ 플래그)이 포함됨을 나타내는 경우 IDirect3DDevice9::CreateVertexBuffer 메서드는 D3DUSAGE_DONOTCLIP 플래그를 무시합니다. 클리핑 플래그는 추가 메모리를 차지하므로 클리핑 가능 꼭짓점 버퍼가 클리핑 플래그를 포함할 수 없는 꼭짓점 버퍼보다 약간 더 큽 수 있습니다. 이러한 리소스는 꼭짓점 버퍼를 만들 때 할당되므로 미리 클리핑 가능 꼭짓점 버퍼를 요청해야 합니다.
세 번째 매개 변수 인 FVF는 꼭짓점 버퍼의 꼭짓점 형식을 설명하는 D3DFVF 의 조합입니다. 이 매개 변수에 0을 지정하면 꼭짓점 버퍼는 FVF가 아닌 꼭짓점 버퍼입니다. 자세한 내용은 FVF 꼭짓점 버퍼(Direct3D 9)를 참조하세요. 네 번째 매개 변수는 꼭짓점 버퍼를 배치할 메모리 클래스를 설명합니다.
IDirect3DDevice9::CreateVertexBuffer에서 허용하는 마지막 매개 변수는 호출이 성공하면 꼭짓점 버퍼 개체의 새 IDirect3DVertexBuffer9 인터페이스에 대한 포인터로 채워지는 변수의 주소입니다.
지원 없이 만든 꼭짓점 버퍼에 대한 클립 플래그를 생성할 수 없습니다.
다음 C++ 코드 예제에서는 코드에서 꼭짓점 버퍼를 만드는 것이 어떤 모습일지 보여 있습니다.
// d3dDevice contains the address of an IDirect3DDevice9 interface
// g_pVB is a variable of type LPDIRECT3DVERTEXBUFFER9
// The custom vertex type
struct CUSTOMVERTEX {
FLOAT x, y, z;
FLOAT rhw;
DWORD color;
FLOAT tu, tv; // The texture coordinates
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1)
// Create a clipping-capable vertex buffer. Allocate enough memory
// in the default memory pool to hold three CUSTOMVERTEX
// structures
if( FAILED( d3dDevice->CreateVertexBuffer( 3*sizeof(CUSTOMVERTEX),
0 /*Usage*/, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pVB, NULL ) ) )
return E_FAIL;
관련 항목