XMVector2Refract
2D 法線ベクトルによって 2D 入射ベクトルを屈折します。
構文
XMVECTOR XMVector2Refract( XMVECTOR Incident, XMVECTOR Normal, FLOAT RefractionIndex)
パラメーター
- Incident
[in] 屈折される 2D 入射ベクトル - Normal
[in] 入射ベクトルを屈折させる 2D 法線ベクトル - RefractionIndex
[in] 屈折率。「解説」を参照してください。
戻り値
屈折された入射ベクトルを返します。屈折率、および入射ベクトルと法線ベクトル間の角度によって、結果が全反射になった場合は、< 0.0f, 0.0f, 不定, 不定 > という形のベクトルが返されます。
解説
次の擬似コードは、この関数の処理を表したものです。
XMVECTOR Result;FLOAT t = (Incident.x * Normal.x + Incident.y * Normal.y); // dot(Incident, Normal);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;}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 = undefined;Result.w = undefined;return Result;
屈折率とは、入射ベクトルが含まれる媒質の屈折率と、ベクトルが入射する媒質の屈折率の比を表します (媒質の屈折率とは、真空中の光の速度と媒質中の光の速度の比です)。
要件
ヘッダー: xnamath.h で宣言されています。