mirror of
https://github.com/g-truc/glm.git
synced 2024-11-26 02:04:35 +00:00
Fixed ticket #153, vector and matrix queries
This commit is contained in:
parent
dd244d8d25
commit
7ff95df5e6
@ -4,6 +4,7 @@
|
|||||||
<downloads>
|
<downloads>
|
||||||
<section name="GLM - zip files">
|
<section name="GLM - zip files">
|
||||||
<download name="GLM 0.9.2.7" date="24/10/2011" size="3.4 MB" link="https://sourceforge.net/projects/ogl-math/files/glm-0.9.2.7/glm-0.9.2.7.zip/download"/>
|
<download name="GLM 0.9.2.7" date="24/10/2011" size="3.4 MB" link="https://sourceforge.net/projects/ogl-math/files/glm-0.9.2.7/glm-0.9.2.7.zip/download"/>
|
||||||
|
<download name="GLM 0.9.3.B" date="06/12/2011" size="4.3 MB" link="https://sourceforge.net/projects/ogl-math/files/glm-0.9.3.B/glm-0.9.3.B.zip/download"/>
|
||||||
<download name="GLM 0.9.3.A" date="11/11/2011" size="4.3 MB" link="https://sourceforge.net/projects/ogl-math/files/glm-0.9.3.A/glm-0.9.3.A.zip/download"/>
|
<download name="GLM 0.9.3.A" date="11/11/2011" size="4.3 MB" link="https://sourceforge.net/projects/ogl-math/files/glm-0.9.3.A/glm-0.9.3.A.zip/download"/>
|
||||||
<download name="GLM 0.9.2.6" date="01/10/2011" size="3.4 MB" link="https://sourceforge.net/projects/ogl-math/files/glm-0.9.2.6/glm-0.9.2.6.zip/download"/>
|
<download name="GLM 0.9.2.6" date="01/10/2011" size="3.4 MB" link="https://sourceforge.net/projects/ogl-math/files/glm-0.9.2.6/glm-0.9.2.6.zip/download"/>
|
||||||
<download name="GLM 0.9.2.5" date="20/09/2011" size="3.4 MB" link="https://sourceforge.net/projects/ogl-math/files/glm-0.9.2.5/glm-0.9.2.5.zip/download"/>
|
<download name="GLM 0.9.2.5" date="20/09/2011" size="3.4 MB" link="https://sourceforge.net/projects/ogl-math/files/glm-0.9.2.5/glm-0.9.2.5.zip/download"/>
|
||||||
@ -72,6 +73,7 @@
|
|||||||
</section>
|
</section>
|
||||||
<section name="GLM - 7z files">
|
<section name="GLM - 7z files">
|
||||||
<download name="GLM 0.9.2.7" date="24/10/2011" size="2.1 MB" link="https://sourceforge.net/projects/ogl-math/files/glm-0.9.2.7/glm-0.9.2.7.7z/download"/>
|
<download name="GLM 0.9.2.7" date="24/10/2011" size="2.1 MB" link="https://sourceforge.net/projects/ogl-math/files/glm-0.9.2.7/glm-0.9.2.7.7z/download"/>
|
||||||
|
<download name="GLM 0.9.3.B" date="06/12/2011" size="2.8 MB" link="https://sourceforge.net/projects/ogl-math/files/glm-0.9.3.B/glm-0.9.3.B.7z/download"/>
|
||||||
<download name="GLM 0.9.3.A" date="11/11/2011" size="2.8 MB" link="https://sourceforge.net/projects/ogl-math/files/glm-0.9.3.A/glm-0.9.3.A.7z/download"/>
|
<download name="GLM 0.9.3.A" date="11/11/2011" size="2.8 MB" link="https://sourceforge.net/projects/ogl-math/files/glm-0.9.3.A/glm-0.9.3.A.7z/download"/>
|
||||||
<download name="GLM 0.9.2.6" date="01/10/2011" size="2.1 MB" link="https://sourceforge.net/projects/ogl-math/files/glm-0.9.2.6/glm-0.9.2.6.7z/download"/>
|
<download name="GLM 0.9.2.6" date="01/10/2011" size="2.1 MB" link="https://sourceforge.net/projects/ogl-math/files/glm-0.9.2.6/glm-0.9.2.6.7z/download"/>
|
||||||
<download name="GLM 0.9.2.5" date="20/09/2011" size="2.1 MB" link="https://sourceforge.net/projects/ogl-math/files/glm-0.9.2.5/glm-0.9.2.5.7z/download"/>
|
<download name="GLM 0.9.2.5" date="20/09/2011" size="2.1 MB" link="https://sourceforge.net/projects/ogl-math/files/glm-0.9.2.5/glm-0.9.2.5.7z/download"/>
|
||||||
@ -166,6 +168,50 @@
|
|||||||
</todo>
|
</todo>
|
||||||
|
|
||||||
<page_news>
|
<page_news>
|
||||||
|
<news index="0074" date="06/12/2011" title="GLM 0.9.3 beta released" image="goodies/logo.png" image-mini="image/logo-mini.png">
|
||||||
|
<paragraph>
|
||||||
|
GLM 0.9.3 is making progress which is illustrated by the release of this first alpha.
|
||||||
|
</paragraph>
|
||||||
|
<list name="Changelog:">
|
||||||
|
<list-element>
|
||||||
|
Improved doxygen documentation
|
||||||
|
</list-element>
|
||||||
|
<list-element>
|
||||||
|
Added new swizzle operators for C++11 compilers
|
||||||
|
</list-element>
|
||||||
|
<list-element>
|
||||||
|
Added new swizzle operators declared as functions
|
||||||
|
</list-element>
|
||||||
|
<list-element>
|
||||||
|
Added GLSL 4.20 length for vector and matrix types
|
||||||
|
</list-element>
|
||||||
|
<list-element>
|
||||||
|
Added GLSL core noise functions
|
||||||
|
</list-element>
|
||||||
|
<list-element>
|
||||||
|
Promoted GLM_GTC_noise extension: simplex, perlin, periodic noise functions
|
||||||
|
</list-element>
|
||||||
|
<list-element>
|
||||||
|
Promoted GLM_GTC_random extension: linear, gaussian and various random number generation distribution
|
||||||
|
</list-element>
|
||||||
|
<list-element>
|
||||||
|
Added GLM_GTX_constants: provides usefull constants
|
||||||
|
</list-element>
|
||||||
|
<list-element>
|
||||||
|
Fixed half based type contructors
|
||||||
|
</list-element>
|
||||||
|
</list>
|
||||||
|
<paragraph>
|
||||||
|
|
||||||
|
</paragraph>
|
||||||
|
|
||||||
|
<source type="Download" href="https://sourceforge.net/projects/ogl-math/files/glm-0.9.3.B/glm-0.9.3.B.zip/download">GLM 0.9.3.B (zip)</source>
|
||||||
|
<source type="Download" href="https://sourceforge.net/projects/ogl-math/files/glm-0.9.3.B/glm-0.9.3.B.7z/download">GLM 0.9.3.B (7z)</source>
|
||||||
|
<source type="Link" href="https://sourceforge.net/apps/trac/ogl-math/newticket">Submit a bug report</source>
|
||||||
|
<source type="Link" href="http://glm.g-truc.net/glm-0.9.3.pdf">GLM 0.9.3 Manual</source>
|
||||||
|
<source type="Link" href="http://glm.g-truc.net/api-0.9.3/index.html">GLM 0.9.3 API</source>
|
||||||
|
</news>
|
||||||
|
|
||||||
<news index="0073" date="11/11/2011" title="GLM 0.9.3 alpha released" image="goodies/logo.png" image-mini="image/logo-mini.png">
|
<news index="0073" date="11/11/2011" title="GLM 0.9.3 alpha released" image="goodies/logo.png" image-mini="image/logo-mini.png">
|
||||||
<paragraph>
|
<paragraph>
|
||||||
GLM 0.9.3 is making progress which is illustrated by the release of this first alpha.
|
GLM 0.9.3 is making progress which is illustrated by the release of this first alpha.
|
||||||
|
@ -58,13 +58,13 @@ namespace glm
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
bool result = true;
|
bool result = true;
|
||||||
for(typename genType::value_type i = typename genType::value_type(0); result && i < genType::col_size(); ++i)
|
for(typename genType::size_type i = typename genType::size_type(0); result && i < genType::col_size(); ++i)
|
||||||
{
|
{
|
||||||
for(typename genType::value_type j = typename genType::value_type(0); result && j < i ; ++j)
|
for(typename genType::size_type j = typename genType::size_type(0); result && j < i ; ++j)
|
||||||
result = abs(m[i][j]) <= epsilon;
|
result = abs(m[i][j]) <= epsilon;
|
||||||
if(result)
|
if(result)
|
||||||
result = abs(m[i][i] - typename genType::value_type(1)) <= epsilon;
|
result = abs(m[i][i] - typename genType::value_type(1)) <= epsilon;
|
||||||
for(typename genType::value_type j = i + typename genType::value_type(1); result && j < genType::row_size(); ++j)
|
for(typename genType::size_type j = i + typename genType::size_type(1); result && j < genType::row_size(); ++j)
|
||||||
result = abs(m[i][j]) <= epsilon;
|
result = abs(m[i][j]) <= epsilon;
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
@ -60,14 +60,6 @@ namespace glm
|
|||||||
genType const & v1,
|
genType const & v1,
|
||||||
typename genType::value_type const & epsilon/* = std::numeric_limits<typename genType::value_type>::epsilon()*/);
|
typename genType::value_type const & epsilon/* = std::numeric_limits<typename genType::value_type>::epsilon()*/);
|
||||||
|
|
||||||
//! Check whether two vectors are opposites.
|
|
||||||
//! From GLM_GTX_vector_query extensions.
|
|
||||||
template <typename genType>
|
|
||||||
bool areOpposite(
|
|
||||||
genType const & v0,
|
|
||||||
genType const & v1,
|
|
||||||
typename genType::value_type const & epsilon/* = std::numeric_limits<typename genType::value_type>::epsilon()*/);
|
|
||||||
|
|
||||||
//! Check whether two vectors are orthogonals.
|
//! Check whether two vectors are orthogonals.
|
||||||
//! From GLM_GTX_vector_query extensions.
|
//! From GLM_GTX_vector_query extensions.
|
||||||
template <typename genType>
|
template <typename genType>
|
||||||
@ -112,14 +104,6 @@ namespace glm
|
|||||||
genType const & v1,
|
genType const & v1,
|
||||||
typename genType::value_type const & epsilon/* = std::numeric_limits<typename genType::value_type>::epsilon()*/);
|
typename genType::value_type const & epsilon/* = std::numeric_limits<typename genType::value_type>::epsilon()*/);
|
||||||
|
|
||||||
//! Check whether two vectors are similar.
|
|
||||||
//! From GLM_GTX_vector_query extensions.
|
|
||||||
template <typename genType>
|
|
||||||
bool areSimilar(
|
|
||||||
genType const & v0,
|
|
||||||
genType const & v1,
|
|
||||||
typename genType::value_type const & epsilon/* = std::numeric_limits<typename genType::value_type>::epsilon()*/);
|
|
||||||
|
|
||||||
/// @}
|
/// @}
|
||||||
}// namespace glm
|
}// namespace glm
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ namespace glm
|
|||||||
(
|
(
|
||||||
detail::tvec2<T> const & v0,
|
detail::tvec2<T> const & v0,
|
||||||
detail::tvec2<T> const & v1,
|
detail::tvec2<T> const & v1,
|
||||||
T const & epsilon
|
typename detail::tvec2<T>::value_type const & epsilon
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return length(cross(detail::tvec3<T>(v0, T(0)), detail::tvec3<T>(v1, T(0)))) < epsilon;
|
return length(cross(detail::tvec3<T>(v0, T(0)), detail::tvec3<T>(v1, T(0)))) < epsilon;
|
||||||
@ -30,7 +30,7 @@ namespace glm
|
|||||||
(
|
(
|
||||||
detail::tvec3<T> const & v0,
|
detail::tvec3<T> const & v0,
|
||||||
detail::tvec3<T> const & v1,
|
detail::tvec3<T> const & v1,
|
||||||
T const & epsilon
|
typename detail::tvec3<T>::value_type const & epsilon
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return length(cross(v0, v1)) < epsilon;
|
return length(cross(v0, v1)) < epsilon;
|
||||||
@ -41,24 +41,12 @@ namespace glm
|
|||||||
(
|
(
|
||||||
detail::tvec4<T> const & v0,
|
detail::tvec4<T> const & v0,
|
||||||
detail::tvec4<T> const & v1,
|
detail::tvec4<T> const & v1,
|
||||||
T const & epsilon
|
typename detail::tvec4<T>::value_type const & epsilon
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return length(cross(detail::tvec3<T>(v0), detail::tvec3<T>(v1))) < epsilon;
|
return length(cross(detail::tvec3<T>(v0), detail::tvec3<T>(v1))) < epsilon;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename genType>
|
|
||||||
GLM_FUNC_QUALIFIER bool areOpposite
|
|
||||||
(
|
|
||||||
genType const & v0,
|
|
||||||
genType const & v1,
|
|
||||||
typename genType::value_type const & epsilon
|
|
||||||
)
|
|
||||||
{
|
|
||||||
assert(isNormalized(v0) && isNormalized(v1));
|
|
||||||
return((typename genType::value_type(1) + dot(v0, v1)) <= epsilon);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename genType>
|
template <typename genType>
|
||||||
GLM_FUNC_QUALIFIER bool areOrthogonal
|
GLM_FUNC_QUALIFIER bool areOrthogonal
|
||||||
(
|
(
|
||||||
@ -173,17 +161,4 @@ namespace glm
|
|||||||
return isNormalized(v0, epsilon) && isNormalized(v1, epsilon) && (abs(dot(v0, v1)) <= epsilon);
|
return isNormalized(v0, epsilon) && isNormalized(v1, epsilon) && (abs(dot(v0, v1)) <= epsilon);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename genType>
|
|
||||||
GLM_FUNC_QUALIFIER bool areSimilar
|
|
||||||
(
|
|
||||||
genType const & v0,
|
|
||||||
genType const & v1,
|
|
||||||
typename genType::value_type const & epsilon
|
|
||||||
)
|
|
||||||
{
|
|
||||||
bool similar = true;
|
|
||||||
for(typename genType::size_type i = 0; similar && i < genType::value_size(); i++)
|
|
||||||
similar = (abs(v0[i] - v1[i]) <= epsilon);
|
|
||||||
return similar;
|
|
||||||
}
|
|
||||||
}//namespace glm
|
}//namespace glm
|
||||||
|
@ -37,11 +37,12 @@ More informations in GLM manual:
|
|||||||
http://glm.g-truc.net/glm-0.9.3.pdf
|
http://glm.g-truc.net/glm-0.9.3.pdf
|
||||||
|
|
||||||
================================================================================
|
================================================================================
|
||||||
GLM 0.9.3.B: 2011-XX-XX
|
GLM 0.9.3.B: 2011-12-06
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
- Added support for Chrone Native Client
|
- Added support for Chrone Native Client
|
||||||
- Added epsilon constant
|
- Added epsilon constant
|
||||||
- Removed value_size function from vector types
|
- Removed value_size function from vector types
|
||||||
|
- Fixed roundEven on GCC
|
||||||
|
|
||||||
================================================================================
|
================================================================================
|
||||||
GLM 0.9.2.8: 2011-12-XX
|
GLM 0.9.2.8: 2011-12-XX
|
||||||
|
@ -20,6 +20,26 @@ int test_isNull()
|
|||||||
return Error;
|
return Error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int test_isIdentity()
|
||||||
|
{
|
||||||
|
int Error(0);
|
||||||
|
|
||||||
|
{
|
||||||
|
bool TestA = glm::isIdentity(glm::mat2(1), 0.00001f);
|
||||||
|
Error += TestA ? 0 : 1;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
bool TestA = glm::isIdentity(glm::mat3(1), 0.00001f);
|
||||||
|
Error += TestA ? 0 : 1;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
bool TestA = glm::isIdentity(glm::mat4(1), 0.00001f);
|
||||||
|
Error += TestA ? 0 : 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Error;
|
||||||
|
}
|
||||||
|
|
||||||
int test_isNormalized()
|
int test_isNormalized()
|
||||||
{
|
{
|
||||||
int Error(0);
|
int Error(0);
|
||||||
@ -45,6 +65,7 @@ int main()
|
|||||||
int Error(0);
|
int Error(0);
|
||||||
|
|
||||||
Error += test_isNull();
|
Error += test_isNull();
|
||||||
|
Error += test_isIdentity();
|
||||||
Error += test_isNormalized();
|
Error += test_isNormalized();
|
||||||
Error += test_isOrthogonal();
|
Error += test_isOrthogonal();
|
||||||
|
|
||||||
|
@ -10,11 +10,33 @@
|
|||||||
#include <glm/glm.hpp>
|
#include <glm/glm.hpp>
|
||||||
#include <glm/gtx/vector_query.hpp>
|
#include <glm/gtx/vector_query.hpp>
|
||||||
|
|
||||||
int test_isNull()
|
int test_areCollinear()
|
||||||
|
{
|
||||||
|
int Error(0);
|
||||||
|
|
||||||
|
{
|
||||||
|
bool TestA = glm::areCollinear(glm::vec2(-1), glm::vec2(1), 0.00001f);
|
||||||
|
Error += TestA ? 0 : 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
bool TestA = glm::areCollinear(glm::vec3(-1), glm::vec3(1), 0.00001f);
|
||||||
|
Error += TestA ? 0 : 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
bool TestA = glm::areCollinear(glm::vec4(-1), glm::vec4(1), 0.00001f);
|
||||||
|
Error += TestA ? 0 : 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Error;
|
||||||
|
}
|
||||||
|
|
||||||
|
int test_areOrthogonal()
|
||||||
{
|
{
|
||||||
int Error(0);
|
int Error(0);
|
||||||
|
|
||||||
bool TestA = glm::isNull(glm::vec4(0), 0.00001f);
|
bool TestA = glm::areOrthogonal(glm::vec2(1, 0), glm::vec2(0, 1), 0.00001f);
|
||||||
Error += TestA ? 0 : 1;
|
Error += TestA ? 0 : 1;
|
||||||
|
|
||||||
return Error;
|
return Error;
|
||||||
@ -30,11 +52,21 @@ int test_isNormalized()
|
|||||||
return Error;
|
return Error;
|
||||||
}
|
}
|
||||||
|
|
||||||
int test_areOrthogonal()
|
int test_isNull()
|
||||||
{
|
{
|
||||||
int Error(0);
|
int Error(0);
|
||||||
|
|
||||||
bool TestA = glm::areOrthogonal(glm::vec2(1, 0), glm::vec2(0, 1), 0.00001f);
|
bool TestA = glm::isNull(glm::vec4(0), 0.00001f);
|
||||||
|
Error += TestA ? 0 : 1;
|
||||||
|
|
||||||
|
return Error;
|
||||||
|
}
|
||||||
|
|
||||||
|
int test_areOrthonormal()
|
||||||
|
{
|
||||||
|
int Error(0);
|
||||||
|
|
||||||
|
bool TestA = glm::areOrthonormal(glm::vec2(1, 0), glm::vec2(0, 1), 0.00001f);
|
||||||
Error += TestA ? 0 : 1;
|
Error += TestA ? 0 : 1;
|
||||||
|
|
||||||
return Error;
|
return Error;
|
||||||
@ -44,9 +76,11 @@ int main()
|
|||||||
{
|
{
|
||||||
int Error(0);
|
int Error(0);
|
||||||
|
|
||||||
Error += test_isNull();
|
Error += test_areCollinear();
|
||||||
Error += test_isNormalized();
|
|
||||||
Error += test_areOrthogonal();
|
Error += test_areOrthogonal();
|
||||||
|
Error += test_isNormalized();
|
||||||
|
Error += test_isNull();
|
||||||
|
Error += test_areOrthonormal();
|
||||||
|
|
||||||
return Error;
|
return Error;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user