Bill Currie
54b4d589aa
Split up mathlib.h into several smaller headers.
...
This should make maintaining them a little easier.
The copyright block in most of the new headers (execpt vector.h) reflect
when the functions in the relevant header were first created.
2012-08-19 17:39:09 +09:00
Bill Currie
6f484ee757
Add support and tests for 3x3 matrices.
2012-08-18 16:29:57 +09:00
Bill Currie
848db2e306
Correct a comment.
...
The shear factors were listed next to scale... a tad confusing.
2012-08-04 10:47:46 +09:00
Bill Currie
b5add680f7
Add Mat4as3MultVec.
...
to transform a vertex without the translation (eg, for normals) without
having to have separate matrices.
2012-05-20 15:20:18 +09:00
Bill Currie
6ace105e31
Fix some macro parenthesis issues.
2012-05-19 21:25:58 +09:00
Bill Currie
02f8aa6b75
Add Mat4MultAdd macro.
2012-05-17 15:56:01 +09:00
Bill Currie
c694b9f77e
Add Mat4Blend macro.
2012-05-15 21:08:46 +09:00
Bill Currie
9a3206795e
Add VectorUnshear().
...
VectorUnshear uses the exact same shear vector to remove shear from a
sheared vector. ie with:
VectorShear (shear, v, w);
VectorUnshear (shear, w, x);
x == v within fp math limits.
2012-05-15 21:08:44 +09:00
Bill Currie
9f253454e4
Implement and test Mat4Inverse().
2012-05-15 21:08:44 +09:00
Bill Currie
fa6270322f
Make Mat4Decompose a little more intuitive.
...
Params are now in application order (good thing not much code uses it yet).
2012-05-15 21:08:44 +09:00
Bill Currie
1473dbd526
Add a comment about the evaluation order in VectorShear.
2012-05-15 21:08:44 +09:00
Bill Currie
de131c18ad
Add VectorShear and really test Mat4Decompose.
...
And the tests really exercised VectorShear (first attempt had things
messed up when more than one shear value was non-zero). Also,
Mat4Decompose wasn't orthogonalizing the z axis row. Oops. Anyway,
Mat4Decompose is now known to work well, and the usage of its output is
understood :)
2012-05-15 21:08:44 +09:00
Bill Currie
82abd5e426
More matrix tests.
2012-05-15 21:08:44 +09:00
Bill Currie
730f9668bd
Add support for mat4 * vec3
2012-05-15 21:08:44 +09:00
Bill Currie
50af8a562e
Add tests for matrix decomposition and fix the bugs.
2012-05-15 21:08:44 +09:00
Bill Currie
724427a976
Add component-wise vector and quaternion division.
...
Mostly for non-uniform scaling.
2012-05-15 21:08:44 +09:00
Bill Currie
215d2e9747
Add a function to decompose a matrix.
...
The function gives rotation(quaternion), scale, shear, and translation (all
three as vectors), shear is (XY, XZ, YZ).
2012-05-15 21:08:44 +09:00
Bill Currie
890223ef8e
Correct the definition of DualQuatNorm.
...
I'd gotten the norm and magnitude mixed up (partly because the document I
was following got the names mixed up), and then munged the formulas
together.
2012-05-15 21:08:43 +09:00
Bill Currie
f874aeb941
Add support for duals and dual quaternions.
...
Not everything is unit-tested, but the currently important stuff is.
2012-05-15 21:08:43 +09:00
Bill Currie
8791b35e55
Add support for half floats.
...
iqm and OpenGL use them, so they might come in handy. The tests use values
from wikipedia and a couple extra.
2012-04-26 20:55:11 +09:00
Bill Currie
efaef89c5f
Add a shortcut function for quaterion/vector multiplication.
...
I got the idea from blender when I discovered by accident that quat * vect
produces the same result as quat * qvect * quat* and looked up the code to
check what was going on. While matrix/vector multiplication still beats the
pants off quaternion/vector multiplication, QuatMultVec is a slight
optimization over quat * qvect * quat* (17+,24* vs 24+,32*, plus no need to
to generate quat*).
2012-04-26 09:48:08 +09:00
Bill Currie
bc1b483525
Nuke the rcsid stuff.
...
It's pretty useless in git.
2012-04-22 10:56:32 +09:00
Bill Currie
cbd13ac54e
Implement QuatExp and fix up QuatBlend's param names.
2012-01-12 21:22:06 +09:00
Bill Currie
ea2ae1436c
Fix some bugs in the new matrix functions/macros.
2011-12-31 13:20:31 +09:00
Bill Currie
35bf957d08
Add a 4x4 matrix type and some functions for it.
2011-12-30 20:11:53 +09:00
Bill Currie
edb05fdfce
Rename Vector3Scale and QuatCompScale.
...
They are now VectorCompMult and QuatCompMult.
2011-12-30 20:04:55 +09:00
Bill Currie
b96ca6f0e0
Add QuatCompScale and fix a bug in QuatScale.
2011-12-28 08:59:52 +09:00
Bill Currie
ce8c2e717a
Add some more vector/quat component macros.
2011-12-24 20:10:37 +09:00
Bill Currie
cc5140e3a1
Move min/max/bound and field_offset into better locations.
...
min/max bound into mathlib.h (they /are/ math functions, after all) and
field_offset into qtypes.h.
2011-12-24 10:04:33 +09:00
Bill Currie
8b78aeb666
Add component-wise vector and quaternion comparison macros.
...
Also, re-implement VectorCompare and QuatCompare using the new macros.
VectorCompCompare and QuatCompCompare take a parameter specifying the
comparison operator to use. All component-wise comparisons must be true
for the whole comparison to be true.
2011-12-22 16:54:21 +09:00
Bill Currie
b38cb1e221
Create some nicer docs for AngleVectors.
2011-12-13 14:15:03 +09:00
Bill Currie
3a386293fc
Add Vector3Scale macro.
...
Vector3Scale individually scales the components of one vector by the
components of another vector.
2011-11-28 20:56:19 +09:00
Bill Currie
91e65b6c80
Rename mplane_t to plane_t and clean up the mess.
...
I got rather tired of there being multiple definitions of mostly compatible
plane types (and I need a common type anyway). dplane_t still exists for
now because I want to be careful when messing with the actual bsp format.
2011-11-28 20:54:34 +09:00
Bill Currie
94362cc010
Add macros to ease printing of vectors and quaternions.
...
I got sick of having to pass all those parameters to printf. Let the
compiler do it for me.
2011-09-07 09:41:06 +09:00
Bill Currie
12e238f806
Add a function to convert quake angles to a quaternion.
...
The test works by comparing the result of AngleVectors with forward,
right, and up vectors rotated by the quaternion resulting from AngleQuat.
2011-09-04 09:58:12 +09:00
Bill Currie
eb205d73fd
Add a function to convert a quaternion to a rotation matrix.
2011-09-04 09:58:12 +09:00
Bill Currie
a59fee5346
Add the QuatSet macro.
...
Same as the VectorSet macro.
2011-09-04 09:58:11 +09:00
Bill Currie
d638fdce83
Add a PlaneFlip macro.
2011-05-07 19:29:03 +09:00
Bill Currie
33db650161
Add QuatInverse to calculate 1/q.
...
There's still no direct quaternion division because I don't know if the
definition of q1/q2 is (1/q2)*q1 or q1*(1/q2) (it does make a difference).
2011-01-18 22:22:18 +09:00
Bill Currie
13503198e5
Add quat_origin convenience constant.
...
Same as vec3_origin in that all elements are zero.
2011-01-11 08:41:40 +09:00
Bill Currie
8808eba3ff
add VectorSet macro
...
VectorSet(a,b,c,d) -> vec3_t d = (a, b, c)
This should be useful.
2010-10-13 20:52:05 +09:00
Brian Koropoff
fc293864dc
Fix visibility of VectorNormalize and other math functions
2007-03-17 21:06:00 +00:00
Bill Currie
99c0954b47
the big dso visibility patch :). Sure, we have to have unique names for static builds, but with controlled visibitly we should get faster program loads (although this isn't C++, so it's not as bad) and complex plugins are cleaner.
2007-03-10 12:00:59 +00:00
Bill Currie
6fbddc3d43
so that's the right way to do groups and subgroups...
2006-12-05 11:40:00 +00:00
Bill Currie
8770df39e5
start documenting things (progs building still borked)
...
This is an imperfect revision of history.
2004-11-08 23:27:00 +00:00
Bill Currie
39685d0c63
more readability and add the quaternion functions
2004-04-07 18:01:45 +00:00
Bill Currie
524c02e97a
make the vector macros more readable
2004-04-07 02:29:41 +00:00
Bill Currie
ff5b215c13
multi statement macro fixes as pointed out by Grievre
2004-03-16 04:15:07 +00:00
Ragnvald Maartmann-Moe IV
29502c8f5a
Lots of optimizations, particularly for GL state changes, and tweak lighting a
...
bit more.
Also a cleanup from Grievre: Use VectorIsZero in two places in gl_mod_alias.c.
2004-03-15 21:32:19 +00:00
Bill Currie
19ef80c555
this should fix static win32 builds
2004-01-21 00:15:35 +00:00