openTRI 0.1
triVMath_vfpu.h
1/*
2 * triVMath_vfpu.h: Header for Vector maths using PSP's VFPU
3 * This file is part of the "tri Engine".
4 *
5 * Copyright (C) 2007 tri
6 * Copyright (C) 2007 Alexander Berl 'Raphael' <raphael@fx-world.org>
7 *
8 * $Id: $
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 */
24
25
26#ifndef __TRIVMATH_VFPU_H__
27#define __TRIVMATH_VFPU_H__
28
29
30#include "triTypes.h"
31
32
38triVec2f* triVec2Set( triVec2f* a, const triFloat x, const triFloat y );
39triVec2i* triVec2Ceil( triVec2i* a, const triVec2f* b );
40triVec2i* triVec2Trunc( triVec2i* a, const triVec2f* b );
41triVec2i* triVec2Round( triVec2i* a, const triVec2f* b );
42triVec2i* triVec2Floor( triVec2i* a, const triVec2f* b );
43triVec2f* triVec2i2f( triVec2f* a, const triVec2i* b );
44triVec2f* triVec2Add( triVec2f* a, const triVec2f* b, const triVec2f* c );
45triVec2f* triVec2Sub( triVec2f* a, const triVec2f* b, const triVec2f* c );
46triVec2f* triVec2Mul( triVec2f* a, const triVec2f* b, const triVec2f* c );
47triVec2f* triVec2Div( triVec2f* a, const triVec2f* b, const triVec2f* c );
48triVec2f* triVec2Neg( triVec2f* a, const triVec2f* b );
49triVec2f* triVec2Abs( triVec2f* a, const triVec2f* b );
50triVec2f* triVec2Rndn( triVec2f* a );
51triVec2f* triVec2Rnd( triVec2f* a );
52triVec2f* triVec2Rnd2( triVec2f* a );
53triVec2f* triVec2Clamp( triVec2f* a, const triVec2f* b, triFloat min, triFloat max );
54triVec2f* triVec2Min( triVec2f* a, const triVec2f* b, const triVec2f* c );
55triVec2f* triVec2Max( triVec2f* a, const triVec2f* b, const triVec2f* c );
56triFloat triVec2Sum( const triVec2f* a );
57triFloat triVec2Avg( const triVec2f* a );
58triVec2f* triVec2Sgn( triVec2f* a, const triVec2f* b );
59triVec2f* triVec2Normalize( triVec2f* a, const triVec2f* b );
60triFloat triVec2Length( const triVec2f* a );
61triFloat triVec2SquareLength( const triVec2f* a );
62triFloat triVec2Dist( const triVec2f* a, const triVec2f* b );
63triFloat triVec2SquareDist( const triVec2f* a, const triVec2f* b );
64triVec2f* triVec2Lerp( triVec2f* a, const triVec2f* b, const triVec2f* c, triFloat t );
65triVec2f* triVec2Scale( triVec2f* a, const triVec2f* b, triFloat t );
66triFloat triVec2Dot( const triVec2f* a, const triVec2f* b );
67triVec2f* triVec2Reflect( triVec2f* a, const triVec2f* b, const triVec2f* c );
68triVec2f* triVec2Refract( triVec2f* a, const triVec2f* b, const triVec2f* c, const triFloat eta );
69
70 // End triVec2
71
72
77triVec3f* triVec3Set( triVec3f* a, const triFloat x, const triFloat y, const triFloat z );
78triVec3i* triVec3Ceil( triVec3i* a, const triVec3f* b );
79triVec3i* triVec3Trunc( triVec3i* a, const triVec3f* b );
80triVec3i* triVec3Round( triVec3i* a, const triVec3f* b );
81triVec3i* triVec3Floor( triVec3i* a, const triVec3f* b );
82triVec3f* triVec3i2f( triVec3f* a, const triVec3i* b );
83triVec3f* triVec3Add( triVec3f* a, const triVec3f* b, const triVec3f* c );
84triVec3f* triVec3Sub( triVec3f* a, const triVec3f* b, const triVec3f* c );
85triVec3f* triVec3Mul( triVec3f* a, const triVec3f* b, const triVec3f* c );
86triVec3f* triVec3Div( triVec3f* a, const triVec3f* b, const triVec3f* c );
87triVec3f* triVec3Neg( triVec3f* a, const triVec3f* b );
88triVec3f* triVec3Abs( triVec3f* a, const triVec3f* b );
89triVec3f* triVec3Rndn( triVec3f* a );
90triVec3f* triVec3Rnd( triVec3f* a );
91triVec3f* triVec3Rnd2( triVec3f* a );
92triVec3f* triVec3Clamp( triVec3f* a, const triVec3f* b, triFloat min, triFloat max );
93triVec3f* triVec3Min( triVec3f* a, const triVec3f* b, const triVec3f* c );
94triVec3f* triVec3Max( triVec3f* a, const triVec3f* b, const triVec3f* c );
95triFloat triVec3Sum( const triVec3f* a );
96triFloat triVec3Avg( const triVec3f* a );
97triVec3f* triVec3Sgn( triVec3f* a, const triVec3f* b );
98triVec3f* triVec3Normalize( triVec3f* a, const triVec3f* b );
99triFloat triVec3Length( const triVec3f* a );
100triFloat triVec3SquareLength( const triVec3f* a );
101triFloat triVec3Dist( const triVec3f* a, const triVec3f* b );
102triFloat triVec3SquareDist( const triVec3f* a, const triVec3f* b );
103triVec3f* triVec3Lerp( triVec3f* a, const triVec3f* b, const triVec3f* c, triFloat t );
104triVec3f* triVec3Scale( triVec3f* a, const triVec3f* b, triFloat t );
105triFloat triVec3Dot( const triVec3f* a, const triVec3f* b );
106triVec3f* triVec3Cross( triVec3f* a, const triVec3f* b, const triVec3f* c );
107triVec3f* triVec3Reflect( triVec3f* a, const triVec3f* b, const triVec3f* c );
108triVec3f* triVec3Refract( triVec3f* a, const triVec3f* b, const triVec3f* c, const triFloat eta );
109
110
111 // End triVec3
112
113
119triVec4f* triVec4Set( triVec4f* a, const triFloat x, const triFloat y, const triFloat z, const triFloat w );
120triVec4f* triVec4Set3( triVec4f* a, const triFloat x, const triFloat y, const triFloat z );
121triVec4i* triVec4Ceil( triVec4i* a, const triVec4f* b );
122triVec4i* triVec4Trunc( triVec4i* a, const triVec4f* b );
123triVec4i* triVec4Round( triVec4i* a, const triVec4f* b );
124triVec4i* triVec4Floor( triVec4i* a, const triVec4f* b );
125triVec4f* triVec4i2f( triVec4f* a, const triVec4i* b );
126
127
135
142
149
156
164triVec4f* triVec4Add( triVec4f* a, const triVec4f* b, const triVec4f* c );
165
174triVec4f* triVec4Add3( triVec4f* a, const triVec4f* b, const triVec4f* c );
175
183triVec4f* triVec4Sub( triVec4f* a, const triVec4f* b, const triVec4f* c );
184
193triVec4f* triVec4Sub3( triVec4f* a, const triVec4f* b, const triVec4f* c );
194
202triVec4f* triVec4Mul( triVec4f* a, const triVec4f* b, const triVec4f* c );
203
212triVec4f* triVec4Mul3( triVec4f* a, const triVec4f* b, const triVec4f* c );
213
221triVec4f* triVec4Div( triVec4f* a, const triVec4f* b, const triVec4f* c );
222
231triVec4f* triVec4Div3( triVec4f* a, const triVec4f* b, const triVec4f* c );
232
240
249
257
266triVec4f* triVec4Clamp( triVec4f* a, const triVec4f* b, triFloat min, triFloat max );
267
276triVec4f* triVec4Clamp3( triVec4f* a, const triVec4f* b, triFloat min, triFloat max );
277
285triVec4f* triVec4Min( triVec4f* a, const triVec4f* b, const triVec4f* c );
286
294triVec4f* triVec4Max( triVec4f* a, const triVec4f* b, const triVec4f* c );
295
301triFloat triVec4Sum( const triVec4f* a );
302
309triFloat triVec4Sum3( const triVec4f* a );
310
316triFloat triVec4Avg( const triVec4f* a );
317
324triFloat triVec4Avg3( const triVec4f* a );
325
333
341
350
356triFloat triVec4Length( const triVec4f* a );
357
364triFloat triVec4Length3( const triVec4f* a );
365
371triFloat triVec4SquareLength( const triVec4f* a );
372
379triFloat triVec4SquareLength3( const triVec4f* a );
380
387triFloat triVec4Dist( const triVec4f* a, const triVec4f* b );
388
396triFloat triVec4Dist3( const triVec4f* a, const triVec4f* b );
397
404triFloat triVec4SquareDist( const triVec4f* a, const triVec4f* b );
405
413triFloat triVec4SquareDist3( const triVec4f* a, const triVec4f* b );
414
423triVec4f* triVec4Lerp( triVec4f* a, const triVec4f* b, const triVec4f* c, triFloat t );
424
434triVec4f* triVec4Lerp3( triVec4f* a, const triVec4f* b, const triVec4f* c, triFloat t );
435
443triVec4f* triVec4Scale( triVec4f* a, const triVec4f* b, triFloat t );
444
453triVec4f* triVec4Scale3( triVec4f* a, const triVec4f* b, triFloat t );
454
461triFloat triVec4Dot( const triVec4f* a, const triVec4f* b );
462
470triFloat triVec4Dot3( const triVec4f* a, const triVec4f* b );
471
480triVec4f* triVec4Cross( triVec4f* a, const triVec4f* b, const triVec4f* c );
481
492
502triVec4f* triVec4Refract( triVec4f* a, const triVec4f* b, const triVec4f* c, const triFloat eta );
503
504 // End triVec3
505
506
522
533
540
547triMat4f* triMat4Mul( triMat4f* a, const triMat4f* b, const triMat4f* c );
548
556
563
568triFloat triMat4Det( const triMat4f* a );
569
574triFloat triMat4Trace( const triMat4f* a );
575
582triVec4f* triMat4Apply( triVec4f* a, const triMat4f* b, const triVec4f* c );
583
593
594 // End triMat
595
596
597
598
608
615
622
630
637triQuat* triQuatAdd(triQuat* a, const triQuat* b, const triQuat* c);
638
645triQuat* triQuatSub(triQuat* a, const triQuat* b, const triQuat* c);
646
653triQuat* triQuatMul(triQuat* a, const triQuat* b, const triQuat* c);
654
660triFloat triQuatInnerProduct(const triQuat* a, const triQuat* b);
661
669triQuat* triQuatNLerp(triQuat* a, const triQuat* b, const triQuat* c, triFloat t);
670
678triQuat* triQuatSLerp(triQuat* a, const triQuat* b, const triQuat* c, triFloat t);
679
691 const triQuat* d, const triQuat* e, triFloat t);
692
699
706
713
720triQuat* triQuatFromRotate(triQuat* a, triFloat angle, const triVec4f* b);
721
722 // End triQuat
723
724
725
726triColor4f* triColor4Set( triColor4f* c, const triFloat r, const triFloat g, const triFloat b, const triFloat a );
727triColor4f* triColor4Set3( triColor4f* c, const triFloat r, const triFloat g, const triFloat b );
728triColor4f* triColor4From4i( triColor4f* a, triColor4i* b );
729triColor4f* triColor4From8888( triColor4f* a, triColor8888* b );
730triU32 triColor4f2RGBA8888( triColor4f* a );
731
732
733#endif // __TRIVMATH_VFPU_H__
triMat4f * triMat4Zero(triMat4f *a)
Make a matrix zero.
triMat4f * triMat4Inv(triMat4f *a, const triMat4f *b)
Invert a matrix.
triVec4f * triMat4Apply(triVec4f *a, const triMat4f *b, const triVec4f *c)
4x4 Matrix-Vector multiply (a = b*c).
triMat4f * triMat4Mul(triMat4f *a, const triMat4f *b, const triMat4f *c)
Matrix multiply (a = b*c).
triFloat triMat4Trace(const triMat4f *a)
Calculate matrix trace.
triVec4f * triMat4Apply3(triVec4f *a, const triMat4f *b, const triVec4f *c)
3x3 Matrix-Vector multiply (a = b*c).
triMat4f * triMat4Trans(triMat4f *a, const triMat4f *b)
Transpose a matrix.
triFloat triMat4Det(const triMat4f *a)
Calculate matrix determinant.
triMat4f * triMat4Copy(triMat4f *a, const triMat4f *b)
Copy a matrix.
triMat4f * triMat4Identity(triMat4f *a)
Make a matrix identity.
triQuat * triQuatSLerp(triQuat *a, const triQuat *b, const triQuat *c, triFloat t)
Spherical interpolation of quaternions.
triVec4f * triQuatApply(triVec4f *a, const triQuat *b, const triVec4f *c)
Apply quaternion to vector.
triQuat * triQuatMul(triQuat *a, const triQuat *b, const triQuat *c)
Multiply quaternions.
triQuat * triQuatSquad(triQuat *a, const triQuat *b, const triQuat *c, const triQuat *d, const triQuat *e, triFloat t)
Cubical interpolation of quaternions.
triQuat * triQuatAdd(triQuat *a, const triQuat *b, const triQuat *c)
Add quaternions.
triMat4f * triQuatToMatrix(triMat4f *a, const triQuat *b)
Convert quaternion to matrix.
triQuat * triQuatFromRotate(triQuat *a, triFloat angle, const triVec4f *b)
Make quaternion from axis rotation.
triFloat triQuatInnerProduct(const triQuat *a, const triQuat *b)
Quaternion innerproduct (dotproduct).
triQuat * triQuatNormalize(triQuat *a, const triQuat *b)
Normalize quaternion.
triQuat * triQuatSub(triQuat *a, const triQuat *b, const triQuat *c)
Subtract quaternions.
triQuat * triQuatNLerp(triQuat *a, const triQuat *b, const triQuat *c, triFloat t)
Normal (linear) interpolation of quaternions.
triQuat * triQuatCopy(triQuat *a, const triQuat *b)
Copy quaternion.
triQuat * triQuatInverse(triQuat *a, const triQuat *b)
Inverse quaternion (normalize(-x,-y,-z,w)).
triQuat * triQuatConj(triQuat *a, const triQuat *b)
Conjugate quaternion (-x,-y,-z,-w).
triQuat * triQuatUnit(triQuat *a)
Make unit quaternion (0,0,0,1).
triFloat triVec4Avg(const triVec4f *a)
Average of components.
triVec4f * triVec4Reflect(triVec4f *a, const triVec4f *b, const triVec4f *c)
Reflect Vector.
triFloat triVec4SquareLength3(const triVec4f *a)
Square length of Vector.
triVec4f * triVec4Neg(triVec4f *a, const triVec4f *b)
Negate Vector.
triVec4f * triVec4Max(triVec4f *a, const triVec4f *b, const triVec4f *c)
Maximum of Vectors.
triFloat triVec4Length(const triVec4f *a)
Length of Vector.
triVec4f * triVec4Mul(triVec4f *a, const triVec4f *b, const triVec4f *c)
Multiply Vectors.
triVec4f * triVec4Sgn(triVec4f *a, const triVec4f *b)
Vector sign.
triFloat triVec4Dot3(const triVec4f *a, const triVec4f *b)
Calculate Vector dotproduct.
triVec4f * triVec4Add3(triVec4f *a, const triVec4f *b, const triVec4f *c)
Add Vectors.
triFloat triVec4Sum3(const triVec4f *a)
Sum of components.
triVec4f * triVec4Add(triVec4f *a, const triVec4f *b, const triVec4f *c)
Add Vectors.
triFloat triVec4Dist(const triVec4f *a, const triVec4f *b)
Distance between Vectors.
triVec4f * triVec4Normalize(triVec4f *a, const triVec4f *b)
Normalize Vector.
triFloat triVec4SquareLength(const triVec4f *a)
Square length of Vector.
triVec4f * triVec4Rndn(triVec4f *a)
Random normal vector.
triVec4f * triVec4Abs(triVec4f *a, const triVec4f *b)
Absolute of Vector.
triVec4f * triVec4Div3(triVec4f *a, const triVec4f *b, const triVec4f *c)
Divide Vectors.
triVec4f * triVec4Neg3(triVec4f *a, const triVec4f *b)
Negate Vector.
triVec4f * triVec4Sub(triVec4f *a, const triVec4f *b, const triVec4f *c)
Subtract Vectors.
triVec4f * triVec4Rnd(triVec4f *a)
Random vector.
triVec4f * triVec4Div(triVec4f *a, const triVec4f *b, const triVec4f *c)
Divide Vectors.
triFloat triVec4SquareDist3(const triVec4f *a, const triVec4f *b)
Square distance between Vectors.
triFloat triVec4Dot(const triVec4f *a, const triVec4f *b)
Calculate Vector dotproduct.
triVec4f * triVec4Refract(triVec4f *a, const triVec4f *b, const triVec4f *c, const triFloat eta)
Refract Vector.
triVec4f * triVec4Sub3(triVec4f *a, const triVec4f *b, const triVec4f *c)
Subtract Vectors.
triFloat triVec4Length3(const triVec4f *a)
Length of Vector.
triVec4f * triVec4Mul3(triVec4f *a, const triVec4f *b, const triVec4f *c)
Multiply Vectors.
triVec4f * triVec4Rnd2(triVec4f *a)
Random vector.
triVec4f * triVec4Lerp(triVec4f *a, const triVec4f *b, const triVec4f *c, triFloat t)
Linear interpolate between Vectors.
triVec4f * triVec4Clamp(triVec4f *a, const triVec4f *b, triFloat min, triFloat max)
Clamp Vector.
triVec4f * triVec4Clamp3(triVec4f *a, const triVec4f *b, triFloat min, triFloat max)
Clamp Vector.
triFloat triVec4Sum(const triVec4f *a)
Sum of components.
triVec4f * triVec4Scale3(triVec4f *a, const triVec4f *b, triFloat t)
Scale Vector.
triVec4f * triVec4Normalize3(triVec4f *a, const triVec4f *b)
Normalize Vector.
triVec4f * triVec4Cross(triVec4f *a, const triVec4f *b, const triVec4f *c)
Calculate Vector crossproduct.
triFloat triVec4Dist3(const triVec4f *a, const triVec4f *b)
Distance between Vectors.
triFloat triVec4SquareDist(const triVec4f *a, const triVec4f *b)
Square distance between Vectors.
triVec4f * triVec4Min(triVec4f *a, const triVec4f *b, const triVec4f *c)
Minimum of Vectors.
triVec4f * triVec4Lerp3(triVec4f *a, const triVec4f *b, const triVec4f *c, triFloat t)
Linear interpolate between Vectors.
triFloat triVec4Avg3(const triVec4f *a)
Average of components.
triVec4f * triVec4Rndn3(triVec4f *a)
Random normal vector.
triVec4f * triVec4Scale(triVec4f *a, const triVec4f *b, triFloat t)
Scale Vector.
RGBA float color (128bit)
Definition triTypes.h:319
RGBA int color (128bit)
Definition triTypes.h:328
2D signed int Vector
Definition triTypes.h:94
2D float Vector
Definition triTypes.h:85
3D signed int Vector
Definition triTypes.h:165
3D float Vector
Definition triTypes.h:156
4D signed int Vector (quaternion)
Definition triTypes.h:237
4D float Vector (quaternion)
Definition triTypes.h:228
RGBA8888 color (32bit)
Definition triTypes.h:348
4D (4x4) Matrix
Definition triTypes.h:426