Freigeben über


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

Weitere Informationen

Gitterfunktionen

D3DXComputeTangentFrame