projects
/
vg.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
replace VG_STATIC -> static
[vg.git]
/
vg_m.h
diff --git
a/vg_m.h
b/vg_m.h
index 91282f0f3d25e90249e97ac8cd052c83e52f3938..c753be797bc9e1da62b96c29ead2e8e800f7f0b9 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
@@
-1568,7
+1589,7
@@
static inline f64 plane_polarity( f64 p[4], f64 a[3] )
* These closest point tests were learned from Real-Time Collision Detection by
* Christer Ericson
*/
* These closest point tests were learned from Real-Time Collision Detection by
* Christer Ericson
*/
-
VG_STATIC
f32 closest_segment_segment( v3f p1, v3f q1, v3f p2, v3f q2,
+
static
f32 closest_segment_segment( v3f p1, v3f q1, v3f p2, v3f q2,
f32 *s, f32 *t, v3f c1, v3f c2)
{
v3f d1,d2,r;
f32 *s, f32 *t, v3f c1, v3f c2)
{
v3f d1,d2,r;
@@
-1645,7
+1666,7
@@
VG_STATIC f32 closest_segment_segment( v3f p1, v3f q1, v3f p2, v3f q2,
return v3_length2( v0 );
}
return v3_length2( v0 );
}
-
VG_STATIC
int point_inside_aabb( boxf box, v3f point )
+
static
int point_inside_aabb( boxf box, v3f point )
{
if((point[0]<=box[1][0]) && (point[1]<=box[1][1]) && (point[2]<=box[1][2]) &&
(point[0]>=box[0][0]) && (point[1]>=box[0][1]) && (point[2]>=box[0][2]) )
{
if((point[0]<=box[1][0]) && (point[1]<=box[1][1]) && (point[2]<=box[1][2]) &&
(point[0]>=box[0][0]) && (point[1]>=box[0][1]) && (point[2]>=box[0][2]) )
@@
-1654,13
+1675,13
@@
VG_STATIC int point_inside_aabb( boxf box, v3f point )
return 0;
}
return 0;
}
-
VG_STATIC
void closest_point_aabb( v3f p, boxf box, v3f dest )
+
static
void closest_point_aabb( v3f p, boxf box, v3f dest )
{
v3_maxv( p, box[0], dest );
v3_minv( dest, box[1], dest );
}
{
v3_maxv( p, box[0], dest );
v3_minv( dest, box[1], dest );
}
-
VG_STATIC
void closest_point_obb( v3f p, boxf box,
+
static
void closest_point_obb( v3f p, boxf box,
m4x3f mtx, m4x3f inv_mtx, v3f dest )
{
v3f local;
m4x3f mtx, m4x3f inv_mtx, v3f dest )
{
v3f local;
@@
-1669,7
+1690,7
@@
VG_STATIC void closest_point_obb( v3f p, boxf box,
m4x3_mulv( mtx, local, dest );
}
m4x3_mulv( mtx, local, dest );
}
-
VG_STATIC
f32 closest_point_segment( v3f a, v3f b, v3f point, v3f dest )
+
static
f32 closest_point_segment( v3f a, v3f b, v3f point, v3f dest )
{
v3f v0, v1;
v3_sub( b, a, v0 );
{
v3f v0, v1;
v3_sub( b, a, v0 );
@@
-1681,7
+1702,7
@@
VG_STATIC f32 closest_point_segment( v3f a, v3f b, v3f point, v3f dest )
return t;
}
return t;
}
-
VG_STATIC
void closest_on_triangle( v3f p, v3f tri[3], v3f dest )
+
static
void closest_on_triangle( v3f p, v3f tri[3], v3f dest )
{
v3f ab, ac, ap;
f32 d1, d2;
{
v3f ab, ac, ap;
f32 d1, d2;
@@
-1777,7
+1798,7
@@
enum contact_type
k_contact_type_edge
};
k_contact_type_edge
};
-
VG_STATIC
enum contact_type closest_on_triangle_1( v3f p, v3f tri[3], v3f dest )
+
static
enum contact_type closest_on_triangle_1( v3f p, v3f tri[3], v3f dest )
{
v3f ab, ac, ap;
f32 d1, d2;
{
v3f ab, ac, ap;
f32 d1, d2;