Share via


Funzione D3DXComputeTangentFrame

Calcolare i vettori tangenti, binormal e normali per una mesh.

Sintassi

HRESULT D3DXComputeTangentFrame(
  _In_ ID3DXMesh *pMesh,
  _In_ DWORD     dwOptions
);

Parametri

pMesh [in]

Tipo: ID3DXMesh*

Puntatore a un oggetto mesh ID3DXMesh di input.

dwOptions [in]

Tipo: DWORD

Combinazione di uno o più flag D3DXTANGENT .

Usare NULL per specificare le opzioni seguenti:

  • Pesare la lunghezza del vettore normale in base all'angolo, espresso in radianti, sottoteso dai due bordi che lasciano il vertice.
  • Calcolare le coordinate cartesiane ortogonali dalle coordinate della trama UV.
  • Le trame non vengono avvolte nelle direzioni U o V
  • I derivati parziali rispetto alle coordinate delle trame sono normalizzati.
  • I vertici vengono ordinati in una direzione antiorario intorno a ogni triangolo.
  • Usare i vettori normali per vertice già presenti nella mesh di input.
  • I risultati verranno archiviati nella mesh di input originale. La funzione avrà esito negativo se è necessario creare nuovi vertici.

Valore restituito

Tipo: HRESULT

Se la funzione ha esito positivo, il valore restituito viene S_OK. Se la funzione ha esito negativo, il valore restituito può essere uno dei seguenti: D3DERR_INVALIDCALL, D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

Commenti

Questa funzione chiama semplicemente D3DXComputeTangentFrameEx con i parametri di input seguenti:

D3DXComputeTangentFrameEx(pMesh, D3DDECLUSAGE_TEXCOORD, 0,   
      D3DDECLUSAGE_BINORMAL, 0, D3DDECLUSAGE_TANGENT, 0, 
      D3DDECLUSAGE_NORMAL, 0, 
      dwOptions | D3DXTANGENT_GENERATE_IN_PLACE,
      NULL, 0.01f, 0.25f, 0.01f, NULL, NULL);

Le singolarità vengono gestite in base alle esigenze raggruppando i bordi e suddividendo i vertici. Se è necessario suddividere i vertici, la funzione avrà esito negativo. Il vettore normale calcolato in ogni vertice viene sempre normalizzato in modo da avere una lunghezza di unità.

La soluzione più affidabile per il calcolo delle coordinate cartesiane ortogonali consiste nel non impostare flag D3DXTANGENT_ORTHOGONALIZE_FROM_U e D3DXTANGENT_ORTHOGONALIZE_FROM_V, in modo che le coordinate ortogonali vengano calcolate da entrambe le coordinate della trama UV. In questo caso, tuttavia, se U o V è zero, la funzione calcola le coordinate ortogonali rispettivamente usando D3DXTANGENT_ORTHOGONALIZE_FROM_V o D3DXTANGENT_ORTHOGONALIZE_FROM_U.

Requisiti

Requisito Valore
Intestazione
D3DX9Mesh.h
Libreria
D3dx9.lib

Vedi anche

Funzioni mesh

D3DXComputeTangentFrameEx

D3DXTANGENT