Función D3DXComputeTangentFrameEx

Realiza cálculos de fotogramas tangentes en una malla. Se generan vectores tangentes, binormales y, opcionalmente, normales. Las singularidades se controlan según sea necesario mediante la agrupación de bordes y la división de vértices.

Sintaxis

HRESULT D3DXComputeTangentFrameEx(
  _In_        ID3DXMesh   *pMesh,
  _In_        DWORD       dwTextureInSemantic,
  _In_        DWORD       dwTextureInIndex,
  _In_        DWORD       dwUPartialOutSemantic,
  _In_        DWORD       dwUPartialOutIndex,
  _In_        DWORD       dwVPartialOutSemantic,
  _In_        DWORD       dwVPartialOutIndex,
  _In_        DWORD       dwNormalOutSemantic,
  _In_        DWORD       dwNormalOutIndex,
  _In_        DWORD       dwOptions,
  _In_  const DWORD       *pdwAdjacency,
  _In_        FLOAT       fPartialEdgeThreshold,
  _In_        FLOAT       fSingularPointThreshold,
  _In_        FLOAT       fNormalEdgeThreshold,
  _Out_       ID3DXMesh   **ppMeshOut,
  _Out_       ID3DXBuffer **ppVertexMapping
);

Parámetros

pMesh [in]

Tipo: ID3DXMesh*

Puntero a un objeto de malla ID3DXMesh de entrada.

dwTextureInSemantic [in]

Tipo: DWORD

Especifica la semántica de entrada de coordenadas de textura. Si D3DX_DEFAULT, la función asume que no hay coordenadas de textura y la función producirá un error a menos que se especifique el cálculo de vectores normal.

dwTextureInIndex [in]

Tipo: DWORD

Si una malla tiene varias coordenadas de textura, especifica la coordenada de textura que se va a usar para los cálculos del marco tangente. Si es cero, la malla solo tiene una única coordenada de textura.

dwUPartialOutSemantic [in]

Tipo: DWORD

Especifica la semántica de salida para el tipo, normalmente D3DDECLUSAGE_TANGENT, que describe dónde se almacenará el derivado parcial con respecto a la coordenada de textura U. Si D3DX_DEFAULT, este derivado parcial no se almacenará.

dwUPartialOutIndex [in]

Tipo: DWORD

Especifica el índice semántico en el que se almacenará el derivado parcial con respecto a la coordenada de textura U.

dwVPartialOutSemantic [in]

Tipo: DWORD

Especifica el tipo D3DDECLUSAGE , normalmente D3DDECLUSAGE_BINORMAL, que describe dónde se almacenará el derivado parcial con respecto a la coordenada de textura V. Si D3DX_DEFAULT, este derivado parcial no se almacenará.

dwVPartialOutIndex [in]

Tipo: DWORD

Especifica el índice semántico en el que se almacenará el derivado parcial con respecto a la coordenada de textura V.

dwNormalOutSemantic [in]

Tipo: DWORD

Especifica la semántica normal de salida, normalmente D3DDECLUSAGE_NORMAL, que describe dónde se almacenará el vector normal en cada vértice. Si D3DX_DEFAULT, este vector normal no se almacenará.

dwNormalOutIndex [in]

Tipo: DWORD

Especifica el índice semántico en el que se va a almacenar el vector normal en cada vértice.

dwOptions [in]

Tipo: DWORD

Combinación de una o varias marcas D3DXTANGENT que especifican opciones de cálculo de fotogramas tangentes. Si es NULL, se especificarán las siguientes opciones:

Descripción D3DXTANGENT Valor de marca
Ponderar la longitud normal del vector por el ángulo, en radianes, subtendida por los dos bordes dejando el vértice. & ! ( D3DXTANGENT_WEIGHT_BY_AREA | D3DXTANGENT_WEIGHT_EQUAL )
Calcular coordenadas cartesianas ortogonales a partir de coordenadas de textura (u, v). Vea la sección Comentarios. & ! ( D3DXTANGENT_ORTHOGONALIZE_FROM_U | D3DXTANGENT_ORTHOGONALIZE_FROM_V )
Las texturas no se encapsulan en direcciones u o v & ! ( D3DXTANGENT_WRAP_UV )
Los derivados parciales con respecto a las coordenadas de textura se normalizan. & ! ( D3DXTANGENT_DONT_NORMALIZE_PARTIALS )
Los vértices se ordenan en una dirección en sentido contrario a las agujas del reloj alrededor de cada triángulo. & ! ( D3DXTANGENT_WIND_CW )
Use vectores normales por vértice ya presentes en la malla de entrada. & ! ( D3DXTANGENT_CALCULATE_NORMALS )

 

Si no se establece D3DXTANGENT_GENERATE_IN_PLACE, se clona la malla de entrada. Por lo tanto, la malla original debe tener suficiente espacio para almacenar el vector normal calculado y los datos derivados parciales.

pdwAdjacency [in]

Tipo: const DWORD*

Puntero a una matriz de tres DWORD por cara que especifican los tres vecinos para cada cara de la malla. El número de bytes de esta matriz debe ser al menos 3 * GetNumFaces * sizeof(DWORD).

fPartialEdgeThreshold [in]

Tipo: FLOAT

Especifica el coseno máximo del ángulo en el que se considera que dos derivados parciales son incompatibles entre sí. Si el producto de punto de la dirección de los dos derivados parciales en triángulos adyacentes es menor o igual que este umbral, los vértices compartidos entre estos triángulos se dividirán.

fSingularPointThreshold [in]

Tipo: FLOAT

Especifica la magnitud máxima de un derivado parcial en el que se considerará singular un vértice. Dado que varios triángulos son incidentes en un punto que tienen fotogramas tangentes cercanos, pero que se cancelan por completo (por ejemplo, en la parte superior de una esfera), la magnitud del derivado parcial disminuirá. Si la magnitud es menor o igual que este umbral, el vértice se dividirá para cada triángulo que lo contenga.

fNormalEdgeThreshold [in]

Tipo: FLOAT

De forma similar a fPartialEdgeThreshold, especifica el coseno máximo del ángulo entre dos normales que es un umbral más allá del cual se dividirán los vértices compartidos entre triángulos. Si el producto de punto de los dos normales es menor que el umbral, los vértices compartidos se dividirán, formando un borde duro entre triángulos vecinos. Si el producto de puntos es mayor que el umbral, los triángulos vecinos tendrán sus normales interpoladas.

ppMeshOut [out]

Tipo: ID3DXMesh**

Dirección de un puntero a un objeto de malla ID3DXMesh de salida que recibe los datos de vectores normales, binormal y tangente calculados.

ppVertexMapping [out]

Tipo: ID3DXBuffer**

Dirección de un puntero a un objeto de búfer ID3DXBuffer de salida que recibe una asignación de nuevos vértices calculados por este método a los vértices originales. El búfer es una matriz de DWORD, con el tamaño de la matriz definido como el número de vértices en ppMeshOut.

Valor devuelto

Tipo: HRESULT

Si la función se ejecuta correctamente, el valor devuelto se S_OK. Si se produce un error en la función, el valor devuelto puede ser uno de los siguientes: D3DERR_INVALIDCALL, D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

Comentarios

Hay disponible una versión simplificada de esta función como D3DXComputeTangentFrame.

El vector normal calculado en cada vértice siempre se normaliza para tener longitud de unidad.

La solución más sólida para calcular coordenadas cartesianas ortogonales es no establecer marcas D3DXTANGENT_ORTHOGONALIZE_FROM_U y D3DXTANGENT_ORTHOGONALIZE_FROM_V, por lo que las coordenadas ortogonales se calculan a partir de las coordenadas de textura que usted y v. Sin embargo, en este caso, si u o v es cero, la función calculará las coordenadas ortogonales mediante D3DXTANGENT_ORTHOGONALIZE_FROM_V o D3DXTANGENT_ORTHOGONALIZE_FROM_U, respectivamente.

Requisitos

Requisito Value
Encabezado
D3DX9Mesh.h
Biblioteca
D3dx9.lib

Consulte también

Funciones de malla

D3DXComputeTangentFrame