Compartir a través de


Uso de primitivos de Higher-Order (Direct3D 9)

En esta sección se muestra cómo usar primitivos de orden superior en la aplicación.

Determinar Higher-Order compatibilidad primitiva

Se puede consultar el miembro DevCaps de la estructura D3DCAPS9 para determinar el nivel de compatibilidad con las operaciones que implican primitivos de orden superior. En la tabla siguiente se enumeran las funcionalidades del dispositivo relacionadas con primitivos de orden superior en Direct3D 9.

Funcionalidad del dispositivo Descripción
D3DDEVCAPS_NPATCHES El dispositivo admite N-parches y se basa en triángulos PN curvados (un tipo especial de triángulos bézier cúbicos).
D3DDEVCAPS_QUINTICRTPATCHES El dispositivo admite curvas Bezier quintices y B-splines.
D3DDEVCAPS_RTPATCHES El dispositivo admite revisiones rectangulares y triangulares (revisiones RT).
D3DDEVCAPS_RTPATCHHANDLEZERO Las revisiones rt pueden dibujarse de forma eficaz mediante el identificador cero.

 

Tenga en cuenta que D3DDEVCAPS_RTPATCHHANDLEZERO no significa que se pueda dibujar una revisión con identificador cero. Siempre se puede dibujar una revisión de identificador cero, ya sea que esta funcionalidad del dispositivo esté establecida o no. Cuando se establece esta funcionalidad, la arquitectura de hardware no requiere el almacenamiento en caché de ninguna información y que las revisiones sin almacenar en caché (controlar cero) se extraen de forma tan eficaz como las almacenadas en caché.

Revisiones de dibujo

Direct3D 9 admite dos tipos de primitivos de orden superior o revisiones. Se conocen como N-Parches y Rect/Tri. N-patches se puede representar mediante cualquier llamada de representación de triángulos habilitando N-patches a través de la llamada a IDirect3DDevice9::SetNPatchMode( nSegments ) con el valor nSegments mayor que 1.0. Las revisiones de rect/Tri deben representarse con los siguientes puntos de entrada explícitos.

Puede usar los métodos siguientes para dibujar revisiones.

IDirect3DDevice9::D rawRectPatch dibuja una revisión rectangular de orden superior especificada por el parámetro pRectPatchInfo mediante las secuencias establecidas actualmente. El parámetro Handle se usa para asociar la revisión a un identificador, de modo que la próxima vez que se dibuje la revisión, no es necesario volver a especificar pRectPatchInfo. Esto permite calcular previamente y almacenar en caché los coeficientes de diferencia de avance u otra información, lo que, a su vez, permite llamadas posteriores a IDirect3DDevice9::D rawRectPatch con el mismo identificador para ejecutarse de forma eficaz.

Está pensado para las revisiones estáticas, una aplicación establecería el sombreador de vértices y las secuencias adecuadas, proporcionaría información de revisión en el parámetro pRectPatchInfo y especificaría un identificador para que Direct3D pueda capturar y almacenar en caché información. A continuación, la aplicación puede llamar a IDirect3DDevice9::D rawRectPatch posteriormente con pRectPatchInfo establecido en NULL para dibujar eficazmente la revisión. Al dibujar una revisión almacenada en caché, se omiten las secuencias establecidas actualmente. Sin embargo, es posible invalidar el pNumSegs almacenado en caché especificando nuevos valores para pNumSegs. Además, es necesario establecer el mismo sombreador de vértices al representar una revisión almacenada en caché que se estableció cuando se capturó.

En el caso de las revisiones dinámicas, los datos de revisión cambian para cada representación de la revisión, por lo que no es eficaz almacenar en caché la información. La aplicación puede transmitir esto a Direct3D estableciendo Identificador en 0. En este caso, Direct3D dibuja la revisión con los flujos establecidos actualmente y los valores de pNumSegs y no almacena en caché ninguna información. No es válido establecer simultáneamente Handle en 0 y pPatch en NULL.

Al volver a especificar pRectPatchInfo para el mismo identificador, la aplicación puede sobrescribir la información almacenada anteriormente en caché.

IDirect3DDevice9::D rawTriPatch es similar a IDirect3DDevice9::D rawRectPatch , salvo que dibuja una revisión triangular de orden superior.

Generación de normales y coordenadas de textura

Si usa un sombreador de formato de vértice flexible (FVF), no es posible generar automáticamente las coordenadas normales y de textura.

Para los valores normales, puedes suministrarlos directamente o hacer que Direct3D los calcule automáticamente.

Las coordenadas generadas para las revisiones rectangulares son coordenadas basadas en spline, como se muestra en las ilustraciones siguientes.

ilustración de una textura original y la textura con coordenadas basadas en spline

Las coordenadas generadas para las revisiones triangulares son coordenadas basadas en spline barycéntricas, como se muestra en las ilustraciones siguientes.

ilustración de una textura original y la textura con coordenadas basadas en spline barycéntricas

Si una aplicación debe cambiar el intervalo de las coordenadas de textura generadas, esto se puede hacer mediante transformaciones de textura.

Primitivos de orden superior