다음을 통해 공유


고정 함수 FVF 코드(Direct3D 9)

FVF 코드는 단일 데이터 스트림에 인터리브된 저장된 꼭짓점의 내용을 설명합니다. 일반적으로 고정 함수 꼭짓점 처리 파이프라인에서 처리할 데이터를 지정합니다. 이전 스타일의 꼭짓점 선언입니다. 현재 꼭짓점 선언 스타일을 보려면 D3DVERTEXELEMENT9를 참조하세요.

Direct3D 애플리케이션은 여러 가지 방법으로 모델 꼭짓점을 정의할 수 있습니다. 유연한 꼭짓점 형식 또는 유연한 꼭짓점 형식 코드라고도 하는 유연한 꼭짓점 정의를 지원하면 애플리케이션에서 필요한 꼭짓점 구성 요소만 사용할 수 있으므로 사용되지 않는 구성 요소가 제거됩니다. 애플리케이션은 필요한 꼭짓점 구성 요소만 사용하여 메모리를 절약하고 모델을 렌더링하는 데 필요한 처리 대역폭을 최소화할 수 있습니다. D3DFVF 코드 조합을 사용하여 꼭짓점의 서식을 지정하는 방법을 설명합니다.

FVF 사양에는 D3DFVF_PSIZE 지정한 점 크기에 대한 형식이 포함되어 있습니다. 이 크기는 TL(변환되지 않음 및 조명) 꼭짓점의 카메라 공간 단위와 TL 꼭짓점의 디바이스 공간 단위로 표현됩니다.

IDirect3DDevice9 인터페이스의 렌더링 메서드는 C++ 애플리케이션에 이러한 플래그의 조합을 허용하는 메서드를 제공하고 이를 사용하여 기본 형식을 렌더링하는 방법을 결정합니다. 기본적으로 이러한 플래그는 위치, 꼭짓점 혼합 가중치, 법선, 색 및 텍스처 좌표의 수와 형식과 같은 꼭짓점 구성 요소를 시스템에 알려줍니다. 애플리케이션은 Direct3D를 적용할 렌더링 파이프라인의 부분과 간접적으로 사용합니다. 또한 특정 꼭짓점 형식 플래그의 존재 또는 부재는 메모리에 있는 꼭짓점 구성 요소 필드와 생략한 시스템에 통신합니다.

디바이스 제한을 확인하려면 D3DCAPS9의 FVFCaps 멤버에서 D3DFVFCAPS_DONOTSTRIPELEMENTS 및 D3DFVFCAPS_TEXCOORDCOUNTMASK 값을 디바이스에 쿼리할 수 있습니다.

텍스처 좌표는 다른 형식으로 선언할 수 있으므로 1개의 좌표 또는 4개의 텍스처 좌표(2D 프로젝팅된 텍스처 좌표의 경우)를 사용하여 텍스처를 처리할 수 있습니다. 자세한 내용은 질감 좌표 형식(Direct3D 9)을 참조하세요. D3DFVF_TEXCOORDSIZEN 매크로 집합을 사용하여 꼭짓점 형식에서 사용하는 텍스처 좌표 형식을 식별하는 비트 패턴을 만듭니다.

모든 구성 요소를 사용하는 애플리케이션은 없습니다. 상호적 동종 W(RHW) 및 꼭짓점 법선 필드는 상호 배타적입니다. 대부분의 애플리케이션은 8개의 텍스처 좌표 집합을 모두 사용하려고 시도하지 않지만 Direct3D에는 이 용량이 있습니다. 다른 플래그와 함께 사용할 수 있는 플래그에는 몇 가지 제한 사항이 있습니다. 예를 들어 애플리케이션이 변환되지 않은 꼭짓점과 변환된 꼭짓점을 모두 사용하여 꼭짓점의 위치를 설명하고 있음을 나타내기 때문에 D3DFVF_XYZ 및 D3DFVF_XYZRHW 플래그를 함께 사용할 수 없습니다.

인덱싱된 꼭짓점 혼합을 사용하려면 FVF 선언의 끝에 D3DFVF_LASTBETA_UBYTE4 플래그가 표시됩니다. 이 플래그가 있으면 다섯 번째 혼합 가중치가 float 대신 DWORD로 처리됨을 나타냅니다. 자세한 내용은 인덱싱된 꼭짓점 혼합(Direct3D 9)을 참조하세요.

다음 코드 샘플에서는 D3DFVF_LASTBETA_UBYTE4 플래그를 사용하는 FVF 코드와 그렇지 않은 코드 간의 차이점을 보여 있습니다. 4개의 혼합 인덱스를 사용할 때 플래그 D3DFVF_XYZB3 있습니다. 항상 1번에서 처음 세 개의 합계를 빼서 네 번째(blend = 1 - (blend + blend\ + blend))를 얻을 수 있기 때문입니다.

#define D3DFVF_BLENDVERTEX (D3DFVF_XYZB3|D3DFVF_NORMAL|D3DFVF_TEX1)

struct BLENDVERTEX
{
    D3DXVECTOR3 v;       // Referenced as v0 in the vertex shader
    FLOAT       blend1;  // Referenced as v1.x in the vertex shader
    FLOAT       blend2;  // Referenced as v1.y in the vertex shader
    FLOAT       blend3;  // Referenced as v1.z in the vertex shader
                         // v1.w = 1.0 - (v1.x + v1.y + v1.z)
    D3DXVECTOR3 n;       // Referenced as v3 in the vertex shader
    FLOAT       tu, tv;  // Referenced as v7 in the vertex shader
};

아래에 정의된 FVF는 D3DFVF_LAST_UBYTE4 플래그를 사용합니다.

#define D3DFVF_BLENDVERTEX (D3DFVF_XYZB4 | D3DFVF_LASTBETA_UBYTE4 |D3DFVF_NORMAL|D3DFVF_TEX1)

struct BLENDVERTEX
{
    D3DXVECTOR3 v;       // Referenced as v0 in the vertex shader
    FLOAT       blend1;  // Referenced as v1.x in the vertex shader
    FLOAT       blend2;  // Referenced as v1.y in the vertex shader
    FLOAT       blend3;  // Referenced as v1.z in the vertex shader
                         // v1.w = 1.0 - (v1.x + v1.y + v1.z)
    DWORD       indices; // Referenced as v2.xyzw in the vertex shader 
    D3DXVECTOR3 n;       // Referenced as v3 in the vertex shader
    FLOAT       tu, tv;  // Referenced as v7 in the vertex shader
};

꼭짓점 선언