Share via


Funzione D3DXComputeTangentFrameEx

Esegue calcoli di fotogrammi tangenti su una mesh. Vengono generati vettori tangenti, binormali e facoltativamente normali. Le singolarità vengono gestite in base alle esigenze raggruppando i bordi e suddividendo i vertici.

Sintassi

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
);

Parametri

pMesh [in]

Tipo: ID3DXMesh*

Puntatore a un oggetto mesh ID3DXMesh di input.

dwTextureInSemantic [in]

Tipo: DWORD

Specifica la semantica di input della coordinata della trama. Se D3DX_DEFAULT, la funzione presuppone che non ci siano coordinate di trama e la funzione avrà esito negativo a meno che non venga specificato il calcolo del vettore normale.

dwTextureInIndex [in]

Tipo: DWORD

Se una mesh ha più coordinate di trama, specifica la coordinata della trama da usare per i calcoli dei fotogrammi tangenti. Se zero, la mesh ha solo una singola coordinata di trama.

dwUPartialOutSemantic [in]

Tipo: DWORD

Specifica la semantica di output per il tipo, in genere D3DDECLUSAGE_TANGENT, che descrive dove verrà archiviato il derivato parziale rispetto alla coordinata della trama U. Se D3DX_DEFAULT, questo derivato parziale non verrà archiviato.

dwUPartialOutIndex [in]

Tipo: DWORD

Specifica l'indice semantico in corrispondenza del quale archiviare la derivata parziale rispetto alla coordinata della trama U.

dwVPartialOutSemantic [in]

Tipo: DWORD

Specifica il tipo di D3DDECLUSAGE , in genere D3DDECLUSAGE_BINORMAL, che descrive dove verrà archiviato il derivato parziale rispetto alla coordinata della trama V. Se D3DX_DEFAULT, questo derivato parziale non verrà archiviato.

dwVPartialOutIndex [in]

Tipo: DWORD

Specifica l'indice semantico in corrispondenza del quale archiviare la derivata parziale rispetto alla coordinata della trama V.

dwNormalOutSemantic [in]

Tipo: DWORD

Specifica la semantica normale di output, in genere D3DDECLUSAGE_NORMAL, che descrive dove verrà archiviato il vettore normale in ogni vertice. Se D3DX_DEFAULT, questo vettore normale non verrà archiviato.

dwNormalOutIndex [in]

Tipo: DWORD

Specifica l'indice semantico in corrispondenza del quale archiviare il vettore normale in ogni vertice.

dwOptions [in]

Tipo: DWORD

Combinazione di uno o più flag D3DXTANGENT che specificano le opzioni di calcolo dei fotogrammi tangenti. Se NULL, verranno specificate le opzioni seguenti:

Descrizione valore flag D3DXTANGENT
Pondera la lunghezza del vettore normale in base all'angolo, in radianti, sottotesa dai due bordi che lasciano il vertice. & ! ( D3DXTANGENT_WEIGHT_BY_AREA | D3DXTANGENT_WEIGHT_EQUAL )
Calcolare le coordinate cartesiane ortogonali dalle coordinate delle trame (u, v). Vedere la sezione Osservazioni. & ! ( D3DXTANGENT_ORTHOGONALIZE_FROM_U | D3DXTANGENT_ORTHOGONALIZE_FROM_V )
Le trame non vengono racchiuse nelle direzioni u o v & ! ( D3DXTANGENT_WRAP_UV )
I derivati parziali rispetto alle coordinate della trama vengono normalizzati. & ! ( D3DXTANGENT_DONT_NORMALIZE_PARTIALS )
I vertici vengono ordinati in direzione antiorario intorno a ogni triangolo. & ! ( D3DXTANGENT_WIND_CW )
Usare vettori normali per vertice già presenti nella mesh di input. & ! ( D3DXTANGENT_CALCULATE_NORMALS )

 

Se D3DXTANGENT_GENERATE_IN_PLACE non è impostato, la mesh di input viene clonata. La mesh originale deve quindi disporre di spazio sufficiente per archiviare i dati derivati normali e normali calcolati.

pdwAdjacency [in]

Tipo: const DWORD*

Puntatore a una matrice di tre DWORD per viso che specificano i tre vicini per ogni viso nella mesh. Il numero di byte in questa matrice deve essere almeno 3 * GetNumFaces * sizeof(DWORD).

fPartialEdgeThreshold [in]

Tipo: FLOAT

Specifica il coseno massimo dell'angolo in cui due derivati parziali vengono considerati incompatibili tra loro. Se il prodotto punto della direzione dei due derivati parziali nei triangoli adiacenti è minore o uguale a questa soglia, i vertici condivisi tra questi triangoli verranno divisi.

fSingularPointThreshold [in]

Tipo: FLOAT

Specifica la grandezza massima di un derivato parziale in corrispondenza del quale un vertice verrà considerato singolare. Poiché più triangoli sono eventi imprevisti su un punto con frame tangenti vicini, ma del tutto annullano l'uno dall'altro (ad esempio nella parte superiore di una sfera), la grandezza del derivato parziale diminuirà. Se la grandezza è minore o uguale a questa soglia, il vertice verrà diviso per ogni triangolo che lo contiene.

fNormalEdgeThreshold [in]

Tipo: FLOAT

Analogamente a fPartialEdgeThreshold, specifica il coseno massimo dell'angolo tra due normali che è una soglia oltre la quale verranno suddivisi i vertici condivisi tra i triangoli. Se il prodotto punto dei due normali è minore della soglia, i vertici condivisi verranno divisi, formando un bordo rigido tra i triangoli adiacenti. Se il prodotto punto è maggiore della soglia, i triangoli adiacenti avranno le normali interpolazioni.

ppMeshOut [out]

Tipo: ID3DXMesh**

Indirizzo di un puntatore a un oggetto mesh ID3DXMesh di output che riceve i dati di vettore normali, binormal e tangenti calcolati.

ppVertexMapping [out]

Tipo: ID3DXBuffer**

Indirizzo di un puntatore a un oggetto buffer ID3DXBuffer di output che riceve un mapping di nuovi vertici calcolati da questo metodo ai vertici originali. Il buffer è una matrice di DWORD, con le dimensioni della matrice definite come numero di vertici in ppMeshOut.

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.

Osservazioni:

Una versione semplificata di questa funzione è disponibile come D3DXComputeTangentFrame.

Il vettore normale calcolato in ogni vertice viene sempre normalizzato in modo da avere una lunghezza unità.

La soluzione più affidabile per il calcolo delle coordinate cartesiane ortogonali consiste nell'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 e v. Tuttavia, in questo caso, se u o v è zero, la funzione calcola rispettivamente le coordinate ortogonali usando D3DXTANGENT_ORTHOGONALIZE_FROM_V o D3DXTANGENT_ORTHOGONALIZE_FROM_U.

Requisiti

Requisito Valore
Intestazione
D3DX9Mesh.h
Libreria
D3dx9.lib

Vedi anche

Funzioni mesh

D3DXComputeTangentFrame