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 는 현재 설정된 스트림을 사용하여 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에서 직접 계산할 수 있습니다.

사각형 패치에 대해 생성된 좌표는 다음 그림과 같이 스플라인 기반 좌표입니다.

원래 텍스처 및 스플라인 기반 좌표가 있는 텍스처 그림

삼각형 패치에 대해 생성된 좌표는 다음 그림과 같이 바리센트릭 스플라인 기반 좌표입니다.

바리센트릭 스플라인 기반 좌표가 있는 원래 텍스처 및 텍스처 그림

애플리케이션에서 생성된 텍스처 좌표의 범위를 변경해야 하는 경우 텍스처 변환을 사용하여 이 작업을 수행할 수 있습니다.

상위 순서 기본 형식