Функция 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 для Windows 8. Поддерживается для классических приложений Win32, приложений Магазина Windows и приложений Windows Phone 8.Требования
Требование | Значение |
---|---|
Целевая платформа | Windows |
Header | directxmath.h (включая DirectXMath.h) |