brender-v1.3.2/core/inc/mscimath.h
2022-05-03 13:10:51 -07:00

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