X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=libs%2Fcgmath%2Fcgmmisc.inl;h=0def7274810db70d1fc4b79cdec3a89b0d8e638d;hb=81dffafe4b045c854d8a97f9c6c41877ee7669ca;hp=2ef8a11b3ae9d010eb5a83c78dcfeb541951c6e0;hpb=7fccf8b3543c8cdb993252f0cf9a6b9ed826408e;p=retroray diff --git a/libs/cgmath/cgmmisc.inl b/libs/cgmath/cgmmisc.inl index 2ef8a11..0def727 100644 --- a/libs/cgmath/cgmmisc.inl +++ b/libs/cgmath/cgmmisc.inl @@ -1,5 +1,5 @@ /* gph-cmath - C graphics math library - * Copyright (C) 2018 John Tsiombikas + * Copyright (C) 2018-2023 John Tsiombikas * * This program is free software. Feel free to use, modify, and/or redistribute * it under the terms of the MIT/X11 license. See LICENSE for details. @@ -10,12 +10,12 @@ static CGM_INLINE float cgm_deg_to_rad(float deg) { - return M_PI * deg / 180.0f; + return CGM_PI * deg / 180.0f; } static CGM_INLINE float cgm_rad_to_deg(float rad) { - return 180.0f * rad / M_PI; + return 180.0f * rad / CGM_PI; } static CGM_INLINE float cgm_smoothstep(float a, float b, float x) @@ -87,7 +87,7 @@ static CGM_INLINE float cgm_spline(float a, float b, float c, float d, float t) static CGM_INLINE void cgm_discrand(cgm_vec3 *pt, float rad) { - float theta = 2.0f * M_PI * (float)rand() / RAND_MAX; + float theta = 2.0f * CGM_PI * (float)rand() / RAND_MAX; float r = sqrt((float)rand() / RAND_MAX) * rad; pt->x = cos(theta) * r; pt->y = sin(theta) * r; @@ -101,7 +101,7 @@ static CGM_INLINE void cgm_sphrand(cgm_vec3 *pt, float rad) u = (float)rand() / RAND_MAX; v = (float)rand() / RAND_MAX; - theta = 2.0f * M_PI * u; + theta = 2.0f * CGM_PI * u; phi = acos(2.0f * v - 1.0f); pt->x = cos(theta) * sin(phi) * rad; @@ -133,8 +133,9 @@ static CGM_INLINE void cgm_glu_unproject(float winx, float winy, float winz, cgm_vec3 npos, res; float inv_pv[16]; - cgm_mcopy(inv_pv, proj); - cgm_mmul(inv_pv, view); + cgm_mcopy(inv_pv, view); + cgm_mmul(inv_pv, proj); + cgm_minverse(inv_pv); npos.x = (winx - vp[0]) / vp[2]; npos.y = (winy - vp[1]) / vp[4]; @@ -153,8 +154,9 @@ static CGM_INLINE void cgm_pick_ray(cgm_ray *ray, float nx, float ny, cgm_vec3 npos, farpt; float inv_pv[16]; - cgm_mcopy(inv_pv, projmat); - cgm_mmul(inv_pv, viewmat); + cgm_mcopy(inv_pv, viewmat); + cgm_mmul(inv_pv, projmat); + cgm_minverse(inv_pv); cgm_vcons(&npos, nx, ny, 0.0f); cgm_unproject(&ray->origin, &npos, inv_pv);