Функция XMVector3Refract (directxmath.h)

Преломляет трехмерный вектор инцидента через трехмерный нормальный вектор.

Синтаксис

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

Параметры

[in] Incident

Трехмерный вектор инцидента для преломления.

[in] Normal

Трехмерный нормальный вектор для преломления вектора инцидента.

[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 для Windows 8. Поддерживается для классических приложений Win32, приложений Магазина Windows и Windows Phone 8 приложений.

Требования

Требование Значение
Целевая платформа Windows
Header directxmath.h (включая DirectXMath.h)

См. также раздел

3D-векторные геометрические функции библиотеки DirectXMath

XMVector2RefractV