217 lines
5.5 KiB
C
217 lines
5.5 KiB
C
/*
|
|
* Copyright (c) 1992,1993-1995 by Argonaut Technologies Limited. All rights reserved.
|
|
*
|
|
* $Id: mscimath.h 1.1 1998/11/12 12:53:47 johng Exp $
|
|
* $Locker: $
|
|
*
|
|
* Inline fixed point ops for Microsoft Visual C++
|
|
*
|
|
*/
|
|
#if BASED_FLOAT
|
|
|
|
#pragma warning( disable : 4035 )
|
|
|
|
__inline void VCIMatrix34PreRotateX(br_matrix34 *mat, br_angle rx){
|
|
float s,c;
|
|
float t0,t1,t2;
|
|
|
|
s=BR_SIN(rx);
|
|
c=BR_COS(rx);
|
|
|
|
t0=mat->m[1][0];
|
|
t1=mat->m[1][1];
|
|
t2=mat->m[1][2];
|
|
|
|
mat->m[1][0]=c*mat->m[1][0]+s*mat->m[2][0];
|
|
mat->m[1][1]=c*mat->m[1][1]+s*mat->m[2][1];
|
|
mat->m[1][2]=c*mat->m[1][2]+s*mat->m[2][2];
|
|
|
|
mat->m[2][0]=-s*t0+c*mat->m[2][0];
|
|
mat->m[2][1]=-s*t1+c*mat->m[2][1];
|
|
mat->m[2][2]=-s*t2+c*mat->m[2][2];
|
|
}
|
|
|
|
__inline void VCIMatrix34PostRotateX(br_matrix34 *mat, br_angle rx){
|
|
float s,c;
|
|
float t0,t1,t2,t3;
|
|
|
|
s=BR_SIN(rx);
|
|
c=BR_COS(rx);
|
|
|
|
t0=mat->m[0][1];
|
|
t1=mat->m[1][1];
|
|
t2=mat->m[2][1];
|
|
t3=mat->m[3][1];
|
|
|
|
mat->m[0][1]=c*mat->m[0][1]-s*mat->m[0][2];
|
|
mat->m[1][1]=c*mat->m[1][1]-s*mat->m[1][2];
|
|
mat->m[2][1]=c*mat->m[2][1]-s*mat->m[2][2];
|
|
mat->m[3][1]=c*mat->m[3][1]-s*mat->m[3][2];
|
|
|
|
mat->m[0][2]=s*t0+c*mat->m[0][2];
|
|
mat->m[1][2]=s*t1+c*mat->m[1][2];
|
|
mat->m[2][2]=s*t2+c*mat->m[2][2];
|
|
mat->m[3][2]=s*t3+c*mat->m[3][2];
|
|
}
|
|
|
|
__inline void VCIMatrix34PreRotateY(br_matrix34 *mat, br_angle ry){
|
|
float s,c;
|
|
float t0,t1,t2;
|
|
|
|
s=BR_SIN(ry);
|
|
c=BR_COS(ry);
|
|
|
|
t0=mat->m[0][0];
|
|
t1=mat->m[0][1];
|
|
t2=mat->m[0][2];
|
|
|
|
mat->m[0][0]=c*mat->m[0][0]-s*mat->m[2][0];
|
|
mat->m[0][1]=c*mat->m[0][1]-s*mat->m[2][1];
|
|
mat->m[0][2]=c*mat->m[0][2]-s*mat->m[2][2];
|
|
|
|
mat->m[2][0]=s*t0+c*mat->m[2][0];
|
|
mat->m[2][1]=s*t1+c*mat->m[2][1];
|
|
mat->m[2][2]=s*t2+c*mat->m[2][2];
|
|
}
|
|
|
|
__inline void VCIMatrix34PostRotateY(br_matrix34 *mat, br_angle ry){
|
|
float s,c;
|
|
float t0,t1,t2,t3;
|
|
|
|
s=BR_SIN(ry);
|
|
c=BR_COS(ry);
|
|
|
|
t0=mat->m[0][0];
|
|
t1=mat->m[1][0];
|
|
t2=mat->m[2][0];
|
|
t3=mat->m[3][0];
|
|
|
|
mat->m[0][0]=c*mat->m[0][0]+s*mat->m[0][2];
|
|
mat->m[1][0]=c*mat->m[1][0]+s*mat->m[1][2];
|
|
mat->m[2][0]=c*mat->m[2][0]+s*mat->m[2][2];
|
|
mat->m[3][0]=c*mat->m[3][0]+s*mat->m[3][2];
|
|
|
|
mat->m[0][2]=-s*t0+c*mat->m[0][2];
|
|
mat->m[1][2]=-s*t1+c*mat->m[1][2];
|
|
mat->m[2][2]=-s*t2+c*mat->m[2][2];
|
|
mat->m[3][2]=-s*t3+c*mat->m[3][2];
|
|
}
|
|
|
|
__inline void VCIMatrix34PreRotateZ(br_matrix34 *mat, br_angle rz){
|
|
float s,c;
|
|
float t0,t1,t2;
|
|
|
|
s=BR_SIN(rz);
|
|
c=BR_COS(rz);
|
|
|
|
t0=mat->m[0][0];
|
|
t1=mat->m[0][1];
|
|
t2=mat->m[0][2];
|
|
|
|
mat->m[0][0]=c*mat->m[0][0]+s*mat->m[1][0];
|
|
mat->m[0][1]=c*mat->m[0][1]+s*mat->m[1][1];
|
|
mat->m[0][2]=c*mat->m[0][2]+s*mat->m[1][2];
|
|
|
|
mat->m[1][0]=-s*t0+c*mat->m[1][0];
|
|
mat->m[1][1]=-s*t1+c*mat->m[1][1];
|
|
mat->m[1][2]=-s*t2+c*mat->m[1][2];
|
|
}
|
|
|
|
__inline void VCIMatrix34PostRotateZ(br_matrix34 *mat, br_angle rz){
|
|
float s,c;
|
|
float t0,t1,t2,t3;
|
|
|
|
s=BR_SIN(rz);
|
|
c=BR_COS(rz);
|
|
|
|
t0=mat->m[0][0];
|
|
t1=mat->m[1][0];
|
|
t2=mat->m[2][0];
|
|
t3=mat->m[3][0];
|
|
|
|
mat->m[0][0]=c*mat->m[0][0]-s*mat->m[0][1];
|
|
mat->m[1][0]=c*mat->m[1][0]-s*mat->m[1][1];
|
|
mat->m[2][0]=c*mat->m[2][0]-s*mat->m[2][1];
|
|
mat->m[3][0]=c*mat->m[3][0]-s*mat->m[3][1];
|
|
|
|
mat->m[0][1]=s*t0+c*mat->m[0][1];
|
|
mat->m[1][1]=s*t1+c*mat->m[1][1];
|
|
mat->m[2][1]=s*t2+c*mat->m[2][1];
|
|
mat->m[3][1]=s*t3+c*mat->m[3][1];
|
|
}
|
|
|
|
__inline void VCIMatrix34PostTranslate(br_matrix34 *mat, br_scalar x, br_scalar y, br_scalar z){
|
|
mat->m[3][0]+=x;
|
|
mat->m[3][1]+=y;
|
|
mat->m[3][2]+=z;
|
|
}
|
|
|
|
__inline void VCIMatrix34PreScale(br_matrix34 *mat, br_scalar sx, br_scalar sy, br_scalar sz){
|
|
mat->m[0][0]*=sx;
|
|
mat->m[0][1]*=sx;
|
|
mat->m[0][2]*=sx;
|
|
|
|
mat->m[1][0]*=sy;
|
|
mat->m[1][1]*=sy;
|
|
mat->m[1][2]*=sy;
|
|
|
|
mat->m[2][0]*=sz;
|
|
mat->m[2][1]*=sz;
|
|
mat->m[2][2]*=sz;
|
|
}
|
|
|
|
__inline void VCIMatrix34PostScale(br_matrix34 *mat, br_scalar sx, br_scalar sy, br_scalar sz){
|
|
mat->m[0][0]*=sx;
|
|
mat->m[1][0]*=sx;
|
|
mat->m[2][0]*=sx;
|
|
mat->m[3][0]*=sx;
|
|
|
|
mat->m[0][1]*=sy;
|
|
mat->m[1][1]*=sy;
|
|
mat->m[2][1]*=sy;
|
|
mat->m[3][1]*=sy;
|
|
|
|
mat->m[0][2]*=sz;
|
|
mat->m[1][2]*=sz;
|
|
mat->m[2][2]*=sz;
|
|
mat->m[3][2]*=sz;
|
|
|
|
}
|
|
|
|
void __inline VCIMatrix34ApplyV(br_vector3 *A, br_vector3 *B, br_matrix34 *C)
|
|
{
|
|
A->v[0] = BR_MAC3(B->v[0],C->m[0][0], B->v[1],C->m[1][0], B->v[2],C->m[2][0]);
|
|
A->v[1] = BR_MAC3(B->v[0],C->m[0][1], B->v[1],C->m[1][1], B->v[2],C->m[2][1]);
|
|
A->v[2] = BR_MAC3(B->v[0],C->m[0][2], B->v[1],C->m[1][2], B->v[2],C->m[2][2]);
|
|
}
|
|
|
|
void __inline VCIMatrix34ApplyP(br_vector3 *A, br_vector3 *B, br_matrix34 *C)
|
|
{
|
|
A->v[0] = BR_MAC3(B->v[0],C->m[0][0], B->v[1],C->m[1][0], B->v[2],C->m[2][0]) + C->m[3][0];
|
|
A->v[1] = BR_MAC3(B->v[0],C->m[0][1], B->v[1],C->m[1][1], B->v[2],C->m[2][1]) + C->m[3][1];
|
|
A->v[2] = BR_MAC3(B->v[0],C->m[0][2], B->v[1],C->m[1][2], B->v[2],C->m[2][2]) + C->m[3][2];
|
|
}
|
|
|
|
void __inline VCIMatrix23ApplyP(br_vector2 *A, br_vector2 *B, br_matrix23 *C)
|
|
{
|
|
A->v[0] = BR_MAC2(B->v[0],C->m[0][0], B->v[1],C->m[1][0]) + C->m[2][0];
|
|
A->v[1] = BR_MAC2(B->v[0],C->m[0][1], B->v[1],C->m[1][1]) + C->m[2][1];
|
|
}
|
|
|
|
#pragma warning( default : 4035 )
|
|
|
|
#define BrMatrix34PreRotateX(a,b) VCIMatrix34PreRotateX(a,b)
|
|
#define BrMatrix34PostRotateX(a,b) VCIMatrix34PostRotateX(a,b)
|
|
#define BrMatrix34PreRotateY(a,b) VCIMatrix34PreRotateY(a,b)
|
|
#define BrMatrix34PostRotateY(a,b) VCIMatrix34PostRotateY(a,b)
|
|
#define BrMatrix34PreRotateZ(a,b) VCIMatrix34PreRotateZ(a,b)
|
|
#define BrMatrix34PostRotateZ(a,b) VCIMatrix34PostRotateZ(a,b)
|
|
#define BrMatrix34PostTranslate(a,b,c,d) VCIMatrix34PostTranslate(a,b,c,d)
|
|
#define BrMatrix34PreScale(a,b,c,d) VCIMatrix34PreScale(a,b,c,d)
|
|
#define BrMatrix34PostScale(a,b,c,d) VCIMatrix34PostScale(a,b,c,d)
|
|
#define BrMatrix34ApplyV(a,b,c) VCIMatrix34ApplyV(a,b,c)
|
|
#define BrMatrix34ApplyP(a,b,c) VCIMatrix34ApplyP(a,b,c)
|
|
#define BrMatrix23ApplyP(a,b,c) VCIMatrix23ApplyP(a,b,c)
|
|
|
|
#endif
|
|
|