|
|
@ -114,11 +114,10 @@ namespace detail |
|
|
|
{ |
|
|
|
{ |
|
|
|
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& I, vec<L, T, Q> const& N, T eta) |
|
|
|
GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& I, vec<L, T, Q> const& N, T eta) |
|
|
|
{ |
|
|
|
{ |
|
|
|
assert(eta >= static_cast<T>(-1) && eta <= static_cast<T>(1)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
T const dotValue(dot(N, I)); |
|
|
|
T const dotValue(dot(N, I)); |
|
|
|
T const k(static_cast<T>(1) - eta * eta * (static_cast<T>(1) - dotValue * dotValue)); |
|
|
|
T const k(static_cast<T>(1) - eta * eta * (static_cast<T>(1) - dotValue * dotValue)); |
|
|
|
vec<L, T, Q> const Result = (eta * I - (eta * dotValue + std::sqrt(k)) * N) * static_cast<T>(k >= static_cast<T>(0)); |
|
|
|
vec<L, T, Q> const Result = |
|
|
|
|
|
|
|
(k >= static_cast<T>(0)) ? (eta * I - (eta * dotValue + std::sqrt(k)) * N) : vec<L, T, Q>(0); |
|
|
|
return Result; |
|
|
|
return Result; |
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
|
}; |
|
|
|