함수 FVF 코드 수정(Direct3D 9)
FVF 코드는 인터리브에 저장된 꼭짓점의 내용을 단일 데이터 스트림에 설명합니다. 일반적으로 고정 함수 꼭짓점 처리 파이프라인에서 처리할 데이터를 지정합니다. 이전 스타일의 꼭짓점 선언입니다. 현재 꼭짓점 선언 스타일을 보려면 D3DVERTEXELEMENT9참조하세요.
Direct3D 애플리케이션은 여러 가지 방법으로 모델 꼭짓점을 정의할 수 있습니다. 유연한 꼭짓점 형식 또는 유연한 꼭짓점 형식 코드라고도 하는 유연한 꼭짓점 정의를 지원하면 애플리케이션에서 필요한 꼭짓점 구성 요소만 사용할 수 있으므로 사용되지 않는 구성 요소가 제거됩니다. 애플리케이션은 필요한 꼭짓점 구성 요소만 사용하여 메모리를 절약하고 모델을 렌더링하는 데 필요한 처리 대역폭을 최소화할 수 있습니다. D3DFVF 코드 조합을 사용하여 꼭짓점의 형식을 지정하는 방법을 설명합니다.
FVF 사양에는 D3DFVF_PSIZE 지정한 점 크기에 대한 형식이 포함됩니다. 이 크기는 TL(변환되지 않음 및 조명) 꼭짓점의 카메라 공간 단위와 TL 꼭짓점의 디바이스 공간 단위로 표현됩니다.
IDirect3DDevice9 인터페이스의 렌더링 메서드는 C++ 애플리케이션에 이러한 플래그의 조합을 허용하는 메서드를 제공하고 이를 사용하여 기본 형식을 렌더링하는 방법을 결정합니다. 기본적으로 이러한 플래그는 위치, 꼭짓점 혼합 가중치, 법선, 색, 텍스처 좌표의 수 및 형식과 같은 꼭짓점 구성 요소를 시스템에 알려 줍니다. 애플리케이션은 Direct3D를 적용할 렌더링 파이프라인의 일부를 간접적으로 사용합니다. 또한 특정 꼭짓점 형식 플래그의 존재 또는 부재는 메모리에 있는 꼭짓점 구성 요소 필드와 생략한 시스템에 전달됩니다.
디바이스 제한을 확인하려면 디바이스에서 D3DCAPS9FVFCaps 멤버의 D3DFVFCAPS_DONOTSTRIPELEMENTS 및 D3DFVFCAPS_TEXCOORDCOUNTMASK 값을 쿼리할 수 있습니다.
텍스처 좌표는 서로 다른 형식으로 선언할 수 있으므로 1개의 좌표 또는 최대 4개의 텍스처 좌표를 사용하여 텍스처의 주소를 지정할 수 있습니다(2D 프로젝팅된 텍스처 좌표의 경우). 자세한 내용은 텍스처 좌표 형식(Direct3D 9)참조하세요. D3DFVF_TEXCOORDSIZEN 매크로 집합을 사용하여 꼭짓점 형식에서 사용하는 질감 좌표 형식을 식별하는 비트 패턴을 만듭니다.
모든 구성 요소를 사용하는 애플리케이션은 없습니다. 상호 동질 W(RHW) 및 꼭짓점 법선 필드는 함께 사용할 수 없습니다. 대부분의 애플리케이션은 8개의 텍스처 좌표 집합을 모두 사용하려고 하지만 Direct3D에는 이 용량이 있습니다. 다른 플래그와 함께 사용할 수 있는 플래그에는 몇 가지 제한 사항이 있습니다. 예를 들어 D3DFVF_XYZ 및 D3DFVF_XYZRHW 플래그를 함께 사용할 수 없습니다. 이는 애플리케이션이 변환되지 않은 꼭짓점과 변환된 꼭짓점을 모두 사용하여 꼭짓점의 위치를 설명하고 있음을 나타냅니다.
인덱싱된 꼭짓점 혼합을 사용하려면 FVF 선언의 끝에 D3DFVF_LASTBETA_UBYTE4 플래그가 표시됩니다. 이 플래그의 존재는 다섯 번째 혼합 가중치가 부동 소수자 대신 DWORD로 처리됨을 나타냅니다. 자세한 내용은 인덱싱된 꼭짓점 혼합(Direct3D 9)참조하세요.
다음 코드 샘플에서는 D3DFVF_LASTBETA_UBYTE4 플래그를 사용하는 FVF 코드와 그렇지 않은 FVF 코드 간의 차이점을 보여줍니다. 4개의 혼합 인덱스를 사용할 때 플래그 D3DFVF_XYZB3 있습니다. 항상 숫자 1에서 처음 3의 합계를 빼서 네 번째(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
};
관련 항목