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 |
|
Biblioteca |
|
Consulte también