24#ifndef __TR_EXTRAMATH_H__
25#define __TR_EXTRAMATH_H__
27typedef vec_t mat4_t[16];
28typedef int ivec2_t[2];
29typedef int ivec3_t[3];
30typedef int ivec4_t[4];
32void Mat4Zero( mat4_t out );
33void Mat4Identity( mat4_t out );
34void Mat4Copy(
const mat4_t in, mat4_t out );
35void Mat4Multiply(
const mat4_t in1,
const mat4_t in2, mat4_t out );
36void Mat4Transform(
const mat4_t in1,
const vec4_t in2, vec4_t out );
37qboolean Mat4Compare(
const mat4_t a,
const mat4_t b);
38void Mat4Dump(
const mat4_t in );
39void Mat4Translation( vec3_t vec, mat4_t out );
40void Mat4Ortho(
float left,
float right,
float bottom,
float top,
float znear,
float zfar, mat4_t out );
41void Mat4View(vec3_t axes[3], vec3_t origin, mat4_t out);
42void Mat4SimpleInverse(
const mat4_t in, mat4_t out);
44#define VectorCopy2(a,b) ((b)[0]=(a)[0],(b)[1]=(a)[1])
45#define VectorSet2(v,x,y) ((v)[0]=(x),(v)[1]=(y));
47#define VectorCopy4(a,b) ((b)[0]=(a)[0],(b)[1]=(a)[1],(b)[2]=(a)[2],(b)[3]=(a)[3])
48#define VectorSet4(v,x,y,z,w) ((v)[0]=(x),(v)[1]=(y),(v)[2]=(z),(v)[3]=(w))
49#define DotProduct4(a,b) ((a)[0]*(b)[0] + (a)[1]*(b)[1] + (a)[2]*(b)[2] + (a)[3]*(b)[3])
50#define VectorScale4(a,b,c) ((c)[0]=(a)[0]*(b),(c)[1]=(a)[1]*(b),(c)[2]=(a)[2]*(b),(c)[3]=(a)[3]*(b))
52#define VectorCopy5(a,b) ((b)[0]=(a)[0],(b)[1]=(a)[1],(b)[2]=(a)[2],(b)[3]=(a)[3],(b)[4]=(a)[4])
54#define OffsetByteToFloat(a) ((float)(a) * 1.0f/127.5f - 1.0f)
55#define FloatToOffsetByte(a) (byte)((a) * 127.5f + 128.0f)
56#define ByteToFloat(a) ((float)(a) * 1.0f/255.0f)
57#define FloatToByte(a) (byte)((a) * 255.0f)
59static ID_INLINE
int VectorCompare4(
const vec4_t v1,
const vec4_t v2)
61 if(v1[0] != v2[0] || v1[1] != v2[1] || v1[2] != v2[2] || v1[3] != v2[3])
68static ID_INLINE
int VectorCompare5(
const vec5_t v1,
const vec5_t v2)
70 if(v1[0] != v2[0] || v1[1] != v2[1] || v1[2] != v2[2] || v1[3] != v2[3] || v1[4] != v2[4])
77void VectorLerp( vec3_t a, vec3_t b,
float lerp, vec3_t c);
80qboolean SpheresIntersect(vec3_t origin1,
float radius1, vec3_t origin2,
float radius2);
81void BoundingSphereOfSpheres(vec3_t origin1,
float radius1, vec3_t origin2,
float radius2, vec3_t origin3,
float *radius3);
84#define SGN(x) (((x) >= 0) ? !!(x) : -1)
88#define MAX(a,b) ((a) > (b) ? (a) : (b))
92#define MIN(a,b) ((a) < (b) ? (a) : (b))
96#define CLAMP(a,b,c) MIN(MAX((a),(b)),(c))
99int NextPowerOfTwo(
int in);
100unsigned short FloatToHalf(
float in);
101float HalfToFloat(
unsigned short in);