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