Higher-Order 기본 형식 사용(Direct3D 9)
이 섹션에서는 애플리케이션에서 상위 기본 형식을 사용하는 방법을 보여 줍니다.
Higher-Order 기본 지원 결정
D3DCAPS9 구조체의 DevCaps 멤버를 쿼리하여 상위 기본 형식과 관련된 작업에 대한 지원 수준을 확인할 수 있습니다. 다음 표에서는 Direct3D 9의 상위 기본 형식과 관련된 디바이스 기능을 나열합니다.
디바이스 기능 | 설명 |
---|---|
D3DDEVCAPS_NPATCHES | 디바이스는 N 패치를 지원하며 곡선 PN 삼각형 (특수 종류의 입방형 베지어 삼각형)을 기반으로 합니다. |
D3DDEVCAPS_QUINTICRTPATCHES | 디바이스는 전형적인 베지어 곡선 및 B 스플라인을 지원합니다. |
D3DDEVCAPS_RTPATCHES | 디바이스는 RT 패치(사각형 및 삼각형 패치)를 지원합니다. |
D3DDEVCAPS_RTPATCHHANDLEZERO | RT 패치는 핸들 0을 사용하여 효율적으로 그릴 수 있습니다. |
D3DDEVCAPS_RTPATCHHANDLEZERO 핸들이 0인 패치를 그릴 수 있음을 의미하지는 않습니다. 핸들 0 패치는 이 디바이스 기능이 설정되었는지 여부에 관계없이 항상 그릴 수 있습니다. 이 기능을 설정하면 하드웨어 아키텍처는 정보를 캐싱할 필요가 없으며 캐시되지 않은 패치(0 처리)를 캐시된 패치만큼 효율적으로 그릴 수 있습니다.
그리기 패치
Direct3D 9는 두 가지 유형의 상위 기본 형식 또는 패치를 지원합니다. 이를 N 패치 및 Rect/Tri 패치라고 합니다. nSegments 값이 1.0보다 큰 IDirect3DDevice9::SetNPatchMode( nSegments )에 대한 호출을 통해 N 패치를 사용하도록 설정하여 삼각형 렌더링 호출을 사용하여 N 패치를 렌더링할 수 있습니다. 다음 명시적 진입점을 사용하여 Rect/Tri 패치를 렌더링해야 합니다.
다음 방법을 사용하여 패치를 그릴 수 있습니다.
- IDirect3DDevice9::D rawRectPatch. 꼭짓점 버퍼에서 패치 데이터를 참조하는 방법을 더 잘 이해하려면 D3DRECTPATCH_INFO.
- IDirect3DDevice9::D rawTriPatch. 꼭짓점 버퍼에서 패치 데이터를 참조하는 방법을 더 잘 이해하려면 D3DTRIPATCH_INFO.
IDirect3DDevice9::D rawRectPatch 는 현재 설정된 스트림을 사용하여 pRectPatchInfo 매개 변수에 지정된 사각형 고차 패치를 그립니다. Handle 매개 변수는 패치를 핸들과 연결하는 데 사용되므로 다음에 패치를 그릴 때 pRectPatchInfo를 다시 지정하지 않아도 됩니다. 이렇게 하면 정방향 차이 계수 또는 기타 정보를 미리 계산하고 캐시할 수 있으므로 동일한 핸들을 사용하여 IDirect3DDevice9::D rawRectPatch 에 대한 후속 호출을 효율적으로 실행할 수 있습니다.
정적 패치의 경우 애플리케이션은 꼭짓점 셰이더 및 적절한 스트림을 설정하고, pRectPatchInfo 매개 변수에 패치 정보를 제공하고, Direct3D가 정보를 캡처하고 캐시할 수 있도록 핸들을 지정합니다. 그런 다음, 애플리케이션은 pRectPatchInfo를 NULL로 설정하여 IDirect3DDevice9::D rawRectPatch를 호출하여 패치를 효율적으로 그릴 수 있습니다. 캐시된 패치를 그릴 때 현재 설정된 스트림은 무시됩니다. 그러나 pNumSegs에 대한 새 값을 지정하여 캐시된 pNumSegs를 재정의할 수 있습니다. 또한 캐시된 패치를 캡처할 때 설정된 대로 렌더링할 때 동일한 꼭짓점 셰이더를 설정해야 합니다.
동적 패치의 경우 패치 데이터가 패치의 모든 렌더링에 대해 변경되므로 정보를 캐시하는 것이 효율적이지 않습니다. 애플리케이션은 핸들을 0으로 설정하여 Direct3D에 이를 전달할 수 있습니다. 이 경우 Direct3D는 현재 설정된 스트림 및 pNumSegs 값을 사용하여 패치를 그리고 정보를 캐시하지 않습니다. Handle을 0으로, pPatch를 NULL로 동시에 설정하는 것은 유효하지 않습니다.
동일한 핸들에 대해 pRectPatchInfo를 다시 지정하면 애플리케이션에서 이전에 캐시된 정보를 덮어쓸 수 있습니다.
IDirect3DDevice9::D rawTriPatch 는 삼각형 고차 패치를 그립니다는 점을 제외하고 IDirect3DDevice9::D rawRectPatch 와 유사합니다.
노멀 및 텍스처 좌표 생성
FVF(유연한 꼭짓점 형식) 셰이더를 사용하는 경우 법선 및 텍스처 좌표의 자동 생성이 불가능합니다.
정상의 경우 직접 제공하거나 Direct3D에서 직접 계산할 수 있습니다.
사각형 패치에 대해 생성된 좌표는 다음 그림과 같이 스플라인 기반 좌표입니다.
삼각형 패치에 대해 생성된 좌표는 다음 그림과 같이 바리센트릭 스플라인 기반 좌표입니다.
애플리케이션에서 생성된 텍스처 좌표의 범위를 변경해야 하는 경우 텍스처 변환을 사용하여 이 작업을 수행할 수 있습니다.
관련 항목