Função D3DXComputeTangentFrameEx
Executa cálculos de quadro tangente em uma malha. Vetores tangentes, binormal e, opcionalmente, normais, são gerados. Singularidades são tratadas conforme exigido pelo agrupamento de bordas e divisão de vértices.
Sintaxe
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*
Ponteiro para um objeto de malha ID3DXMesh de entrada.
-
dwTextureInSemantic [in]
-
Tipo: DWORD
Especifica a semântica de entrada da coordenada de textura. Se D3DX_DEFAULT, a função pressupõe que não há coordenadas de textura e a função falhará, a menos que o cálculo de vetor normal seja especificado.
-
dwTextureInIndex [in]
-
Tipo: DWORD
Se uma malha tiver várias coordenadas de textura, especificará a coordenada de textura a ser usada para os cálculos de quadro tangente. Se zero, a malha terá apenas uma única coordenada de textura.
-
dwUPartialOutSemantic [in]
-
Tipo: DWORD
Especifica a semântica de saída para o tipo, normalmente D3DDECLUSAGE_TANGENT, que descreve onde a derivada parcial em relação à coordenada de textura U será armazenada. Se D3DX_DEFAULT, esse derivado parcial não será armazenado.
-
dwUPartialOutIndex [in]
-
Tipo: DWORD
Especifica o índice semântico no qual armazenar o derivado parcial em relação à coordenada de textura U.
-
dwVPartialOutSemantic [in]
-
Tipo: DWORD
Especifica o tipo D3DDECLUSAGE , normalmente D3DDECLUSAGE_BINORMAL, que descreve onde a derivada parcial em relação à coordenada de textura V será armazenada. Se D3DX_DEFAULT, esse derivado parcial não será armazenado.
-
dwVPartialOutIndex [in]
-
Tipo: DWORD
Especifica o índice semântico no qual armazenar o derivado parcial em relação à coordenada de textura V.
-
dwNormalOutSemantic [in]
-
Tipo: DWORD
Especifica a semântica normal de saída, normalmente D3DDECLUSAGE_NORMAL, que descreve onde o vetor normal em cada vértice será armazenado. Se D3DX_DEFAULT, esse vetor normal não será armazenado.
-
dwNormalOutIndex [in]
-
Tipo: DWORD
Especifica o índice semântico no qual armazenar o vetor normal em cada vértice.
-
dwOptions [in]
-
Tipo: DWORD
Combinação de um ou mais sinalizadores D3DXTANGENT que especificam opções de computação de quadro tangente. Se FOR NULL, as seguintes opções serão especificadas:
Descrição D3DXTANGENT Valor do sinalizador Emagre o comprimento normal do vetor pelo ângulo, em radianos, subconsulta pelas duas bordas deixando o vértice. & ! ( D3DXTANGENT_WEIGHT_BY_AREA | D3DXTANGENT_WEIGHT_EQUAL ) Computar coordenadas cartesianas ortogonais de coordenadas de textura (u, v). Consulte Observações. & ! ( D3DXTANGENT_ORTHOGONALIZE_FROM_U | D3DXTANGENT_ORTHOGONALIZE_FROM_V ) As texturas não são encapsuladas em direções u ou v & ! ( D3DXTANGENT_WRAP_UV ) Derivativos parciais em relação às coordenadas de textura são normalizados. & ! ( D3DXTANGENT_DONT_NORMALIZE_PARTIALS ) Os vértices são ordenados em uma direção anti-horário ao redor de cada triângulo. & ! ( D3DXTANGENT_WIND_CW ) Use vetores normais por vértice já presentes na malha de entrada. & ! ( D3DXTANGENT_CALCULATE_NORMALS ) Se D3DXTANGENT_GENERATE_IN_PLACE não estiver definido, a malha de entrada será clonada. Portanto, a malha original deve ter espaço suficiente para armazenar os dados de vetor normal computado e derivados parciais.
-
pdwAdjacency [in]
-
Tipo: const DWORD*
Ponteiro para uma matriz de três DWORDs por rosto que especificam os três vizinhos para cada rosto na malha. O número de bytes nessa matriz deve ser pelo menos 3 * GetNumFaces * sizeof(DWORD).
-
fPartialEdgeThreshold [in]
-
Tipo: FLOAT
Especifica o cosseno máximo do ângulo no qual dois derivados parciais são considerados incompatíveis entre si. Se o produto de ponto da direção dos dois derivados parciais em triângulos adjacentes for menor ou igual a esse limite, os vértices compartilhados entre esses triângulos serão divididos.
-
fSingularPointThreshold [in]
-
Tipo: FLOAT
Especifica a magnitude máxima de um derivado parcial no qual um vértice será considerado singular. Como vários triângulos são incidentes em um ponto que tem quadros tangentes próximos, mas se cancelam completamente (como na parte superior de uma esfera), a magnitude do derivado parcial diminuirá. Se a magnitude for menor ou igual a esse limite, o vértice será dividido para cada triângulo que o contém.
-
fNormalEdgeThreshold [in]
-
Tipo: FLOAT
Semelhante a fPartialEdgeThreshold, especifica o cosseno máximo do ângulo entre dois normais que é um limite além do qual os vértices compartilhados entre triângulos serão divididos. Se o produto de ponto dos dois normais for menor que o limite, os vértices compartilhados serão divididos, formando uma borda dura entre triângulos vizinhos. Se o produto de ponto for maior que o limite, os triângulos vizinhos terão seus normais interpolados.
-
ppMeshOut [out]
-
Tipo: ID3DXMesh**
Endereço de um ponteiro para um objeto de malha ID3DXMesh de saída que recebe os dados de vetor normal, binormal e tangente computados.
-
ppVertexMapping [out]
-
Tipo: ID3DXBuffer**
Endereço de um ponteiro para um objeto de buffer ID3DXBuffer de saída que recebe um mapeamento de novos vértices calculados por esse método para os vértices originais. O buffer é uma matriz de DWORDs, com o tamanho da matriz definido como o número de vértices em ppMeshOut.
Valor retornado
Tipo: HRESULT
Se a função for bem-sucedida, o valor retornado será S_OK. Se a função falhar, o valor retornado poderá ser um dos seguintes: D3DERR_INVALIDCALL, D3DXERR_INVALIDDATA E_OUTOFMEMORY.
Comentários
Uma versão simplificada dessa função está disponível como D3DXComputeTangentFrame.
O vetor normal computado em cada vértice é sempre normalizado para ter comprimento de unidade.
A solução mais robusta para computação de coordenadas cartesianas ortogonais é não definir sinalizadores D3DXTANGENT_ORTHOGONALIZE_FROM_U e D3DXTANGENT_ORTHOGONALIZE_FROM_V, para que as coordenadas ortogonais sejam computadas de ambas as coordenadas de textura, você e v. No entanto, nesse caso, se u ou v for zero, a função calculará coordenadas ortogonais usando D3DXTANGENT_ORTHOGONALIZE_FROM_V ou D3DXTANGENT_ORTHOGONALIZE_FROM_U, respectivamente.
Requisitos
Requisito | Valor |
---|---|
parâmetro |
|
Biblioteca |
|
Confira também