Direct3D를 사용하면 애플리케이션이 매끄럽게 혼합된 조인트를 가진 분할된 다각형 개체(특히 문자)를 렌더링하여 장면의 리얼리즘을 높일 수 있습니다. 이러한 효과 종종 스키닝 이라고 합니다. 시스템은 단일 꼭짓점 집합에 추가 월드 변환 매트릭스를 적용하여 여러 결과를 만든 다음 결과 꼭짓점 간에 선형 혼합을 수행하여 렌더링을 위한 단일 기하 도형 집합을 만들어 이 효과를 달성합니다. 다음 바나나 그림에서는 이 프로세스를 보여 줍니다.
두 개체에 바나나 텍스처를 혼합하는 프로세스의 
앞의 그림에서는 기하 도형 혼합 프로세스를 어떻게 상상할 수 있는지 보여 줍니다. 단일 렌더링 호출에서, 시스템은 바나나에 대한 정점을 가져와 두 번 변환합니다 - 첫 번째는 수정 없이, 두 번째는 간단한 회전으로 - 그리고 결과를 결합하여 구부러진 바나나를 만듭니다. 시스템은 조명이 활성화되면 꼭짓점 위치와 꼭짓점 법선을 혼합합니다. 애플리케이션은 두 개의 혼합 경로로 제한되지 않습니다. Direct3D는 표준 월드 매트릭스를 포함하여 4개의 월드 매트릭스 간에 기하 도형을 혼합할 수 D3DTS_WORLD.
메모
조명을 사용하도록 설정하면 꼭짓점 위치 계산과 동일한 방식으로 가중치가 적용된 해당 역세계 뷰 행렬에 의해 꼭짓점 법선이 변환됩니다. D3DRS_NORMALIZENORMALS 렌더링 상태가 TRUE 설정되면 시스템에서 결과 일반 벡터를 정규화합니다.
기하 도형 혼합이 없으면 동적 관절 모델이 세그먼트로 렌더링되는 경우가 많습니다. 예를 들어 인간 팔의 3D 모델을 고려합니다. 가장 간단한 보기에서 팔에는 몸에 연결되는 상완과 손에 연결되는 하반신의 두 부분이 있습니다. 두 가지는 팔꿈치에 연결되고, 하완은 그 시점에서 회전합니다. 암을 렌더링하는 애플리케이션은 각각 별도의 월드 트랜스포메이션 매트릭스를 사용하여 위쪽 팔과 아래쪽 팔에 대한 꼭짓점 데이터를 유지할 수 있습니다. 다음 코드 예제에서는 이를 보여 줍니다.
typedef struct _Arm
{
VERTEX upper_arm_verts[200];
D3DMATRIX matWorld_Upper;
VERTEX lower_arm_verts[200];
D3DMATRIX matWorld_Lower;
} ARM, *LPARM;
ARM MyArm; // This needs to be initialized.
다음 코드와 같이 팔을 렌더링하기 위해 두 번의 렌더링 호출이 수행됩니다.
// Render the upper arm.
d3dDevice->SetTransform( D3DTS_WORLD, &MyArm.matWorld_Upper );
d3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, numFaces );
// Render the lower arm, updating its world matrix to articulate
// the arm by pi/4 radians (45 degrees) at the elbow.
MyArm.matWorld_Lower = RotateMyArm(MyArm.matWorld, pi/4);
d3dDevice->SetTransform( D3DTS_WORLD, &MyArm.matWorld_Lower );
d3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, numFaces );
다음 그림은 이 기술을 사용하도록 수정된 바나나입니다.
기하 도형 혼합일러스트레이션
혼합된 기하 도형과 블렌딩되지 않은 기하 도형의 차이점은 분명합니다. 이 예제는 다소 극단적입니다. 실제 애플리케이션에서 분할된 모델의 조인트는 이음새가 명확하지 않도록 설계되었습니다. 그러나 이음새는 때때로 표시되어 모델 디자이너에게 지속적인 문제를 제시합니다.
Direct3D의 기하 도형 혼합은 클래식 세그먼트 모델링 시나리오의 대안입니다. 그러나 분할된 개체의 향상된 시각적 품질은 렌더링 중에 혼합 계산의 비용으로 발생합니다. 이러한 추가 작업의 영향을 최소화하기 위해 Direct3D 기하 도형 파이프라인은 최소 오버헤드와 기하 도형을 혼합하도록 최적화됩니다. Direct3D에서 제공하는 기하 도형 혼합 서비스를 지능적으로 활용하는 애플리케이션은 성능상 심각한 영향을 피하면서 캐릭터의 사실감을 향상시킬 수 있습니다.
변환 및 렌더링 상태 혼합
IDirect3DDevice9::SetTransform 메서드는 D3DTS_WORLDMATRIX 매크로에서 정의할 수 있는 값에 해당하는 D3DTS_WORLD 및 D3DTS_WORLDn 매크로를 인식합니다. 이러한 매크로는 기하 도형이 혼합될 행렬을 식별하는 데 사용됩니다.
D3DRENDERSTATETYPE 열거형 형식에는 지오메트리 블렌딩을 활성화하고 제어하는 D3DRS_VERTEXBLEND 렌더링 상태가 포함됩니다. 이 렌더링 상태에 대한 유효한 값은 D3DVERTEXBLENDFLAGS 열거형 형식으로 정의됩니다. 기하학 혼합을 사용하는 경우, 꼭짓점 형식에는 적절한 수의 혼합 가중치가 포함되어야 합니다.
혼합 가중치
베타 가중치라고도 하는 혼합 가중치는 지정된 세계 행렬이 꼭짓점에 영향을 미치는 정도를 제어합니다. 혼합 가중치는 꼭짓점 형식으로 인코딩된 0.0에서 1.0까지의 부동 소수점 값입니다. 여기서 값 0.0은 꼭짓점이 해당 행렬과 혼합되지 않음을 의미하고, 1.0은 꼭짓점이 행렬에 의해 완전히 영향을 받는다는 것을 의미합니다.
기하 도형 혼합 가중치는 꼭짓점 형식으로 인코딩되며, 고정 함수 FVF 코드(Direct3D 9)설명한 대로 각 꼭짓점의 위치 바로 다음에 나타납니다. 렌더링 메서드에 제공하는 꼭짓점 설명에 FVF 상수 중 하나를 포함하여 꼭짓점 형식의 혼합 가중치 수를 전달합니다.
시스템은 혼합 행렬의 가중치 결과 간에 선형 혼합을 수행합니다. 다음 수식은 완전한 혼합 수식입니다.
선형 혼합의
을 사용하여 표현합니다.
위의 수식에서 vBlend는 출력 꼭짓점이고, v 요소는 적용된 세계 행렬(D3DTS_WORLDn)에서 생성된 꼭짓점입니다. W 요소는 꼭짓점 형식 내의 해당 가중치 값입니다. n 매트릭스 사이에 혼합된 꼭짓점은 마지막을 제외한 각 혼합 행렬마다 (n-1)개의 혼합 가중치 값을 가질 수 있습니다. 시스템은 모든 가중치의 합계가 1.0이 되도록 마지막 세계 행렬에 대한 가중치를 자동으로 생성하며 여기서 시그마 표기법으로 표현됩니다. 다음 수식에 표시된 Direct3D에서 지원하는 각 사례에 대해 이 수식을 간소화할 수 있습니다.
세 가지 혼합 사례에 대한 선형 혼합의 
이는 2, 3 및 4개의 혼합 매트릭스 사례에 대한 완전한 혼합 수식의 간소화된 형태입니다.
메모
Direct3D에는 최대 5개의 혼합 가중치가 포함된 꼭짓점을 정의하는 FVF 설명자가 포함되어 있지만 이 DirectX 릴리스에서는 3개만 사용할 수 있습니다.
추가 정보는 다음 항목에 포함되어 있습니다.
관련 항목