다음을 통해 공유


꼭짓점 버퍼 만들기(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;

꼭짓점 버퍼