共用方式為


使用 Higher-Order 基本圖元(Direct3D 9)

本節說明如何在應用程式中使用順序較高的基本類型。

判斷原始類型支援 Higher-Order

您可以查詢 D3DCAPS9 結構的 DevCaps 成員,以判斷涉及較高順序基本類型之作業的支援層級。 下表列出 Direct3D 9 中與較高順序基本類型相關的裝置功能。

裝置功能 描述
D3DDEVCAPS_NPATCHES 裝置支援 N 修補程式,並以 曲線 PN 三角形 為基礎(一種特殊的立方貝塞爾三角形)。
D3DDEVCAPS_QUINTICRTPATCHES 裝置支援 quintic Bezier 曲線和 B 曲線。
D3DDEVCAPS_RTPATCHES 裝置支援矩形和三角形貼片(RT 貼片)。
D3DDEVCAPS_RTPATCHHANDLEZERO RT 修補程式可以使用句柄零有效率地繪製。

 

請注意,D3DDEVCAPS_RTPATCHHANDLEZERO 並不表示可以繪製句柄為零的修補程式。 不論是否已設定此裝置功能,都可以繪製句柄零修補程式。 設定這項功能時,硬體架構不需要快取任何資訊,而且未快取的補丁(句柄為零)也可以像已快取的補丁一樣有效率地繪製。

繪圖補丁

Direct3D 9 支援兩種類型的較高階基本類型,或修補程式。 這些稱為 N 修補程式和 Rect/Tri 修補程式。 透過呼叫 IDirect3DDevice9::SetNPatchMode(nSegments),並確保 nSegments 值大於 1.0,即可在任何三角形渲染呼叫中啟用 N-patches 來進行渲染。 Rect/Tri 修補程序必須使用下列明確的進入點來轉譯。

您可以使用下列方法來繪製修補程式。

IDirect3DDevice9::DrawRectPatch 使用目前設定的數據流,繪製由 pRectPatchInfo 參數指定的矩形高階修補。 Handle 參數可用來將修補程式與句柄產生關聯,以便在下次繪製修補程式時,不需要重新指定 pRectPatchInfo。 這可讓您預先計算和快取正向差異係數或其他資訊,進而讓後續呼叫 IDirect3DDevice9::D rawRectPatch 使用相同的句柄有效率地執行。

目標是針對靜態修補程式,應用程式會設定頂點著色器和適當的數據流、在 pRectPatchInfo 參數中提供修補程序資訊,並指定一個識別碼,讓 Direct3D 可以擷取和快取資訊。 然後,應用程式可以呼叫 IDirect3DDevice9::D rawRectPatch,並將 pRectPatchInfo 設定為 NULL,以有效率地繪製修補程式。 繪製快取的修補程式時,會忽略目前設定的數據流。 不過,您可以透過指定新的 pNumSegs 值來覆寫快取的 pNumSegs。 此外,在渲染快取的圖塊時,必須設定與擷取時相同的頂點著色器。

對於動態補丁,補丁資料在每次渲染補丁時都會改變,因此快取資訊是不效率的。 應用程式可以透過將控制代碼設為0來傳達此資訊給 Direct3D。 在此情況下,Direct3D 會使用目前設定的數據流和 pNumSegs 值來繪製修補程式,而且不會快取任何資訊。 同時將 Handle 設定為 0 並 pPatch NULL無效。

當為相同的控制代碼重新指定 pRectPatchInfo 時,應用程式可以覆寫先前快取的資訊。

IDirect3DDevice9::DrawTriPatch 類似於 IDirect3DDevice9::DrawRectPatch,不同之處在於它會繪製三角形高階補丁。

產生常態和紋理座標

如果您使用彈性頂點格式 (FVF) 著色器,則無法自動產生法線和紋理座標。

針對正常狀況,您可以直接提供它們,或讓 Direct3D 為您計算它們。

為矩形補丁產生的座標是以樣條曲線為基礎的座標,如下圖中的說明所示。

原始紋理和以曲線為基礎的座標紋理的插圖

針對三角形面片生成的座標是以重心樣條為基礎的座標,如下圖所示。

原始紋理及使用巴利中心樣條座標的紋理插圖

如果應用程式必須變更產生的紋理座標範圍,則可以使用紋理轉換來完成。

Higher-Order 基本類型