Utilisation de primitives Higher-Order (Direct3D 9)

Cette section vous montre comment utiliser des primitives d’ordre supérieur dans votre application.

Détermination de Higher-Order prise en charge primitive

Le membre DevCaps de la structure D3DCAPS9 peut être interrogé pour déterminer le niveau de prise en charge des opérations impliquant des primitives d’ordre supérieur. Le tableau suivant répertorie les fonctionnalités d’appareil liées aux primitives d’ordre supérieur dans Direct3D 9.

Fonctionnalité d’appareil Description
D3DDEVCAPS_NPATCHES L’appareil prend en charge les N-patchs et est basé sur des triangles PN courbes (un type spécial de triangles cubiques de Bézier).
D3DDEVCAPS_QUINTICRTPATCHES L’appareil prend en charge les courbes quintiques de Bézier et les courbes B-spline.
D3DDEVCAPS_RTPATCHES L’appareil prend en charge les correctifs rectangulaires et triangulaires (rt-patches).
D3DDEVCAPS_RTPATCHHANDLEZERO Les correctifs RT peuvent être dessinés efficacement à l’aide du handle zéro.

 

Notez que D3DDEVCAPS_RTPATCHHANDLEZERO ne signifie pas qu’un patch avec poignée zéro peut être dessiné. Un correctif zéro de handle peut toujours être dessiné, que cette fonctionnalité d’appareil soit définie ou non. Lorsque cette fonctionnalité est définie, l’architecture matérielle ne nécessite aucune mise en cache d’informations et que les correctifs non mis en cache (handle zero) sont dessinés aussi efficacement que ceux mis en cache.

Patchs de dessin

Direct3D 9 prend en charge deux types de primitives d’ordre supérieur, ou correctifs. Ces derniers sont appelés N-Patches et Rect/Tri patches. Les N-patchs peuvent être rendus à l’aide de n’importe quel appel de rendu de triangle en activant les N-patchs via l’appel à IDirect3DDevice9::SetNPatchMode( nSegments ) avec la valeur nSegments supérieure à 1,0. Les correctifs Rect/Tri doivent être affichés à l’aide des points d’entrée explicites suivants.

Vous pouvez utiliser les méthodes suivantes pour dessiner des correctifs.

IDirect3DDevice9::D rawRectPatch dessine un correctif rectangulaire d’ordre élevé spécifié par le paramètre pRectPatchInfo à l’aide des flux actuellement définis. Le paramètre Handle est utilisé pour associer le correctif à un handle, de sorte que la prochaine fois que le correctif est dessiné, il n’est pas nécessaire de respecifier pRectPatchInfo. Cela permet de précalculer et de mettre en cache les coefficients de différence de transfert ou d’autres informations, ce qui permet d’exécuter efficacement les appels suivants à IDirect3DDevice9::D rawRectPatch à l’aide du même handle.

Pour les correctifs statiques, une application doit définir le nuanceur de vertex et les flux appropriés, fournir des informations sur les correctifs dans le paramètre pRectPatchInfo et spécifier un handle afin que Direct3D puisse capturer et mettre en cache des informations. L’application peut ensuite appeler IDirect3DDevice9::D rawRectPatch par la suite avec pRectPatchInfo défini sur NULL pour dessiner efficacement le correctif. Lors du dessin d’un correctif mis en cache, les flux actuellement définis sont ignorés. Toutefois, il est possible de remplacer les pNumSegs mis en cache en spécifiant de nouvelles valeurs pour pNumSegs. En outre, il est nécessaire de définir le même nuanceur de vertex lors du rendu d’un correctif mis en cache que celui qui a été défini lors de sa capture.

Pour les correctifs dynamiques, les données du correctif changent pour chaque rendu du correctif, de sorte qu’il n’est pas efficace de mettre en cache les informations. L’application peut transmettre cela à Direct3D en définissant Handle sur 0. Dans ce cas, Direct3D dessine le correctif à l’aide des flux actuellement définis et des valeurs pNumSegs, et ne met pas en cache d’informations. Il n’est pas valide de définir simultanément Handle sur 0 et pPatch sur NULL.

En respecifiant pRectPatchInfo pour le même handle, l’application peut remplacer les informations précédemment mises en cache.

IDirect3DDevice9::D rawTriPatch est similaire à IDirect3DDevice9::D rawRectPatch , sauf qu’il dessine un correctif triangulaire d’ordre élevé.

Génération de normales et de coordonnées de texture

Si vous utilisez un nuanceur de format de vertex flexible (FVF), la génération automatique de normales et de coordonnées de texture n’est pas possible.

Pour les normales, vous pouvez soit les fournir directement, soit demander à Direct3D de les calculer pour vous.

Les coordonnées générées pour les correctifs rectangulaires sont des coordonnées basées sur des splines, comme illustré dans les illustrations suivantes.

illustration d’une texture d’origine et de la texture avec des coordonnées basées sur spline

Les coordonnées générées pour les correctifs triangulaires sont des coordonnées basées sur des splines barycentriques, comme illustré dans les illustrations suivantes.

illustration d’une texture d’origine et de la texture avec des coordonnées basées sur des splines barycentriques

Si une application doit modifier la plage des coordonnées de texture générées, cela peut être effectué à l’aide de transformations de texture.

Primitives d’ordre supérieur