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 で宣言されています。

関連項目

XMVector2RefractV