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

📄 our_module.c

📁 这是一个简单的3d动画mmi,这是模拟器上的
💻 C
📖 第 1 页 / 共 2 页
字号:
/**************************************************************************
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
***************************************************************************/

#ifdef OUR_MAIN_C
#ifndef OUR_MODULE_C
#define OUR_MODULE_C

#include "our_math.h"
#include "our_main.h"
#include "our_math.h"
#include "our_3d.h"
#include "our_draw32.h"
#include "math.h"

#define U_MAX 63
    
#define V_MAX 63
//FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
//FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

//FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
//FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

//==================================================================================
//==================================================================================
void OUR_creat_ball(	int point_num,
                    FIX_POINT3D_PTR	point_org,
                    OUR_3D_TRAG_PTR	triangle_work
                    )
{
    int i,j,m,n,r;
    //FIX_POINT3D_PTR point_org=global.point_org;
    //OUR_3D_TRAG_PTR	triangle_work=global.triangle_work;
    
    for (i=0;i<point_num;i++)//Z -> -Z  ; X -> Y
    {
        n=(i)*PI2_MY/((point_num-1)*2);
        r=500*OUR_Fast_Sin(n)>>15;
        n=500*OUR_Fast_Cos(n)>>15;
        for (j=0;j<point_num;j++)
        {
            m=(j)*PI2_MY/(point_num);
            point_org[(i-1)*point_num+j].MM.y=r*OUR_Fast_Sin(m)>>15;
            point_org[(i-1)*point_num+j].MM.x=r*OUR_Fast_Cos(m)>>15;
            point_org[(i-1)*point_num+j].MM.z=n;
        }
    }
    m=0;
    n=0;
    for (i=0;i<point_num-3;i++)
    {
        //n=(i+1);
        for (j=0;j<point_num-1;j++)
        {
            //left hand ax ,point to outside
            //triangle_work[2*n].CC.clor=0x0ff+0x3000*i+0x20*j;
            triangle_work[2*n].p1=n;
            triangle_work[2*n].p2=n+point_num;
            triangle_work[2*n].p3=n+point_num+1;
            
            //triangle_work[n*2+1].CC.clor=0x0ff000+0x300*i+0x20*j;
            triangle_work[n*2+1].p1=n+point_num+1;
            triangle_work[n*2+1].p2=n+1;
            triangle_work[n*2+1].p3=n;
            n++;/**/
        }
        //triangle_work[n*2].CC.clor=0x0ffff;
        triangle_work[n*2].p1=n;
        triangle_work[n*2].p2=n+point_num;
        triangle_work[n*2].p3=n+1;
        
        //triangle_work[n*2+1].CC.clor=0x0ffff;
        triangle_work[n*2+1].p1=n;
        triangle_work[n*2+1].p2=n+1;
        triangle_work[n*2+1].p3=n+1-point_num;
        n++;/**/
    }
}


//==================================================================================
//==================================================================================
void OUR_creat_ball_cube(	OUR_3D_OBJ_PTR obj,int r
                         )
{

    int i,j,k;
    int n,m;
    int uy,vx;
    FIX_POINT3D_PTR	point_org=obj->pPoints;
    OUR_3D_TRAG_PTR	triangle_work=obj->pTriangle;
    OUR_BMP_INFO** bmp_ptr=obj->bmp_info;
    int num=obj->point_num;
#define UV_R 63
    int uv[][3]={	
        {UV_BUILD(1,1),	UV_BUILD(UV_R,1)	,		UV_BUILD(1,UV_R)},
        {UV_BUILD(UV_R,1),		UV_BUILD(UV_R,UV_R),	UV_BUILD(1,UV_R)},  
    };
    int point[][3]={	
        {	1,	-1,	-1	},// 0
        {	1,	0,	1	},// 1
        {	1,	1,	1	},// 2
        
        {	0,	1,	1	},// 1
        {	-1,	1,	1	},// 2
        
        {	-1,	0,	1	},// 1
        {	-1,	-1,	1	},// 2
        
        {	0,	-1,	1	},// 1
    };
    for (i=0;i<LINE+1;i++)// 3 layers
    {		
        n=1200*i-LINE*600;
        if (i==0)
        {
            n+=1000;
        }
        else if (i==LINE)
        {
            n-=1000;
        }
        for (j=0;j<8;j++)
        {
            point_org[(i)*8+j].MM.z=-point[j][0]*1200;
            point_org[(i)*8+j].MM.x=point[j][1]*1200;
            point_org[(i)*8+j].MM.y=-n;
        }
    }
    //ttt
    for (i=1;i<LINE+1;i++)// 3 layers
    {		
        n=500*n-750;
        for (j=0;j<7;j++)
        {
            triangle_work[((i-1)*8+j)*2].p1=(i)*8+j;
            triangle_work[((i-1)*8+j)*2].p2=(i)*8+j-8;
            triangle_work[((i-1)*8+j)*2].p3=(i)*8+j+1;
            
            triangle_work[((i-1)*8+j)*2+1].p1=(i)*8+j-8;
            triangle_work[((i-1)*8+j)*2+1].p2=(i)*8+j-7;
            triangle_work[((i-1)*8+j)*2+1].p3=(i)*8+j+1;
            
            triangle_work[((i-1)*8+j)*2].bmp_index=(j+1)/2+i*4-4;
            triangle_work[((i-1)*8+j)*2+1].bmp_index=(j+1)/2+i*4-4;
            
            uy=bmp_ptr[(j+1)/2+i*4-4]->height-1;
            vx=(1<<bmp_ptr[(j+1)/2+i*4-4]->bits)-1;
            
            triangle_work[((i-1)*8+j)*2].uv1=UV_BUILD(1,1);//00
            triangle_work[((i-1)*8+j)*2].uv2=UV_BUILD(uy,1);//01
            triangle_work[((i-1)*8+j)*2].uv3=UV_BUILD(1,vx);//02
            
            triangle_work[((i-1)*8+j)*2+1].uv1=UV_BUILD(uy,1);//10
            triangle_work[((i-1)*8+j)*2+1].uv2=UV_BUILD(uy,vx);//11
            triangle_work[((i-1)*8+j)*2+1].uv3=UV_BUILD(1,vx);//12
      
        }
        triangle_work[((i-1)*8+j)*2].p1=(i)*8+7;
        triangle_work[((i-1)*8+j)*2].p2=(i)*8-1;
        triangle_work[((i-1)*8+j)*2].p3=(i)*8;
        
        triangle_work[((i-1)*8+j)*2+1].p1=(i)*8-1;
        triangle_work[((i-1)*8+j)*2+1].p2=(i)*8-8;
        triangle_work[((i-1)*8+j)*2+1].p3=(i)*8;
        
        triangle_work[((i-1)*8+j)*2].bmp_index=i*4-4;
        triangle_work[((i-1)*8+j)*2+1].bmp_index=i*4-4;


        uy=bmp_ptr[triangle_work[((i-1)*8+j)*2].bmp_index]->height-1;
        vx=(1<<bmp_ptr[triangle_work[((i-1)*8+j)*2].bmp_index]->bits)-1;
        
        triangle_work[((i-1)*8+j)*2].uv1=UV_BUILD(1,1);//00
        triangle_work[((i-1)*8+j)*2].uv2=UV_BUILD(uy,1);//01
        triangle_work[((i-1)*8+j)*2].uv3=UV_BUILD(1,vx);//02
        
        triangle_work[((i-1)*8+j)*2+1].uv1=UV_BUILD(uy,1);//10
        triangle_work[((i-1)*8+j)*2+1].uv2=UV_BUILD(uy,vx);//11
        triangle_work[((i-1)*8+j)*2+1].uv3=UV_BUILD(1,vx);//12

      
    }
    j=0;//desk
    triangle_work[((i-1)*8+j)*2].p1=0;
    triangle_work[((i-1)*8+j)*2].p2=7;
    triangle_work[((i-1)*8+j)*2].p3=2;
    
    triangle_work[((i-1)*8+j)*2+1].p1=7;
    triangle_work[((i-1)*8+j)*2+1].p2=3;
    triangle_work[((i-1)*8+j)*2+1].p3=2;
    
    triangle_work[((i-1)*8+j)*2].bmp_index=21;
    triangle_work[((i-1)*8+j)*2+1].bmp_index=21;
    
        uy=bmp_ptr[triangle_work[((i-1)*8+j)*2].bmp_index]->height-1;
        vx=(1<<bmp_ptr[triangle_work[((i-1)*8+j)*2].bmp_index]->bits)-1;
        
        triangle_work[((i-1)*8+j)*2].uv1=UV_BUILD(1,1);//00
        triangle_work[((i-1)*8+j)*2].uv2=UV_BUILD(uy/2,1);//01
        triangle_work[((i-1)*8+j)*2].uv3=UV_BUILD(1,vx);//02
        
        triangle_work[((i-1)*8+j)*2+1].uv1=UV_BUILD(uy/2,1);//10
        triangle_work[((i-1)*8+j)*2+1].uv2=UV_BUILD(uy/2,vx);//11
        triangle_work[((i-1)*8+j)*2+1].uv3=UV_BUILD(1,vx);//12
/*    
    triangle_work[((i-1)*8+j)*2].uv1=UV_BUILD(1,1);
    triangle_work[((i-1)*8+j)*2].uv2=UV_BUILD(200,1);
    triangle_work[((i-1)*8+j)*2].uv3=UV_BUILD(1,255);
    
    triangle_work[((i-1)*8+j)*2+1].uv1=UV_BUILD(200,1);
    triangle_work[((i-1)*8+j)*2+1].uv2=UV_BUILD(200,255);
    triangle_work[((i-1)*8+j)*2+1].uv3=UV_BUILD(1,255);
*/    

    j=1;
    triangle_work[((i-1)*8+j)*2].p1=7;
    triangle_work[((i-1)*8+j)*2].p2=6;
    triangle_work[((i-1)*8+j)*2].p3=3;
    
    triangle_work[((i-1)*8+j)*2+1].p1=6;
    triangle_work[((i-1)*8+j)*2+1].p2=4;
    triangle_work[((i-1)*8+j)*2+1].p3=3;
    triangle_work[((i-1)*8+j)*2].bmp_index=21;
    triangle_work[((i-1)*8+j)*2+1].bmp_index=21;

            
        
        triangle_work[((i-1)*8+j)*2].uv1=UV_BUILD(uy/2,1);//00
        triangle_work[((i-1)*8+j)*2].uv2=UV_BUILD(uy,1);//01
        triangle_work[((i-1)*8+j)*2].uv3=UV_BUILD(uy/2,vx);//02
        
        triangle_work[((i-1)*8+j)*2+1].uv1=UV_BUILD(uy,1);//10
        triangle_work[((i-1)*8+j)*2+1].uv2=UV_BUILD(uy,vx);//11
        triangle_work[((i-1)*8+j)*2+1].uv3=UV_BUILD(uy/2,vx);//12
    /*
    triangle_work[((i-1)*8+j)*2].uv1=UV_BUILD(200,1);
    triangle_work[((i-1)*8+j)*2].uv2=UV_BUILD(399,1);
    triangle_work[((i-1)*8+j)*2].uv3=UV_BUILD(200,255);
    
    triangle_work[((i-1)*8+j)*2+1].uv1=UV_BUILD(399,1);
    triangle_work[((i-1)*8+j)*2+1].uv2=UV_BUILD(399,255);
    triangle_work[((i-1)*8+j)*2+1].uv3=UV_BUILD(200,255);
*/
    


//LINE*8
   // uy=99;
   // vx=63;
    j=2;//opt
    triangle_work[((i-1)*8+j)*2].p1=LINE*8+0;
    triangle_work[((i-1)*8+j)*2].p2=LINE*8+2;
    triangle_work[((i-1)*8+j)*2].p3=LINE*8+7;
    
    triangle_work[((i-1)*8+j)*2+1].p1=LINE*8+7;
    triangle_work[((i-1)*8+j)*2+1].p2=LINE*8+2;
    triangle_work[((i-1)*8+j)*2+1].p3=LINE*8+3;
    
            triangle_work[((i-1)*8+j)*2].bmp_index=20;
            triangle_work[((i-1)*8+j)*2+1].bmp_index=20;


         
        uy=bmp_ptr[triangle_work[((i-1)*8+j)*2].bmp_index]->height-1;
        vx=(1<<bmp_ptr[triangle_work[((i-1)*8+j)*2].bmp_index]->bits)-1;
    /*    
        triangle_work[((i-1)*8+j)*2].uv1=UV_BUILD(1,1);//00
        triangle_work[((i-1)*8+j)*2].uv2=UV_BUILD(uy/2,1);//01
        triangle_work[((i-1)*8+j)*2].uv3=UV_BUILD(1,vx);//02
        
        triangle_work[((i-1)*8+j)*2+1].uv1=UV_BUILD(uy/2,1);//10
        triangle_work[((i-1)*8+j)*2+1].uv2=UV_BUILD(uy/2,vx);//11
        triangle_work[((i-1)*8+j)*2+1].uv3=UV_BUILD(1,vx);//12

  */       
    triangle_work[((i-1)*8+j)*2].uv1=UV_BUILD(uy,1);
    triangle_work[((i-1)*8+j)*2].uv2=UV_BUILD(uy,vx);
    triangle_work[((i-1)*8+j)*2].uv3=UV_BUILD(uy/2,1);
    
    triangle_work[((i-1)*8+j)*2+1].uv1=UV_BUILD(uy/2,1);
    triangle_work[((i-1)*8+j)*2+1].uv2=UV_BUILD(uy,vx);
    triangle_work[((i-1)*8+j)*2+1].uv3=UV_BUILD(uy/2,vx);
       
    
    j=3;
    triangle_work[((i-1)*8+j)*2].p1=LINE*8+7;
    triangle_work[((i-1)*8+j)*2].p2=LINE*8+3;
    triangle_work[((i-1)*8+j)*2].p3=LINE*8+6;
    
    triangle_work[((i-1)*8+j)*2+1].p1=LINE*8+6;
    triangle_work[((i-1)*8+j)*2+1].p2=LINE*8+3;
    triangle_work[((i-1)*8+j)*2+1].p3=LINE*8+4;


            triangle_work[((i-1)*8+j)*2].bmp_index=20;
            triangle_work[((i-1)*8+j)*2+1].bmp_index=20;
/*
        triangle_work[((i-1)*8+j)*2].uv1=UV_BUILD(uy/2,1);//00
        triangle_work[((i-1)*8+j)*2].uv2=UV_BUILD(uy,1);//01
        triangle_work[((i-1)*8+j)*2].uv3=UV_BUILD(uy/2,vx);//02
        
        triangle_work[((i-1)*8+j)*2+1].uv1=UV_BUILD(uy,1);//10
        triangle_work[((i-1)*8+j)*2+1].uv2=UV_BUILD(uy,vx);//11
        triangle_work[((i-1)*8+j)*2+1].uv3=UV_BUILD(uy/2,vx);//12
 */
    
    triangle_work[((i-1)*8+j)*2].uv1=UV_BUILD(uy/2,1);
    triangle_work[((i-1)*8+j)*2].uv2=UV_BUILD(uy/2,vx/2);
    triangle_work[((i-1)*8+j)*2].uv3=UV_BUILD(1,1);
    
    triangle_work[((i-1)*8+j)*2+1].uv1=UV_BUILD(1,1);
    triangle_work[((i-1)*8+j)*2+1].uv2=UV_BUILD(uy/2,vx/2);
    triangle_work[((i-1)*8+j)*2+1].uv3=UV_BUILD(1,vx);
            
   	
}

//==================================================================================
//==================================================================================
void OUR_creat_cube(	OUR_3D_OBJ_PTR obj,int r)
{
#define CUBE_R 1000
    int i;
    FIX_POINT3D_PTR	point_org=obj->pPoints;
    OUR_3D_TRAG_PTR	triangle_work=obj->pTriangle;
    int point[][3]={	
        {	-1,	1,	-1	},// 0
        {	-1,	1,	1	},// 1
        {	1,	1,	1	},// 2
        {	1,	1,	-1	},// 3
        
        {	-1,	-1,	-1	},// 4
        {	-1,	-1,	1	},// 5
        {	1,	-1,	1	},// 6
        {	1,	-1,	-1	},// 7
        
        {	0,	0,	-1	},// 8
        {	0,	0,	1	},// 9
        
        {	0,	-1,	0	},// 10
        {	0,	1,	0	},// 11
        
        {	-1,	0,	0	},// 12
        {	1,	0,	0	},// 13
        
    };
    char triangle[][3]={	
        {	0,	1,	11	},// 0
        {	1,	2,	11	},// 1
        {	2,	3,	11	},// 0
        {	3,	0,	11	},// 1
        
        {	4,	7,	10	},// 2
        {	7,	6,	10	},// 3
        {	6,	5,	10	},// 2
        {	5,	4,	10	},// 3
        
        {	1,	5,	9	},// 4
        {	5,	6,	9	},// 5
        {	6,	2,	9	},// 4
        {	2,	1,	9	},// 5
        
        {	0,	4,	12	},// 6
        {	4,	5,	12	},// 7
        {	5,	1,	12	},// 6
        {	1,	0,	12	},// 7
        
        {	0,	3,	8	},// 4
        {	3,	7,	8	},// 5
        {	7,	4,	8	},// 4
        {	4,	0,	8	},// 5
        
        {	2,	6,	13	},// 6
        {	6,	7,	13	},// 7
        {	7,	3,	13	},// 6
        {	3,	2,	13	},// 7
    };
    //#define UV_R 62
    int uv[][3]={	
        {UV_BUILD(1,1),		UV_BUILD(UV_R,1),	UV_BUILD(UV_R/2,UV_R/2)	},
        {UV_BUILD(UV_R,1),		UV_BUILD(UV_R,UV_R),	UV_BUILD(UV_R/2,UV_R/2)},
        {UV_BUILD(UV_R,UV_R),		UV_BUILD(1,UV_R),	UV_BUILD(UV_R/2,UV_R/2)	},
        {UV_BUILD(1,UV_R),		UV_BUILD(1,1),	UV_BUILD(UV_R/2,UV_R/2)},
        
    };
    
    for(i=0;i<14;i++)
    {
        point_org[i].MM.x= CUBE_R*point[i][0];
        point_org[i].MM.y= CUBE_R*point[i][1];
        point_org[i].MM.z= CUBE_R*point[i][2];
    }
    for(i=0;i<24;i++)
    {
        triangle_work[i].p1=triangle[i][0];
        triangle_work[i].p2=triangle[i][1];
        triangle_work[i].p3=triangle[i][2];
        
        triangle_work[i].uv1=uv[i%4][0];
        triangle_work[i].uv2=uv[i%4][1];
        triangle_work[i].uv3=uv[i%4][2];
    }
    
}
//==================================================================================
//==================================================================================
void OUR_creat_cube_mofang(OUR_3D_OBJ_PTR obj,int CUBE_1R)
{
    //#define CUBE_R 1000
    int i;
    FIX_POINT3D_PTR	point_org=obj->pPoints;
    OUR_3D_TRAG_PTR	triangle_work=obj->pTriangle;
    int point[][3]={	
        {	-1,	1,	-1	},// 0
        {	-1,	1,	1	},// 1
        {	1,	1,	1	},// 2
        {	1,	1,	-1	},// 3
        
        {	-1,	-1,	-1	},// 4
        {	-1,	-1,	1	},// 5
        {	1,	-1,	1	},// 6

⌨️ 快捷键说明

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