다음을 통해 공유


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::DrawRectPatch pRectPatchInfo 매개변수로 지정된 사각형 고차 패치를 현재 설정된 스트림을 사용하여 그립니다. Handle 매개 변수는 패치를 핸들과 연결하는 데 사용되므로 다음에 패치를 그릴 때 pRectPatchInfo를 다시 지정하지 않아도 됩니다. 이렇게 하면 정방향 차이 계수 또는 기타 정보를 미리 계산하고 캐시할 수 있으므로 동일한 핸들을 사용하여 IDirect3DDevice9::D rawRectPatch 후속 호출을 효율적으로 실행할 수 있습니다.

정적 패치의 경우 애플리케이션은 꼭짓점 셰이더 및 적절한 스트림을 설정하고, pRectPatchInfo 매개 변수에 패치 정보를 제공하고, Direct3D가 정보를 캡처하고 캐시할 수 있도록 핸들을 지정합니다. 그런 다음 애플리케이션은 IDirect3DDevice9::D rawRectPatch 호출할 수 있으며, pRectPatchInfo는 NULL 설정하여 패치를 효율적으로 그릴 수 있습니다. 캐시된 패치를 그릴 때 현재 설정된 스트림은 무시됩니다. 그러나 pNumSegs에 대한 새 값을 지정하여 캐시된 pNumSegs를 재정의할 수 있습니다. 또한 캐시된 패치를 캡처할 때 설정된 대로 렌더링할 때 동일한 꼭짓점 셰이더를 설정해야 합니다.

동적 패치의 경우 패치 데이터가 패치의 모든 렌더링에 대해 변경되므로 정보를 캐시하는 것이 효율적이지 않습니다. 애플리케이션은 Handle을 0으로 설정하여 이를 Direct3D에 전달할 수 있습니다. 이 경우 Direct3D는 현재 설정된 스트림 및 pNumSegs 값을 사용하여 패치를 그리고 정보를 캐시하지 않습니다. 동시에 Handle를 0으로 설정하고 pPatch를 NULL으로 설정하는 것은 유효하지 않습니다.

동일한 핸들에 대해 pRectPatchInfo를 다시 지정하면 애플리케이션에서 이전에 캐시된 정보를 덮어쓸 수 있습니다.

IDirect3DDevice9::DrawTriPatchIDirect3DDevice9::DrawRectPatch와 유사하지만, 삼각형 형태의 고차 패치를 그립니다.

노멀 및 텍스처 좌표 생성

FVF(유연한 꼭짓점 형식) 셰이더를 사용하는 경우 법선 및 텍스처 좌표의 자동 생성이 불가능합니다.

표준의 경우 직접 제공하거나 Direct3D에서 이를 계산할 수 있습니다.

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

원래 텍스처 및 스플라인 기반 좌표가 있는 텍스처의 삽화

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

의 원래 질감과 바리센트릭 스플라인 기반 좌표를 적용한 질감의 그림

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

Higher-Order 기본형