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:
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 |
|
Libreria |
|
Vedi anche