기하 도형 혼합 사용(Direct3D 9)

다음 사용자 정의 구조체는 두 행렬 간에 혼합되는 꼭짓점에 사용할 수 있습니다.

// 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 렌더링 메서드에 의해 렌더링된 모든 개체에 대해 기하 도형 혼합을 수행합니다.

참고 항목

고정 함수 FVF 코드(Direct3D 9)

기하 도형 혼합