다음 사용자 정의 구조체는 두 행렬 간에 혼합되는 꼭짓점에 사용할 수 있습니다.
// The flexible vertex format (FVF) descriptor for this vertex would be:
// FVF = D3DFVF_XYZB1 | D3DFVF_NORMAL | D3DFVF_TEX1;
struct D3DBLENDVERTEX {
D3DVECTOR v;
FLOAT blend;
D3DVECTOR n;
FLOAT tu, tv;
};
혼합 가중치는 FVF의 위치 및 RHW 데이터 다음에, 꼭짓점 법선 이전에 나타나야 합니다.
앞의 꼭짓점 형식에는 혼합 가중치 값이 하나만 포함되어 있습니다. 이는 D3DTS_WORLDMATRIX(0) 및 D3DTS_WORLDMATRIX(1) 변환 상태에 정의된 두 개의 월드 행렬이 있기 때문입니다. 시스템은 단일 가중치 값을 사용하여 이러한 두 행렬 간에 각 꼭짓점을 혼합합니다. 세 행렬의 경우 두 개의 가중치만 필요합니다.
메모
피부 가중치를 쉽게 정의할 수 있습니다. 관절 사이의 거리의 선형 함수를 사용하는 것은 좋은 시작이지만 부드러운 시그모이드 함수는 더 잘 보입니다. 피부 무게 분포 기능을 선택하면 짧은 거리에서 피부 무게의 큰 변화를 사용하여 원하는 경우 관절에 날카로운 주름이 발생할 수 있습니다.
혼합 행렬 설정
IDirect3DDevice9::SetTransform 메서드를 호출하여 시스템이 혼합하는 변환 행렬 간의 관계를 설정합니다. 첫 번째 매개 변수를 D3DTS_WORLDMATRIX 매크로에서 정의한 값으로 설정하고 두 번째 매개 변수를 설정할 행렬의 주소로 설정합니다.
다음 C++ 코드 예제에서는 기하학적 모양이 혼합되어 마치 관절이 있는 팔처럼 보이도록 하는 두 개의 월드 매트릭스를 설정합니다.
// For this example, the d3dDevice variable is assumed to be a valid pointer
// to an IDirect3DDevice9 interface for an initialized 3D scene.
float BendAngle = 3.1415926f / 4.0f; // 45 degrees
D3DMATRIX matUpperArm, matLowerArm;
// The upper arm is immobile. Use the identity matrix.
D3DXMatrixIdentity( matUpperArm );
d3dDevice->SetTransform( D3DTS_WORLDMATRIX(0), &matUpperArm );
// The lower arm rotates about the x-axis, attached to the upper arm.
D3DXMatrixRotationX( matLowerArm, -BendAngle );
d3dDevice->SetTransform( D3DTS_WORLDMATRIX(1), &matLowerArm );
혼합 매트릭스를 설정하면 시스템이 나중에 사용할 수 있도록 행렬을 캐시하게 됩니다. 꼭짓점 혼합을 시작하도록 시스템에 지시하지 않습니다.
기하학 혼합 활성화
기하학적 혼합은 기본적으로 비활성화되어 있습니다. 기하학적 혼합을 사용하도록 설정하려면 IDirect3DDevice9::SetRenderState 메서드를 호출하여 D3DRS_VERTEXBLEND 렌더 상태를 D3DVERTEXBLENDFLAGS 열거형의 값으로 설정합니다. 다음 코드 예제에서는 두 세계 행렬 간의 혼합에 대한 렌더링 상태를 설정할 때 이 호출의 모양을 보여 줍니다.
d3dDevice->SetRenderState( D3DRS_VERTEXBLEND, D3DVBF_1WEIGHTS );
D3DRS_VERTEXBLEND D3DVBF_DISABLE 이외의 값으로 설정된 경우 시스템은 적절한 수의 혼합 가중치가 꼭짓점 형식에 포함된다고 가정합니다. 규격 꼭짓점 형식을 제공하고 Direct3D 렌더링 메서드에 해당 형식에 대한 적절한 설명을 제공하는 것은 사용자의 책임입니다.
사용하도록 설정하면 시스템은 DrawPrimitive 렌더링 메서드에 의해 렌더링된 모든 개체에 대해 기하 도형 혼합을 수행합니다.
참고 항목
관련 항목