D3DXComputeTangentFrameEx-Funktion
Führt Tangensframeberechnungen für ein Gitter aus. Tangens, Binormal und optional normale Vektoren werden generiert. Singularitäten werden nach Bedarf durch Gruppieren von Kanten und Teilen von Scheitelpunkten behandelt.
Syntax
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
);
Parameter
-
pMesh [in]
-
Typ: ID3DXMesh*
Zeiger auf ein ID3DXMesh-Gitterobjekt .
-
dwTextureInSemantic [in]
-
Typ: DWORD
Gibt die Texturkoordinateneingabesemantik an. Wenn D3DX_DEFAULT, geht die Funktion davon aus, dass keine Texturkoordinaten vorhanden sind, und die Funktion schlägt fehl, es sei denn, die normale Vektorberechnung ist angegeben.
-
dwTextureInIndex [in]
-
Typ: DWORD
Wenn ein Gitter mehrere Texturkoordinaten aufweist, gibt die Texturkoordinate an, die für die Tangensframeberechnungen verwendet werden soll. Wenn null, hat das Gitter nur eine einzelne Texturkoordinate.
-
dwUPartialOutSemantic [in]
-
Typ: DWORD
Gibt die Ausgabesemantik für den Typ an, in der Regel D3DDECLUSAGE_TANGENT, die beschreibt, wo die partielle Ableitung in Bezug auf die U-Texturkoordinate gespeichert wird. Wenn D3DX_DEFAULT, wird diese partielle Ableitung nicht gespeichert.
-
dwUPartialOutIndex [in]
-
Typ: DWORD
Gibt den semantischen Index an, an dem die partielle Ableitung in Bezug auf die U-Texturkoordinate gespeichert werden soll.
-
dwVPartialOutSemantic [in]
-
Typ: DWORD
Gibt den D3DDECLUSAGE-Typ an, in der Regel D3DDECLUSAGE_BINORMAL, der beschreibt, wo die partielle Ableitung in Bezug auf die V-Texturkoordinate gespeichert wird. Wenn D3DX_DEFAULT, wird diese partielle Ableitung nicht gespeichert.
-
dwVPartialOutIndex [in]
-
Typ: DWORD
Gibt den semantischen Index an, an dem die partielle Ableitung in Bezug auf die V-Texturkoordinate gespeichert werden soll.
-
dwNormalOutSemantic [in]
-
Typ: DWORD
Gibt die normale Ausgabesemantik (in der Regel D3DDECLUSAGE_NORMAL) an, die beschreibt, wo der normale Vektor an jedem Scheitelpunkt gespeichert wird. Wenn D3DX_DEFAULT, wird dieser normale Vektor nicht gespeichert.
-
dwNormalOutIndex [in]
-
Typ: DWORD
Gibt den semantischen Index an, an dem der normale Vektor an jedem Scheitelpunkt gespeichert werden soll.
-
dwOptions [in]
-
Typ: DWORD
Kombination aus einem oder mehreren D3DXTANGENT-Flags , die Optionen für die Berechnung von Tangentenrahmen angeben. Bei NULL werden die folgenden Optionen angegeben:
BESCHREIBUNG D3DXTANGENT Flagwert Gewichtung der normalen Vektorlänge durch den Winkel im Bogenmaß, untergeordnet von den beiden Kanten, die den Scheitelpunkt verlassen. & ! ( D3DXTANGENT_WEIGHT_BY_AREA | D3DXTANGENT_WEIGHT_EQUAL ) Berechnet orthogonale kartesische Koordinaten aus Texturkoordinaten (u, v). Siehe Hinweise. & ! ( D3DXTANGENT_ORTHOGONALIZE_FROM_U | D3DXTANGENT_ORTHOGONALIZE_FROM_V ) Texturen werden nicht in u- oder v-Richtung umschlossen. & ! ( D3DXTANGENT_WRAP_UV ) Partielle Ableitungen in Bezug auf Texturkoordinaten werden normalisiert. & ! ( D3DXTANGENT_DONT_NORMALIZE_PARTIALS ) Scheitelpunkte werden gegen den Uhrzeigersinn um jedes Dreieck angeordnet. & ! ( D3DXTANGENT_WIND_CW ) Verwenden Sie pro Vertex normale Vektoren, die bereits im Eingabegitter vorhanden sind. & ! ( D3DXTANGENT_CALCULATE_NORMALS ) Wenn D3DXTANGENT_GENERATE_IN_PLACE nicht festgelegt ist, wird das Eingabegitter geklont. Das ursprüngliche Gitter muss daher über ausreichend Speicherplatz verfügen, um die berechneten Normalvektor- und partiellen abgeleiteten Daten zu speichern.
-
pdwAdjacency [in]
-
Typ: const DWORD*
Zeiger auf ein Array von drei DWORDs pro Gesicht, die die drei Nachbarn für jedes Gesicht im Gitter angeben. Die Anzahl der Bytes in diesem Array muss mindestens 3 * GetNumFaces * sizeof(DWORD) betragen.
-
fPartialEdgeThreshold [in]
-
Typ: FLOAT
Gibt den maximalen Kosinus des Winkels an, bei dem zwei partielle Ableitungen als nicht miteinander inkompatibel gelten. Wenn das Punktprodukt der Richtung der beiden partiellen Ableitungen in benachbarten Dreiecken kleiner oder gleich diesem Schwellenwert ist, werden die zwischen diesen Dreiecken geteilten Scheitelpunkte aufgeteilt.
-
fSingularPointThreshold [in]
-
Typ: FLOAT
Gibt die maximale Größe einer partiellen Ableitung an, bei der ein Scheitelpunkt als singular betrachtet wird. Da mehrere Dreiecke auf einem Punkt einfallen, der in der Nähe Tangentenrahmen hat, sich jedoch gegenseitig abbricht (z. B. am oberen Rand einer Kugel), nimmt die Größe der partiellen Ableitung ab. Wenn die Größe kleiner oder gleich diesem Schwellenwert ist, wird der Scheitelpunkt für jedes Dreieck geteilt, das ihn enthält.
-
fNormalEdgeThreshold [in]
-
Typ: FLOAT
Gibt ähnlich wie fPartialEdgeThreshold den maximalen Kosinus des Winkels zwischen zwei Normals an, der einen Schwellenwert darstellt, ab dem vertices zwischen Dreiecken geteilt werden. Wenn das Punktprodukt der beiden Normalwerte kleiner als der Schwellenwert ist, werden die gemeinsamen Scheitelpunkte geteilt und bilden eine feste Kante zwischen benachbarten Dreiecken. Wenn das Punktprodukt größer als der Schwellenwert ist, werden benachbarte Dreiecke ihre Normalwerte interpoliert.
-
ppMeshOut [out]
-
Typ: ID3DXMesh**
Adresse eines Zeigers auf ein ID3DXMesh-Ausgabe-Gitterobjekt , das die berechneten Tangenten-, Binormal- und Normalvektordaten empfängt.
-
ppVertexMapping [out]
-
Typ: ID3DXBuffer**
Adresse eines Zeigers auf ein ID3DXBuffer-Ausgabepufferobjekt , das eine Zuordnung neuer Scheitelpunkte empfängt, die von dieser Methode berechnet werden, zu den ursprünglichen Scheitelpunkten. Der Puffer ist ein Array von DWORDs, wobei die Arraygröße als Anzahl von Scheitelpunkten in ppMeshOut definiert ist.
Rückgabewert
Typ: HRESULT
Wenn die Funktion erfolgreich ist, wird der Rückgabewert S_OK. Wenn die Funktion fehlschlägt, kann der Rückgabewert einer der folgenden sein: D3DERR_INVALIDCALL, D3DXERR_INVALIDDATA, E_OUTOFMEMORY.
Bemerkungen
Eine vereinfachte Version dieser Funktion ist als D3DXComputeTangentFrame verfügbar.
Der berechnete Normalvektor an jedem Scheitelpunkt wird immer normalisiert, um eine Einheitslänge zu haben.
Die robusteste Lösung für die Berechnung orthogonal kartesischer Koordinaten besteht darin, keine Flags D3DXTANGENT_ORTHOGONALIZE_FROM_U und D3DXTANGENT_ORTHOGONALIZE_FROM_V festzulegen, sodass orthogonale Koordinaten aus den Texturkoordinaten Sie und v berechnet werden. Wenn in diesem Fall jedoch u oder v null ist, berechnet die Funktion orthogonale Koordinaten mit D3DXTANGENT_ORTHOGONALIZE_FROM_V bzw. D3DXTANGENT_ORTHOGONALIZE_FROM_U.
Anforderungen
Anforderung | Wert |
---|---|
Header |
|
Bibliothek |
|
Weitere Informationen