Compartilhar via


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
D3DX9Mesh.h
Biblioteca
D3dx9.lib

Confira também

Funções de malha

D3DXComputeTangentFrame