projects
/
vg.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
various
[vg.git]
/
vg_m.h
diff --git
a/vg_m.h
b/vg_m.h
index 91282f0f3d25e90249e97ac8cd052c83e52f3938..090c4873ed723ad90244e8786842d047fa808a32 100644
(file)
--- a/
vg_m.h
+++ b/
vg_m.h
@@
-710,6
+710,16
@@
static inline void m2x2_create_rotation( m2x2f a, f32 theta )
a[1][1] = c;
}
a[1][1] = c;
}
+static inline void m2x2_mulv( m2x2f m, v2f v, v2f d )
+{
+ v2f res;
+
+ res[0] = m[0][0]*v[0] + m[1][0]*v[1];
+ res[1] = m[0][1]*v[0] + m[1][1]*v[1];
+
+ v2_copy( res, d );
+}
+
/*
* -----------------------------------------------------------------------------
* Section 4.b 3x3 matrices
/*
* -----------------------------------------------------------------------------
* Section 4.b 3x3 matrices
@@
-1536,7
+1546,7
@@
int plane_intersect2( v4f a, v4f b, v3f p, v3f n )
static int plane_segment( v4f plane, v3f a, v3f b, v3f co )
{
f32 d0 = v3_dot( a, plane ) - plane[3],
static int plane_segment( v4f plane, v3f a, v3f b, v3f co )
{
f32 d0 = v3_dot( a, plane ) - plane[3],
-
d1 = v3_dot( b, plane ) - plane[3];
+ d1 = v3_dot( b, plane ) - plane[3];
if( d0*d1 < 0.0f )
{
if( d0*d1 < 0.0f )
{
@@
-1558,6
+1568,17
@@
static inline f64 plane_polarity( f64 p[4], f64 a[3] )
;
}
;
}
+static f32 ray_plane( v4f plane, v3f co, v3f dir ){
+ f32 d = v3_dot( plane, dir );
+ if( fabsf(d) > 1e-6f ){
+ v3f v0;
+ v3_muls( plane, plane[3], v0 );
+ v3_sub( v0, co, v0 );
+ return v3_dot( v0, plane ) / d;
+ }
+ else return INFINITY;
+}
+
/*
* -----------------------------------------------------------------------------
* Section 5.c Closest point functions
/*
* -----------------------------------------------------------------------------
* Section 5.c Closest point functions