|
@@ -8,11 +8,7 @@
|
|
|
namespace glm
|
|
namespace glm
|
|
|
{
|
|
{
|
|
|
template <typename T, precision P>
|
|
template <typename T, precision P>
|
|
|
- GLM_FUNC_QUALIFIER tmat4x4<T, P> translate
|
|
|
|
|
- (
|
|
|
|
|
- tmat4x4<T, P> const & m,
|
|
|
|
|
- tvec3<T, P> const & v
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> translate(tmat4x4<T, P> const & m, tvec3<T, P> const & v)
|
|
|
{
|
|
{
|
|
|
tmat4x4<T, P> Result(m);
|
|
tmat4x4<T, P> Result(m);
|
|
|
Result[3] = m[0] * v[0] + m[1] * v[1] + m[2] * v[2] + m[3];
|
|
Result[3] = m[0] * v[0] + m[1] * v[1] + m[2] * v[2] + m[3];
|
|
@@ -20,12 +16,7 @@ namespace glm
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template <typename T, precision P>
|
|
template <typename T, precision P>
|
|
|
- GLM_FUNC_QUALIFIER tmat4x4<T, P> rotate
|
|
|
|
|
- (
|
|
|
|
|
- tmat4x4<T, P> const & m,
|
|
|
|
|
- T angle,
|
|
|
|
|
- tvec3<T, P> const & v
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> rotate(tmat4x4<T, P> const & m, T angle, tvec3<T, P> const & v)
|
|
|
{
|
|
{
|
|
|
T const a = angle;
|
|
T const a = angle;
|
|
|
T const c = cos(a);
|
|
T const c = cos(a);
|
|
@@ -36,15 +27,15 @@ namespace glm
|
|
|
|
|
|
|
|
tmat4x4<T, P> Rotate(uninitialize);
|
|
tmat4x4<T, P> Rotate(uninitialize);
|
|
|
Rotate[0][0] = c + temp[0] * axis[0];
|
|
Rotate[0][0] = c + temp[0] * axis[0];
|
|
|
- Rotate[0][1] = 0 + temp[0] * axis[1] + s * axis[2];
|
|
|
|
|
- Rotate[0][2] = 0 + temp[0] * axis[2] - s * axis[1];
|
|
|
|
|
|
|
+ Rotate[0][1] = temp[0] * axis[1] + s * axis[2];
|
|
|
|
|
+ Rotate[0][2] = temp[0] * axis[2] - s * axis[1];
|
|
|
|
|
|
|
|
- Rotate[1][0] = 0 + temp[1] * axis[0] - s * axis[2];
|
|
|
|
|
|
|
+ Rotate[1][0] = temp[1] * axis[0] - s * axis[2];
|
|
|
Rotate[1][1] = c + temp[1] * axis[1];
|
|
Rotate[1][1] = c + temp[1] * axis[1];
|
|
|
- Rotate[1][2] = 0 + temp[1] * axis[2] + s * axis[0];
|
|
|
|
|
|
|
+ Rotate[1][2] = temp[1] * axis[2] + s * axis[0];
|
|
|
|
|
|
|
|
- Rotate[2][0] = 0 + temp[2] * axis[0] + s * axis[1];
|
|
|
|
|
- Rotate[2][1] = 0 + temp[2] * axis[1] - s * axis[0];
|
|
|
|
|
|
|
+ Rotate[2][0] = temp[2] * axis[0] + s * axis[1];
|
|
|
|
|
+ Rotate[2][1] = temp[2] * axis[1] - s * axis[0];
|
|
|
Rotate[2][2] = c + temp[2] * axis[2];
|
|
Rotate[2][2] = c + temp[2] * axis[2];
|
|
|
|
|
|
|
|
tmat4x4<T, P> Result(uninitialize);
|
|
tmat4x4<T, P> Result(uninitialize);
|
|
@@ -56,12 +47,7 @@ namespace glm
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template <typename T, precision P>
|
|
template <typename T, precision P>
|
|
|
- GLM_FUNC_QUALIFIER tmat4x4<T, P> rotate_slow
|
|
|
|
|
- (
|
|
|
|
|
- tmat4x4<T, P> const & m,
|
|
|
|
|
- T angle,
|
|
|
|
|
- tvec3<T, P> const & v
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> rotate_slow(tmat4x4<T, P> const & m, T angle, tvec3<T, P> const & v)
|
|
|
{
|
|
{
|
|
|
T const a = angle;
|
|
T const a = angle;
|
|
|
T const c = cos(a);
|
|
T const c = cos(a);
|
|
@@ -70,31 +56,27 @@ namespace glm
|
|
|
|
|
|
|
|
tvec3<T, P> axis = normalize(v);
|
|
tvec3<T, P> axis = normalize(v);
|
|
|
|
|
|
|
|
- Result[0][0] = c + (1 - c) * axis.x * axis.x;
|
|
|
|
|
- Result[0][1] = (1 - c) * axis.x * axis.y + s * axis.z;
|
|
|
|
|
- Result[0][2] = (1 - c) * axis.x * axis.z - s * axis.y;
|
|
|
|
|
- Result[0][3] = 0;
|
|
|
|
|
|
|
+ Result[0][0] = c + (static_cast<T>(1) - c) * axis.x * axis.x;
|
|
|
|
|
+ Result[0][1] = (static_cast<T>(1) - c) * axis.x * axis.y + s * axis.z;
|
|
|
|
|
+ Result[0][2] = (static_cast<T>(1) - c) * axis.x * axis.z - s * axis.y;
|
|
|
|
|
+ Result[0][3] = static_cast<T>(0);
|
|
|
|
|
|
|
|
- Result[1][0] = (1 - c) * axis.y * axis.x - s * axis.z;
|
|
|
|
|
- Result[1][1] = c + (1 - c) * axis.y * axis.y;
|
|
|
|
|
- Result[1][2] = (1 - c) * axis.y * axis.z + s * axis.x;
|
|
|
|
|
- Result[1][3] = 0;
|
|
|
|
|
|
|
+ Result[1][0] = (static_cast<T>(1) - c) * axis.y * axis.x - s * axis.z;
|
|
|
|
|
+ Result[1][1] = c + (static_cast<T>(1) - c) * axis.y * axis.y;
|
|
|
|
|
+ Result[1][2] = (static_cast<T>(1) - c) * axis.y * axis.z + s * axis.x;
|
|
|
|
|
+ Result[1][3] = static_cast<T>(0);
|
|
|
|
|
|
|
|
- Result[2][0] = (1 - c) * axis.z * axis.x + s * axis.y;
|
|
|
|
|
- Result[2][1] = (1 - c) * axis.z * axis.y - s * axis.x;
|
|
|
|
|
- Result[2][2] = c + (1 - c) * axis.z * axis.z;
|
|
|
|
|
- Result[2][3] = 0;
|
|
|
|
|
|
|
+ Result[2][0] = (static_cast<T>(1) - c) * axis.z * axis.x + s * axis.y;
|
|
|
|
|
+ Result[2][1] = (static_cast<T>(1) - c) * axis.z * axis.y - s * axis.x;
|
|
|
|
|
+ Result[2][2] = c + (static_cast<T>(1) - c) * axis.z * axis.z;
|
|
|
|
|
+ Result[2][3] = static_cast<T>(0);
|
|
|
|
|
|
|
|
Result[3] = tvec4<T, P>(0, 0, 0, 1);
|
|
Result[3] = tvec4<T, P>(0, 0, 0, 1);
|
|
|
return m * Result;
|
|
return m * Result;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template <typename T, precision P>
|
|
template <typename T, precision P>
|
|
|
- GLM_FUNC_QUALIFIER tmat4x4<T, P> scale
|
|
|
|
|
- (
|
|
|
|
|
- tmat4x4<T, P> const & m,
|
|
|
|
|
- tvec3<T, P> const & v
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> scale(tmat4x4<T, P> const & m, tvec3<T, P> const & v)
|
|
|
{
|
|
{
|
|
|
tmat4x4<T, P> Result(uninitialize);
|
|
tmat4x4<T, P> Result(uninitialize);
|
|
|
Result[0] = m[0] * v[0];
|
|
Result[0] = m[0] * v[0];
|
|
@@ -105,11 +87,7 @@ namespace glm
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template <typename T, precision P>
|
|
template <typename T, precision P>
|
|
|
- GLM_FUNC_QUALIFIER tmat4x4<T, P> scale_slow
|
|
|
|
|
- (
|
|
|
|
|
- tmat4x4<T, P> const & m,
|
|
|
|
|
- tvec3<T, P> const & v
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> scale_slow(tmat4x4<T, P> const & m, tvec3<T, P> const & v)
|
|
|
{
|
|
{
|
|
|
tmat4x4<T, P> Result(T(1));
|
|
tmat4x4<T, P> Result(T(1));
|
|
|
Result[0][0] = v.x;
|
|
Result[0][0] = v.x;
|
|
@@ -267,13 +245,7 @@ namespace glm
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template <typename T>
|
|
template <typename T>
|
|
|
- GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> perspective
|
|
|
|
|
- (
|
|
|
|
|
- T fovy,
|
|
|
|
|
- T aspect,
|
|
|
|
|
- T zNear,
|
|
|
|
|
- T zFar
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> perspective(T fovy, T aspect, T zNear, T zFar)
|
|
|
{
|
|
{
|
|
|
# if GLM_COORDINATE_SYSTEM == GLM_LEFT_HANDED
|
|
# if GLM_COORDINATE_SYSTEM == GLM_LEFT_HANDED
|
|
|
return perspectiveLH(fovy, aspect, zNear, zFar);
|
|
return perspectiveLH(fovy, aspect, zNear, zFar);
|
|
@@ -283,12 +255,7 @@ namespace glm
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template <typename T>
|
|
template <typename T>
|
|
|
- GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> perspectiveRH
|
|
|
|
|
- (
|
|
|
|
|
- T fovy,
|
|
|
|
|
- T aspect,
|
|
|
|
|
- T zNear, T zFar
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> perspectiveRH(T fovy, T aspect, T zNear, T zFar)
|
|
|
{
|
|
{
|
|
|
assert(abs(aspect - std::numeric_limits<T>::epsilon()) > static_cast<T>(0));
|
|
assert(abs(aspect - std::numeric_limits<T>::epsilon()) > static_cast<T>(0));
|
|
|
|
|
|
|
@@ -311,12 +278,7 @@ namespace glm
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template <typename T>
|
|
template <typename T>
|
|
|
- GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> perspectiveLH
|
|
|
|
|
- (
|
|
|
|
|
- T fovy,
|
|
|
|
|
- T aspect,
|
|
|
|
|
- T zNear, T zFar
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> perspectiveLH(T fovy, T aspect, T zNear, T zFar)
|
|
|
{
|
|
{
|
|
|
assert(abs(aspect - std::numeric_limits<T>::epsilon()) > static_cast<T>(0));
|
|
assert(abs(aspect - std::numeric_limits<T>::epsilon()) > static_cast<T>(0));
|
|
|
|
|
|
|
@@ -339,12 +301,7 @@ namespace glm
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template <typename T>
|
|
template <typename T>
|
|
|
- GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> perspectiveFov
|
|
|
|
|
- (
|
|
|
|
|
- T fov,
|
|
|
|
|
- T width, T height,
|
|
|
|
|
- T zNear, T zFar
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> perspectiveFov(T fov, T width, T height, T zNear, T zFar)
|
|
|
{
|
|
{
|
|
|
# if GLM_COORDINATE_SYSTEM == GLM_LEFT_HANDED
|
|
# if GLM_COORDINATE_SYSTEM == GLM_LEFT_HANDED
|
|
|
return perspectiveFovLH(fov, width, height, zNear, zFar);
|
|
return perspectiveFovLH(fov, width, height, zNear, zFar);
|
|
@@ -354,12 +311,7 @@ namespace glm
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template <typename T>
|
|
template <typename T>
|
|
|
- GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> perspectiveFovRH
|
|
|
|
|
- (
|
|
|
|
|
- T fov,
|
|
|
|
|
- T width, T height,
|
|
|
|
|
- T zNear, T zFar
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> perspectiveFovRH(T fov, T width, T height, T zNear, T zFar)
|
|
|
{
|
|
{
|
|
|
assert(width > static_cast<T>(0));
|
|
assert(width > static_cast<T>(0));
|
|
|
assert(height > static_cast<T>(0));
|
|
assert(height > static_cast<T>(0));
|
|
@@ -386,12 +338,7 @@ namespace glm
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template <typename T>
|
|
template <typename T>
|
|
|
- GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> perspectiveFovLH
|
|
|
|
|
- (
|
|
|
|
|
- T fov,
|
|
|
|
|
- T width, T height,
|
|
|
|
|
- T zNear, T zFar
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> perspectiveFovLH(T fov, T width, T height, T zNear, T zFar)
|
|
|
{
|
|
{
|
|
|
assert(width > static_cast<T>(0));
|
|
assert(width > static_cast<T>(0));
|
|
|
assert(height > static_cast<T>(0));
|
|
assert(height > static_cast<T>(0));
|
|
@@ -418,12 +365,7 @@ namespace glm
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template <typename T>
|
|
template <typename T>
|
|
|
- GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> infinitePerspective
|
|
|
|
|
- (
|
|
|
|
|
- T fovy,
|
|
|
|
|
- T aspect,
|
|
|
|
|
- T zNear
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> infinitePerspective(T fovy, T aspect, T zNear)
|
|
|
{
|
|
{
|
|
|
# if GLM_COORDINATE_SYSTEM == GLM_LEFT_HANDED
|
|
# if GLM_COORDINATE_SYSTEM == GLM_LEFT_HANDED
|
|
|
return infinitePerspectiveLH(fovy, aspect, zNear);
|
|
return infinitePerspectiveLH(fovy, aspect, zNear);
|
|
@@ -433,68 +375,52 @@ namespace glm
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template <typename T>
|
|
template <typename T>
|
|
|
- GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> infinitePerspectiveRH
|
|
|
|
|
- (
|
|
|
|
|
- T fovy,
|
|
|
|
|
- T aspect,
|
|
|
|
|
- T zNear
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> infinitePerspectiveRH(T fovy, T aspect, T zNear)
|
|
|
{
|
|
{
|
|
|
- T const range = tan(fovy / T(2)) * zNear;
|
|
|
|
|
|
|
+ T const range = tan(fovy / static_cast<T>(2)) * zNear;
|
|
|
T const left = -range * aspect;
|
|
T const left = -range * aspect;
|
|
|
T const right = range * aspect;
|
|
T const right = range * aspect;
|
|
|
T const bottom = -range;
|
|
T const bottom = -range;
|
|
|
T const top = range;
|
|
T const top = range;
|
|
|
|
|
|
|
|
- tmat4x4<T, defaultp> Result(T(0));
|
|
|
|
|
- Result[0][0] = (T(2) * zNear) / (right - left);
|
|
|
|
|
- Result[1][1] = (T(2) * zNear) / (top - bottom);
|
|
|
|
|
- Result[2][2] = - T(1);
|
|
|
|
|
- Result[2][3] = - T(1);
|
|
|
|
|
- Result[3][2] = - T(2) * zNear;
|
|
|
|
|
|
|
+ tmat4x4<T, defaultp> Result(static_cast<T>(0));
|
|
|
|
|
+ Result[0][0] = (static_cast<T>(2) * zNear) / (right - left);
|
|
|
|
|
+ Result[1][1] = (static_cast<T>(2) * zNear) / (top - bottom);
|
|
|
|
|
+ Result[2][2] = - static_cast<T>(1);
|
|
|
|
|
+ Result[2][3] = - static_cast<T>(1);
|
|
|
|
|
+ Result[3][2] = - static_cast<T>(2) * zNear;
|
|
|
return Result;
|
|
return Result;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template <typename T>
|
|
template <typename T>
|
|
|
- GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> infinitePerspectiveLH
|
|
|
|
|
- (
|
|
|
|
|
- T fovy,
|
|
|
|
|
- T aspect,
|
|
|
|
|
- T zNear
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> infinitePerspectiveLH(T fovy, T aspect, T zNear)
|
|
|
{
|
|
{
|
|
|
- T const range = tan(fovy / T(2)) * zNear;
|
|
|
|
|
|
|
+ T const range = tan(fovy / static_cast<T>(2)) * zNear;
|
|
|
T const left = -range * aspect;
|
|
T const left = -range * aspect;
|
|
|
T const right = range * aspect;
|
|
T const right = range * aspect;
|
|
|
T const bottom = -range;
|
|
T const bottom = -range;
|
|
|
T const top = range;
|
|
T const top = range;
|
|
|
|
|
|
|
|
tmat4x4<T, defaultp> Result(T(0));
|
|
tmat4x4<T, defaultp> Result(T(0));
|
|
|
- Result[0][0] = (T(2) * zNear) / (right - left);
|
|
|
|
|
- Result[1][1] = (T(2) * zNear) / (top - bottom);
|
|
|
|
|
- Result[2][2] = T(1);
|
|
|
|
|
- Result[2][3] = T(1);
|
|
|
|
|
- Result[3][2] = - T(2) * zNear;
|
|
|
|
|
|
|
+ Result[0][0] = (static_cast<T>(2) * zNear) / (right - left);
|
|
|
|
|
+ Result[1][1] = (static_cast<T>(2) * zNear) / (top - bottom);
|
|
|
|
|
+ Result[2][2] = static_cast<T>(1);
|
|
|
|
|
+ Result[2][3] = static_cast<T>(1);
|
|
|
|
|
+ Result[3][2] = - static_cast<T>(2) * zNear;
|
|
|
return Result;
|
|
return Result;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Infinite projection matrix: http://www.terathon.com/gdc07_lengyel.pdf
|
|
// Infinite projection matrix: http://www.terathon.com/gdc07_lengyel.pdf
|
|
|
template <typename T>
|
|
template <typename T>
|
|
|
- GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> tweakedInfinitePerspective
|
|
|
|
|
- (
|
|
|
|
|
- T fovy,
|
|
|
|
|
- T aspect,
|
|
|
|
|
- T zNear,
|
|
|
|
|
- T ep
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> tweakedInfinitePerspective(T fovy, T aspect, T zNear, T ep)
|
|
|
{
|
|
{
|
|
|
- T const range = tan(fovy / T(2)) * zNear;
|
|
|
|
|
|
|
+ T const range = tan(fovy / static_cast<T>(2)) * zNear;
|
|
|
T const left = -range * aspect;
|
|
T const left = -range * aspect;
|
|
|
T const right = range * aspect;
|
|
T const right = range * aspect;
|
|
|
T const bottom = -range;
|
|
T const bottom = -range;
|
|
|
T const top = range;
|
|
T const top = range;
|
|
|
|
|
|
|
|
- tmat4x4<T, defaultp> Result(T(0));
|
|
|
|
|
|
|
+ tmat4x4<T, defaultp> Result(static_cast<T>(0));
|
|
|
Result[0][0] = (static_cast<T>(2) * zNear) / (right - left);
|
|
Result[0][0] = (static_cast<T>(2) * zNear) / (right - left);
|
|
|
Result[1][1] = (static_cast<T>(2) * zNear) / (top - bottom);
|
|
Result[1][1] = (static_cast<T>(2) * zNear) / (top - bottom);
|
|
|
Result[2][2] = ep - static_cast<T>(1);
|
|
Result[2][2] = ep - static_cast<T>(1);
|
|
@@ -504,12 +430,7 @@ namespace glm
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template <typename T>
|
|
template <typename T>
|
|
|
- GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> tweakedInfinitePerspective
|
|
|
|
|
- (
|
|
|
|
|
- T fovy,
|
|
|
|
|
- T aspect,
|
|
|
|
|
- T zNear
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ GLM_FUNC_QUALIFIER tmat4x4<T, defaultp> tweakedInfinitePerspective(T fovy, T aspect, T zNear)
|
|
|
{
|
|
{
|
|
|
return tweakedInfinitePerspective(fovy, aspect, zNear, epsilon<T>());
|
|
return tweakedInfinitePerspective(fovy, aspect, zNear, epsilon<T>());
|
|
|
}
|
|
}
|
|
@@ -523,16 +444,16 @@ namespace glm
|
|
|
tvec4<U, P> const & viewport
|
|
tvec4<U, P> const & viewport
|
|
|
)
|
|
)
|
|
|
{
|
|
{
|
|
|
- tvec4<T, P> tmp = tvec4<T, P>(obj, T(1));
|
|
|
|
|
|
|
+ tvec4<T, P> tmp = tvec4<T, P>(obj, static_cast<T>(1));
|
|
|
tmp = model * tmp;
|
|
tmp = model * tmp;
|
|
|
tmp = proj * tmp;
|
|
tmp = proj * tmp;
|
|
|
|
|
|
|
|
tmp /= tmp.w;
|
|
tmp /= tmp.w;
|
|
|
# if GLM_DEPTH_CLIP_SPACE == GLM_DEPTH_ZERO_TO_ONE
|
|
# if GLM_DEPTH_CLIP_SPACE == GLM_DEPTH_ZERO_TO_ONE
|
|
|
- tmp.x = tmp.x * T(0.5) + T(0.5);
|
|
|
|
|
- tmp.y = tmp.y * T(0.5) + T(0.5);
|
|
|
|
|
|
|
+ tmp.x = tmp.x * static_cast<T>(0.5) + static_cast<T>(0.5);
|
|
|
|
|
+ tmp.y = tmp.y * static_cast<T>(0.5) + static_cast<T>(0.5);
|
|
|
# else
|
|
# else
|
|
|
- tmp = tmp * T(0.5) + T(0.5);
|
|
|
|
|
|
|
+ tmp = tmp * static_cast<T>(0.5) + static_cast<T>(0.5);
|
|
|
# endif
|
|
# endif
|
|
|
tmp[0] = tmp[0] * T(viewport[2]) + T(viewport[0]);
|
|
tmp[0] = tmp[0] * T(viewport[2]) + T(viewport[0]);
|
|
|
tmp[1] = tmp[1] * T(viewport[3]) + T(viewport[1]);
|
|
tmp[1] = tmp[1] * T(viewport[3]) + T(viewport[1]);
|
|
@@ -555,10 +476,10 @@ namespace glm
|
|
|
tmp.x = (tmp.x - T(viewport[0])) / T(viewport[2]);
|
|
tmp.x = (tmp.x - T(viewport[0])) / T(viewport[2]);
|
|
|
tmp.y = (tmp.y - T(viewport[1])) / T(viewport[3]);
|
|
tmp.y = (tmp.y - T(viewport[1])) / T(viewport[3]);
|
|
|
# if GLM_DEPTH_CLIP_SPACE == GLM_DEPTH_ZERO_TO_ONE
|
|
# if GLM_DEPTH_CLIP_SPACE == GLM_DEPTH_ZERO_TO_ONE
|
|
|
- tmp.x = tmp.x * T(2) - T(1);
|
|
|
|
|
- tmp.y = tmp.y * T(2) - T(1);
|
|
|
|
|
|
|
+ tmp.x = tmp.x * static_cast<T>(2) - static_cast<T>(1);
|
|
|
|
|
+ tmp.y = tmp.y * static_cast<T>(2) - static_cast<T>(1);
|
|
|
# else
|
|
# else
|
|
|
- tmp = tmp * T(2) - T(1);
|
|
|
|
|
|
|
+ tmp = tmp * static_cast<T>(2) - static_cast<T>(1);
|
|
|
# endif
|
|
# endif
|
|
|
|
|
|
|
|
tvec4<T, P> obj = Inverse * tmp;
|
|
tvec4<T, P> obj = Inverse * tmp;
|
|
@@ -568,36 +489,26 @@ namespace glm
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template <typename T, precision P, typename U>
|
|
template <typename T, precision P, typename U>
|
|
|
- GLM_FUNC_QUALIFIER tmat4x4<T, P> pickMatrix
|
|
|
|
|
- (
|
|
|
|
|
- tvec2<T, P> const & center,
|
|
|
|
|
- tvec2<T, P> const & delta,
|
|
|
|
|
- tvec4<U, P> const & viewport
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> pickMatrix(tvec2<T, P> const & center, tvec2<T, P> const & delta, tvec4<U, P> const & viewport)
|
|
|
{
|
|
{
|
|
|
- assert(delta.x > T(0) && delta.y > T(0));
|
|
|
|
|
- tmat4x4<T, P> Result(1.0f);
|
|
|
|
|
|
|
+ assert(delta.x > static_cast<T>(0) && delta.y > static_cast<T>(0));
|
|
|
|
|
+ tmat4x4<T, P> Result(static_cast<T>(1));
|
|
|
|
|
|
|
|
- if(!(delta.x > T(0) && delta.y > T(0)))
|
|
|
|
|
|
|
+ if(!(delta.x > static_cast<T>(0) && delta.y > static_cast<T>(0)))
|
|
|
return Result; // Error
|
|
return Result; // Error
|
|
|
|
|
|
|
|
tvec3<T, P> Temp(
|
|
tvec3<T, P> Temp(
|
|
|
- (T(viewport[2]) - T(2) * (center.x - T(viewport[0]))) / delta.x,
|
|
|
|
|
- (T(viewport[3]) - T(2) * (center.y - T(viewport[1]))) / delta.y,
|
|
|
|
|
- T(0));
|
|
|
|
|
|
|
+ (static_cast<T>(viewport[2]) - static_cast<T>(2) * (center.x - static_cast<T>(viewport[0]))) / delta.x,
|
|
|
|
|
+ (static_cast<T>(viewport[3]) - static_cast<T>(2) * (center.y - static_cast<T>(viewport[1]))) / delta.y,
|
|
|
|
|
+ static_cast<T>(0));
|
|
|
|
|
|
|
|
// Translate and scale the picked region to the entire window
|
|
// Translate and scale the picked region to the entire window
|
|
|
Result = translate(Result, Temp);
|
|
Result = translate(Result, Temp);
|
|
|
- return scale(Result, tvec3<T, P>(T(viewport[2]) / delta.x, T(viewport[3]) / delta.y, T(1)));
|
|
|
|
|
|
|
+ return scale(Result, tvec3<T, P>(static_cast<T>(viewport[2]) / delta.x, static_cast<T>(viewport[3]) / delta.y, static_cast<T>(1)));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
template <typename T, precision P>
|
|
template <typename T, precision P>
|
|
|
- GLM_FUNC_QUALIFIER tmat4x4<T, P> lookAt
|
|
|
|
|
- (
|
|
|
|
|
- tvec3<T, P> const & eye,
|
|
|
|
|
- tvec3<T, P> const & center,
|
|
|
|
|
- tvec3<T, P> const & up
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ GLM_FUNC_QUALIFIER tmat4x4<T, P> lookAt(tvec3<T, P> const & eye, tvec3<T, P> const & center, tvec3<T, P> const & up)
|
|
|
{
|
|
{
|
|
|
# if GLM_COORDINATE_SYSTEM == GLM_LEFT_HANDED
|
|
# if GLM_COORDINATE_SYSTEM == GLM_LEFT_HANDED
|
|
|
return lookAtLH(eye, center, up);
|
|
return lookAtLH(eye, center, up);
|