XMVector3Refract 関数 (directxmath.h)
3D 法線ベクトル全体に入射 3D ベクトルを屈折します。
構文
XMVECTOR XM_CALLCONV XMVector3Refract(
[in] FXMVECTOR Incident,
[in] FXMVECTOR Normal,
[in] float RefractionIndex
) noexcept;
パラメーター
[in] Incident
屈折する 3D 入射ベクトル。
[in] Normal
入射ベクトルを屈折させる 3D 法線ベクトル。
[in] RefractionIndex
屈折のインデックス。 「解説」を参照してください。
戻り値
屈折した入射ベクトルを返します。 入射ベクトルと法線の間の屈折率と角度が、結果が内部反射の合計である場合、関数は 0.0f、0.0f、0.0f、undefined >の形式<のベクトルを返します。
注釈
次の擬似コードは、 関数の操作を示しています。
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;
屈折率は、入射ベクトルを含む媒体の屈折率と、入力される媒体の屈折率との比です(ここで、媒体の屈折率は、それ自体が、真空中の光の速度と媒体中の光の速度の比率である)。
プラットフォームの要件
Microsoft Visual Studio 2010 または Microsoft Visual Studio 2012 と Windows SDK for Windows 8。 Win32 デスクトップ アプリ、Windows ストア アプリ、Windows Phone 8 アプリでサポートされます。要件
要件 | 値 |
---|---|
対象プラットフォーム | Windows |
ヘッダー | directxmath.h (DirectXMath.h を含む) |