次の方法で共有


XMVector4Refract 関数 (directxmath.h)

4D 法線ベクトル全体でインシデント 4D ベクトルを屈折します。

構文

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

パラメーター

[in] Incident

屈折する 4D インシデント ベクトル。

[in] Normal

入射ベクトルを屈折させる 4D 法線ベクトル。

[in] RefractionIndex

屈折のインデックス。 「解説」を参照してください。

戻り値

屈折したインシデント ベクトルを返します。 屈折インデックスと入射ベクトルと法線の間の角度が、結果が内部反射の合計になるようにした場合、関数は 0.0f、0.0f、0.0f、0.0f >の形式<のベクトルを返します。

注釈

次の擬似コードは、 関数の操作を示しています。

XMVECTOR Result;

float t = 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;
	Result.z = 0.0f;
	Result.w = 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 = RefractionIndex * Incident.w - s * Normal.w;
}

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 を含む)

こちらもご覧ください

DirectXMath ライブラリ 4D ベクター幾何学関数

XMVector4RefractV