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

📄 our_math.h

📁 MTK上3D特效的一些开源代码
💻 H
字号:
/**************************************************************************
Copyright (C) jianbo miao Corporation.  All Rights Released.
this is a 3d engin named our_3d_engin.
our_3d_engin feature:
1:there is no float.
2:it do the 3d things all by softwear.
3:base on 1 and 2 , it can execution on arm which have no 3d hardwear accelerate.

if you have any  suggestion or question,pls contact with me
mail:miaojb@126.com
msn:miaojianbo@hotmail.com
qq:30209027

2008/01/01
***************************************************************************/

#ifndef OUR_MATH
#define OUR_MATH
//================================================================================================
//================================================================================================

#include "our_cpu.h"
//=============================================

// TYPES //////////////////////////////////////////////////

//=================================================================================================

// 3D vector, point without the w -----------------------------------------------
typedef union 
{
    FIXP16 M[3];
    struct 
     {
     FIXP16 x,y,z;
     }MM; 
} FIX_VECTOR3D, FIX_POINT3D, *FIX_VECTOR3D_PTR, *FIX_POINT3D_PTR;
// 3x3 matrix -----------------------------------------------

typedef union
    {
    FIXP16 M[3][3]; // array indexed data storage

    // storage in row major form with explicit names
    struct 
         {
         FIXP16 M00, M01, M02;
         FIXP16 M10, M11, M12;
         FIXP16 M20, M21, M22;
         }MM; 
} FIX_MATRIX_3X3, *FIX_MATRIX_3X3_PTR;

//=================================================================================================

// 2x2 matrix -----------------------------------------------
typedef union
    {
    FIXP16 M[2][2]; // array indexed data storage

    // storage in row major form with explicit names
    struct 
         {
         FIXP16 M00, M01;
         FIXP16 M10, M11;
         }MM; 
} FIX_MATRIX_2X2, *FIX_MATRIX_2X2_PTR;

// 1x4 matrix -----------------------------------------------
typedef union
    {
    FIXP16 M[4];
    struct 
         {
         FIXP16 M00, M01, M02, M03;
         }MM; 
} FIX_MATRIX_1X4, *FIX_MATRIX_1X4_PTR;

// 4x4 matrix -----------------------------------------------
typedef union
    {
    FIXP16 M[4][4];
    struct 
         {
         FIXP16 M00, M01, M02, M03;
         FIXP16 M10, M11, M12, M13;
         FIXP16 M20, M21, M22, M23;
         FIXP16 M30, M31, M32, M33;
         }MM;
} FIX_MATRIX_4X4, *FIX_MATRIX_4X4_PTR;

// 4x3 matrix -----------------------------------------------

typedef union
{
    FIXP16 M[4][3];
    struct 
         {
         FIXP16 M00, M01, M02;
         FIXP16 M10, M11, M12;
         FIXP16 M20, M21, M22;
         FIXP16 M30, M31, M32;
         }MM;
} FIX_MATRIX_4X3, *FIX_MATRIX_4X3_PTR;

// vector types -----------------------------------------------

// 2D vector, point without the w ////////////////////////
typedef union
{
    FIXP16 M[2];
    struct 
     {
     FIXP16 x,y;
     }MM; 
}FIX_VECTOR2D, FIX_POINT2D, *FIX_VECTOR2D_PTR, *FIX_POINT2D_PTR;

// 4D homogenous vector, point with w-----------------------------------------------
typedef union
    {
    FIXP16 M[4];
    struct 
         {
         FIXP16 x,y,z,w;
         }MM; 
} FIX_VECTOR4D, FIX_POINT4D, *FIX_VECTOR4D_PTR, *FIX_POINT4D_PTR;

//============================================================================
// used for swapping algorithm
#define OUR_SWAP(a,b,t) {t=a; a=b; b=t;}
#define OUR_int_abs(a) ((a)>0 ? (a) : (0-a))
//============================================================================
void 	OUR_Build_Sin_Cos_Tables(void);
/*
	if you want to use the functions our_fast_sin or our_fast_cos,do this function at init.
*/
//============================================================================
FIXP16 	OUR_Fast_Sin(FIXP16 theta);
//============================================================================
FIXP16 	OUR_Fast_Cos(FIXP16 theta);
//============================================================================
void 	OUR_FIX_Mat_Mul_VECTOR3D_3X3(	FIX_VECTOR3D_PTR  	va, 
											FIX_MATRIX_3X3_PTR 	mb,
											FIX_VECTOR3D_PTR  	vprod);
//============================================================================

uint32 	OUR_sqrt_16(unsigned long M);
//============================================================================
void 	OUR_FIX_Mat_Mul_3X3(	FIX_MATRIX_3X3_PTR  	ma, 
								FIX_MATRIX_3X3_PTR 	mb,
								FIX_MATRIX_3X3_PTR  	mprod);
//============================================================================
void 	OUR_FIX_VECTOR3D_SUB(	FIX_VECTOR3D_PTR  	va, 
											FIX_VECTOR3D_PTR  	vb,
											FIX_VECTOR3D_PTR  	vprod);
//============================================================================
void 	OUR_FIX_VECTOR3D_ADD(	FIX_VECTOR3D_PTR  	va, 					//20t
											FIX_VECTOR3D_PTR  	vb,
											FIX_VECTOR3D_PTR  	vprod);
//============================================================================
void 	OUR_VECTOR3D_Normalize(FIX_VECTOR3D_PTR va);
void OUR_FAST_Normalize(FIX_VECTOR3D_PTR va)	;
FIXP16 	OUR_VECTOR3D_Dot(FIX_VECTOR3D_PTR va, FIX_VECTOR3D_PTR vb);
void 	OUR_VECTOR3D_Cross(		FIX_VECTOR3D_PTR va, 
							                   FIX_VECTOR3D_PTR vb,
							                   FIX_VECTOR3D_PTR vn);
 int 	OUR_Mat_Inverse_3X3(FIX_MATRIX_3X3_PTR m, FIX_MATRIX_3X3_PTR mi);
 int 	OUR_FAST_Length(FIX_VECTOR3D_PTR va);	
 uint32 OUR_Fast_reciprocal(FIXP16 theta);
 void OUR_Build_reciprocal_look(void);
 uint32 OUR_Fast_division(FIXP16 y,FIXP16 x);
//================================================================================================
//================================================================================================
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -