projects
/
vg.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fixed nan propogation error
[vg.git]
/
vg_m.h
diff --git
a/vg_m.h
b/vg_m.h
index c07f38984e07ada336ffe5c8328fef6649a3243a..833f1f01598a628a4c09df3c873c1a7cef7a3644 100644
(file)
--- a/
vg_m.h
+++ b/
vg_m.h
@@
-573,11
+573,15
@@
static inline void q_mul( v4f q, v4f q1, v4f d )
static inline void q_normalize( v4f q )
{
static inline void q_normalize( v4f q )
{
- f32 s = 1.0f/ sqrtf(v4_dot(q,q));
- q[0] *= s;
- q[1] *= s;
- q[2] *= s;
- q[3] *= s;
+ f32 l2 = v4_dot(q,q);
+ if( l2 < 0.00001f ) q_identity( q );
+ else {
+ f32 s = 1.0f/sqrtf(l2);
+ q[0] *= s;
+ q[1] *= s;
+ q[2] *= s;
+ q[3] *= s;
+ }
}
static inline void q_inv( v4f q, v4f d )
}
static inline void q_inv( v4f q, v4f d )
@@
-2160,7
+2164,7
@@
static void vg_rand_seed( unsigned long seed )
* Programming," Vol. 2 (2nd Ed.) pp.102.
*/
vg_rand.mt[0] = seed & 0xffffffff;
* Programming," Vol. 2 (2nd Ed.) pp.102.
*/
vg_rand.mt[0] = seed & 0xffffffff;
- for( vg_rand.index=1; vg_rand.index<MT_STATE_VECTOR_LENGTH; vg_rand.index++
){
+ for( vg_rand.index=1; vg_rand.index<MT_STATE_VECTOR_LENGTH; vg_rand.index++){
vg_rand.mt[vg_rand.index] =
(6069 * vg_rand.mt[vg_rand.index-1]) & 0xffffffff;
}
vg_rand.mt[vg_rand.index] =
(6069 * vg_rand.mt[vg_rand.index-1]) & 0xffffffff;
}