mirror of
https://github.com/recp/cglm.git
synced 2026-02-17 03:39:05 +00:00
Compare commits
4 Commits
aabb-spher
...
flt-epsilo
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6626d2b74f | ||
|
|
5bda762df6 | ||
|
|
f9824a8dc6 | ||
|
|
ccd3058adc |
@@ -18,7 +18,7 @@ else(CGLM_STATIC)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(CGLM_USE_C99)
|
if(CGLM_USE_C99)
|
||||||
set(CMAKE_C_STANDARD 99)
|
set(C_STANDARD 99)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
@@ -117,7 +117,6 @@ export(TARGETS ${PROJECT_NAME}
|
|||||||
)
|
)
|
||||||
|
|
||||||
install(EXPORT ${PROJECT_NAME}
|
install(EXPORT ${PROJECT_NAME}
|
||||||
FILE "${PROJECT_NAME}Config.cmake"
|
|
||||||
NAMESPACE ${PROJECT_NAME}::
|
NAMESPACE ${PROJECT_NAME}::
|
||||||
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}/cmake)
|
||||||
|
|
||||||
|
|||||||
@@ -425,7 +425,7 @@ bool
|
|||||||
glm_uniscaled(mat4 m) {
|
glm_uniscaled(mat4 m) {
|
||||||
CGLM_ALIGN(8) vec3 s;
|
CGLM_ALIGN(8) vec3 s;
|
||||||
glm_decompose_scalev(m, s);
|
glm_decompose_scalev(m, s);
|
||||||
return glm_vec3_eq_all(s);
|
return glm_vec3_eq_eps(s, s[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -455,7 +455,7 @@ glm_decompose_rs(mat4 m, mat4 r, vec3 s) {
|
|||||||
glm_vec4_scale(r[1], 1.0f/s[1], r[1]);
|
glm_vec4_scale(r[1], 1.0f/s[1], r[1]);
|
||||||
glm_vec4_scale(r[2], 1.0f/s[2], r[2]);
|
glm_vec4_scale(r[2], 1.0f/s[2], r[2]);
|
||||||
|
|
||||||
/* Note from Apple Open Source (assume that the matrix is orthonormal):
|
/* Note from Apple Open Source (asume that the matrix is orthonormal):
|
||||||
check for a coordinate system flip. If the determinant
|
check for a coordinate system flip. If the determinant
|
||||||
is -1, then negate the matrix and the scaling factors. */
|
is -1, then negate the matrix and the scaling factors. */
|
||||||
glm_vec3_cross(m[0], m[1], v);
|
glm_vec3_cross(m[0], m[1], v);
|
||||||
|
|||||||
@@ -228,8 +228,6 @@ glm_aabb_aabb(vec3 box[2], vec3 other[2]) {
|
|||||||
* https://github.com/erich666/GraphicsGems/blob/master/gems/BoxSphere.c
|
* https://github.com/erich666/GraphicsGems/blob/master/gems/BoxSphere.c
|
||||||
* Solid Box - Solid Sphere test.
|
* Solid Box - Solid Sphere test.
|
||||||
*
|
*
|
||||||
* Sphere Representation in cglm: [center.x, center.y, center.z, radii]
|
|
||||||
*
|
|
||||||
* @param[in] box solid bounding box
|
* @param[in] box solid bounding box
|
||||||
* @param[in] s solid sphere
|
* @param[in] s solid sphere
|
||||||
*/
|
*/
|
||||||
@@ -239,13 +237,13 @@ glm_aabb_sphere(vec3 box[2], vec4 s) {
|
|||||||
float dmin;
|
float dmin;
|
||||||
int a, b, c;
|
int a, b, c;
|
||||||
|
|
||||||
a = (s[0] < box[0][0]) + (s[0] > box[1][0]);
|
a = s[0] >= box[0][0];
|
||||||
b = (s[1] < box[0][1]) + (s[1] > box[1][1]);
|
b = s[1] >= box[0][1];
|
||||||
c = (s[2] < box[0][2]) + (s[2] > box[1][2]);
|
c = s[2] >= box[0][2];
|
||||||
|
|
||||||
dmin = glm_pow2((s[0] - box[!(a - 1)][0]) * (a != 0))
|
dmin = glm_pow2(s[0] - box[a][0])
|
||||||
+ glm_pow2((s[1] - box[!(b - 1)][1]) * (b != 0))
|
+ glm_pow2(s[1] - box[b][1])
|
||||||
+ glm_pow2((s[2] - box[!(c - 1)][2]) * (c != 0));
|
+ glm_pow2(s[2] - box[c][2]);
|
||||||
|
|
||||||
return dmin <= glm_pow2(s[3]);
|
return dmin <= glm_pow2(s[3]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,12 +42,18 @@
|
|||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "simd/intrin.h"
|
#include "simd/intrin.h"
|
||||||
|
|
||||||
#ifndef CGLM_USE_DEFAULT_EPSILON
|
/** CGLM_USE_DEFAULT_EPSILON is removed, to override float epsilon,
|
||||||
# ifndef GLM_FLT_EPSILON
|
* just define GLM_FLT_EPSILON with epsilon value like below
|
||||||
# define GLM_FLT_EPSILON 1e-6
|
*
|
||||||
|
* #define GLM_FLT_EPSILON 1e-6f
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GLM_FLT_EPSILON
|
||||||
|
# ifndef FLT_EPSILON
|
||||||
|
# define GLM_FLT_EPSILON 1e-6f
|
||||||
|
# else
|
||||||
|
# define GLM_FLT_EPSILON FLT_EPSILON
|
||||||
# endif
|
# endif
|
||||||
#else
|
|
||||||
# define GLM_FLT_EPSILON FLT_EPSILON
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* cglm_common_h */
|
#endif /* cglm_common_h */
|
||||||
|
|||||||
@@ -237,9 +237,9 @@ glm_vec3_abs(vec3 v, vec3 dest) {
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec3_fract(vec3 v, vec3 dest) {
|
glm_vec3_fract(vec3 v, vec3 dest) {
|
||||||
dest[0] = fminf(v[0] - floorf(v[0]), 0.999999940395355224609375f);
|
dest[0] = fminf(v[0] - floorf(v[0]), 0x1.fffffep-1f);
|
||||||
dest[1] = fminf(v[1] - floorf(v[1]), 0.999999940395355224609375f);
|
dest[1] = fminf(v[1] - floorf(v[1]), 0x1.fffffep-1f);
|
||||||
dest[2] = fminf(v[2] - floorf(v[2]), 0.999999940395355224609375f);
|
dest[2] = fminf(v[2] - floorf(v[2]), 0x1.fffffep-1f);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|||||||
@@ -268,10 +268,10 @@ glm_vec4_abs(vec4 v, vec4 dest) {
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec4_fract(vec4 v, vec4 dest) {
|
glm_vec4_fract(vec4 v, vec4 dest) {
|
||||||
dest[0] = fminf(v[0] - floorf(v[0]), 0.999999940395355224609375f);
|
dest[0] = fminf(v[0] - floorf(v[0]), 0x1.fffffep-1f);
|
||||||
dest[1] = fminf(v[1] - floorf(v[1]), 0.999999940395355224609375f);
|
dest[1] = fminf(v[1] - floorf(v[1]), 0x1.fffffep-1f);
|
||||||
dest[2] = fminf(v[2] - floorf(v[2]), 0.999999940395355224609375f);
|
dest[2] = fminf(v[2] - floorf(v[2]), 0x1.fffffep-1f);
|
||||||
dest[3] = fminf(v[3] - floorf(v[3]), 0.999999940395355224609375f);
|
dest[3] = fminf(v[3] - floorf(v[3]), 0x1.fffffep-1f);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|||||||
@@ -35,9 +35,9 @@ TEST_IMPL(camera_decomp) {
|
|||||||
farVal = 100.0f;
|
farVal = 100.0f;
|
||||||
|
|
||||||
glm_perspective(fovy, aspect, nearVal, farVal, proj);
|
glm_perspective(fovy, aspect, nearVal, farVal, proj);
|
||||||
ASSERT(fabsf(aspect - glm_persp_aspect(proj)) < GLM_FLT_EPSILON)
|
ASSERT(fabsf(aspect - glm_persp_aspect(proj)) < 1e-5f)
|
||||||
ASSERT(fabsf(fovy - glm_persp_fovy(proj)) < GLM_FLT_EPSILON)
|
ASSERT(fabsf(fovy - glm_persp_fovy(proj)) < 1e-5f)
|
||||||
ASSERT(fabsf(49.984f - glm_deg(glm_persp_fovy(proj))) < GLM_FLT_EPSILON)
|
ASSERT(fabsf(49.984f - glm_deg(glm_persp_fovy(proj))) < 1e-5f)
|
||||||
|
|
||||||
glm_persp_sizes(proj, fovy, sizes);
|
glm_persp_sizes(proj, fovy, sizes);
|
||||||
|
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ test_rand_quat(versor q);
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
bool
|
bool
|
||||||
test_eq(float a, float b) {
|
test_eq(float a, float b) {
|
||||||
return fabsf(a - b) <= GLM_FLT_EPSILON * 10;
|
return fabsf(a - b) <= 1e-5f;
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
|
|||||||
Reference in New Issue
Block a user