⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 math3d.h

📁 Torus3D.rar,BREW平台的3D游戏引擎的一个实例.喜欢的朋友可以下载
💻 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 + -