XMVector3Refract-Funktion (directxmath.h)

Bricht einen Incident-3D-Vektor über einen normalen 3D-Vektor.

Syntax

XMVECTOR XM_CALLCONV XMVector3Refract(
  [in] FXMVECTOR Incident,
  [in] FXMVECTOR Normal,
  [in] float     RefractionIndex
) noexcept;

Parameter

[in] Incident

3D-Incidentvektor zum Brechen.

[in] Normal

3D-Normalvektor zum Durchbrechen des Incidentvektors.

[in] RefractionIndex

Index der Brechung. Siehe Bemerkungen.

Rückgabewert

Gibt den Vektor für den gebrochenen Vorfall zurück. Wenn der Brechungsindex und der Winkel zwischen dem Ereignisvektor und dem Normalwert so sind, dass das Ergebnis eine gesamtinterne Reflexion ist, gibt die Funktion einen Vektor der Form < 0.0f, 0.0f, 0.0f, undefined >zurück.

Hinweise

Der folgende Pseudocode veranschaulicht den Betrieb der Funktion:

XMVECTOR Result;

float t = ( Incident.x * Normal.x + Incident.y * Normal.y + Incident.z * Normal.z );
float r = 1.0f - RefractionIndex * RefractionIndex * (1.0f - t * t);

if (r < 0.0f) // Total internal reflection
{
	Result.x = 0.0f;
	Result.y = 0.0f;
	Result.z = 0.0f;
}
else
{
	float s = RefractionIndex * t + sqrt(r);
	Result.x = RefractionIndex * Incident.x - s * Normal.x;
	Result.y = RefractionIndex * Incident.y - s * Normal.y;
	Result.z = RefractionIndex * Incident.z - s * Normal.z;
}

Result.w = undefined;

return Result;

Der Index der Brechung ist das Verhältnis des Index der Brechung des Mediums, das den Einfallvektor enthält, zum Index der Brechung des eingegebenen Mediums (wobei der Index der Brechung eines Mediums selbst das Verhältnis der Lichtgeschwindigkeit in einem Vakuum zur Lichtgeschwindigkeit im Medium ist).

Plattformanforderungen

Microsoft Visual Studio 2010 oder Microsoft Visual Studio 2012 mit dem Windows SDK für Windows 8. Unterstützt für Win32-Desktop-Apps, Windows Store-Apps und Windows Phone 8-Apps.

Anforderungen

Anforderung Wert
Zielplattform Windows
Kopfzeile directxmath.h (einschließlich DirectXMath.h)

Weitere Informationen

Geometrische Funktionen der DirectXMath-Bibliothek mit 3D-Vektoren

XMVector2RefractV