📄 math3d.h
字号:
// ==========================================================================================================
//
// BREW v2.0+ OPENGLES MICROENGINE
//
// ----------------------------------------
//
// Written by Vander Nunes
//
// ==========================================================================================================
#ifndef __MATH3D_H__
#define __MATH3D_H__
#include <math.h>
#include "defines.h"
#include "fpsincos.h"
// =========================================================
// FIXED-POINT VECTOR OPERATIONS
// =========================================================
#define DotProduct(x,y) (FPXFP((x)[0],(y)[0])+FPXFP((x)[1],(y)[1])+FPXFP((x)[2],(y)[2]))
#define CrossProduct(v1,v2,cross) ((cross)[0]=FPXFP((v1)[1],(v2)[2])-FPXFP((v1)[2],(v2)[1]),(cross)[1]=FPXFP((v1)[2],(v2)[0])-FPXFP((v1)[0],(v2)[2]),(cross)[2]=FPXFP((v1)[0],(v2)[1])-FPXFP((v1)[1],(v2)[0]))
#define VectorSub(a,b,c) ((c)[0]=(a)[0]-(b)[0],(c)[1]=(a)[1]-(b)[1],(c)[2]=(a)[2]-(b)[2])
#define VectorAdd(a,b,c) ((c)[0]=(a)[0]+(b)[0],(c)[1]=(a)[1]+(b)[1],(c)[2]=(a)[2]+(b)[2])
#define VectorCopy(a,b) ((b)[0]=(a)[0],(b)[1]=(a)[1],(b)[2]=(a)[2])
#define VectorScale(v, s, o) ((o)[0]=(v)[0]*(s),(o)[1]=(v)[1]*(s),(o)[2]=(v)[2]*(s))
#define VectorClear(a) ((a)[0]=(a)[1]=(a)[2]=0)
#define VectorNegate(a,b) ((b)[0]=-(a)[0],(b)[1]=-(a)[1],(b)[2]=-(a)[2])
#define VectorSet(v, x, y, z) ((v)[0]=(x), (v)[1]=(y), (v)[2]=(z))
#define VectorCompare(v1,v2) ((v1)[0]==(v2)[0] && (v1)[1]==(v2)[1] && (v1)[2]==(v2)[2])
#define VectorLength(v) (FPsqrt(DotProduct((v),(v))))
#define VectorInverse(v) ((v)[0]=-(v)[0],(v)[1]=-(v)[1],(v)[2]=-(v)[2])
#define VectorPlaneDistance(v, p) (FPXFP((v)[0],(p).vNormal[0]) + FPXFP((v)[1],(p).vNormal[1]) + FPXFP((v)[2],(p).vNormal[2]) + (p).iDist)
// =========================================================
// FIXED-POINT MATRIX AND VECTOR OPERATIONS
// =========================================================
typedef struct
{
int m[16];
} matrix_t;
matrix_t ZeroMatrix();
matrix_t IdentityMatrix();
matrix_t RXMatrix(const int degs);
matrix_t RYMatrix(const int degs);
matrix_t RZMatrix(const int degs);
matrix_t MatrixMultiply(matrix_t m1, matrix_t m2);
matrix_t MatrixInverse(matrix_t m);
matrix_t MatrixProjection(float fNearPlane, float fFarPlane, float fFOV, WORD wWidth, WORD wHeight);
void MatrixMultiplyVector(matrix_t m, vec3_t v, vec3_t vout);
// =========================================================
// FLOATING-POINT MATRIX OPERATIONS
// =========================================================
typedef struct
{
float m[16];
} matrixf_t;
matrixf_t ZeroMatrixf();
matrixf_t IdentityMatrixf();
matrixf_t RXMatrixf(const float degs);
matrixf_t RYMatrixf(const float degs);
matrixf_t RZMatrixf(const float degs);
matrixf_t MatrixMultiplyf(matrixf_t m1, matrixf_t m2);
matrixf_t MatrixInversef(matrixf_t m);
void MatrixMultiplyVectorf(matrixf_t m, vec3f_t v, vec3f_t vout);
// =========================================================
// FIXED-POINT MISC OPERATIONS
// =========================================================
int VectorNormalize(vec3_t v);
void VectorReflect(vec3_t eye, vec3_t normal, vec3_t reflected);
void ToAzimuthElevation(vec3_t v, int* iAzimuth, int* iElevation);
void TriNormal(vec3_t v1, vec3_t v2, vec3_t v3, vec3_t normal);
int FPsqrt(int iNumber);
int FPtan(int iNumber);
// =========================================================
// FLOATING-POINT MISC OPERATIONS
// =========================================================
#define DotProductf(x,y) ((x)[0]*(y)[0]+(x)[1]*(y)[1]+(x)[2]*(y)[2])
#define VectorLengthf(v) ((float)sqrt(DotProductf((v),(v))))
float VectorNormalizef(vec3f_t v);
void TriNormalf(vec3f_t v1, vec3f_t v2, vec3f_t v3, vec3f_t normal);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -