正在coding的一个开源3d小引擎——zge

来源:互联网 发布:单页营销网站源码 编辑:程序博客网 时间:2024/06/06 10:49
 ZGE 起初是用OPENGL改写的HGE引擎,目前的版本号是0.6A
目前的定义是轻量级渲染引擎。 附件是ZGE引擎编译完成的部分。

引擎的接口如下 (暂定2009-1-11)

//引擎接口
  1. class Root
  2. {
  3. public:
  4.         //输入部分
  5.         virtual        bool        Input_KeyDown(unsigned char key) =0 ;
  6.         virtual        bool        Input_KeyUp(unsigned char key) = 0;
  7.         virtual        bool        Input_ButtonDown(int button) = 0;
  8.         virtual        bool        Input_ButtonUp(int button)= 0;
  9.         virtual        void        Input_GetMouseMovement(int &dx, int &dy) = 0;
  10.         virtual        int        Input_GetMouseWheelMovement() = 0;
  11.         //资源部分
  12.         virtual        bool        Resource_AttachPack(const char* filename, const char* password) = 0;
  13.         virtual        void        Resource_RemovePack(const char* filename) = 0;
  14.         virtual        void        Resource_RemoveAllPacks() = 0;
  15.         virtual        void*        Resource_Load(const char* filename, unsigned        int *size=0) = 0;
  16.         virtual        void        Resource_Free(void *res) = 0;
  17.         virtual        char*        Resource_MakePath(const char* filename) = 0;
  18.         virtual        char*        Resource_EnumFiles(const char* wildcard) = 0;
  19.         virtual        char*        Resource_EnumFolders(const char* wildcard) = 0;
  20.        
  21.         //系统部分
  22.         virtual bool        System_Initiate(LOOPFUNC update,LOOPFUNC render) = 0;
  23.         virtual void        System_Shutdown() = 0;
  24.         virtual bool        System_Start() = 0;
  25.         virtual char*        System_GetErrorMessage() = 0;
  26.         virtual void        System_Log(const char* format, ...) = 0;
  27.         virtual void        System_Configure(const zgestring& configfilename) = 0;
  28.         //脚本部分
  29.         virtual bool        Script_Install(const zgestring& scriptfilename,const zgestring& scriptname) = 0;
  30.         virtual void        Script_UnInstall(const zgestring& scriptname) = 0;
  31.         virtual int                Script_GetIntVariable(const zgestring& scriptname,const zgestring& tokenname) = 0;
  32.         virtual float        Script_GetFloatVariable(const zgestring& scriptname,const zgestring& tokenname) = 0;
  33.         virtual int*        Script_GetIntArray(const zgestring& scriptname,const zgestring& tokenname,unsigned        int* arraylength) = 0;
  34.         virtual float*        Script_GetFloatArray(const zgestring& scriptname,const zgestring& tokenname,unsigned int* arraylength) = 0;
  35.         virtual char*        Script_GetString(const zgestring& scriptname,const zgestring& tokenname,unsigned        int* strlength) = 0;
  36.         //随机数
  37.         virtual void        Random_Seed(int seed=0) = 0;
  38.         virtual int                Random_Int(int min, int max) = 0;
  39.         virtual float        Random_Float(float min, float max) = 0;
  40.         //计时器
  41.         virtual double        Timer_GetTimeRightNow() = 0;
  42.         virtual double        Timer_GetLastFrameDelta() = 0;        //上一帧花的总时间(两次更新开始的时间间隔)
  43.         virtual double        Timer_GetLastUpdataDelta() = 0; //上次更新用的时间
  44.         virtual double        Timer_GerLastRenderDelta() = 0; //上次渲染用的时间
  45.         virtual int                Timer_GetFPS() = 0;
  46.         //音乐部分
  47.         //空缺 将由WaNGs完成
  48.         //2d图形部分
  49.         virtual void        Gfx_BeginScene2D() = 0;
  50.         virtual void        Gfx_BeginScene3D() = 0;
  51.         virtual void        Gfx_EndScene() = 0;
  52.         virtual void        Gfx_Clear() = 0;
  53.         virtual void        Gfx_RenderLine(vertex* line) = 0;
  54.         virtual void        Gfx_RenderTriple(vertex* triplelist,unsigned int triplecount) = 0;
  55.         virtual void        Gfx_RenderQuad(vertex* quadlist,unsigned int quadcount) = 0;
  56.         //渲染状态管理
  57.         virtual void        GfxStat_SetTexture(const zgestring& texname) = 0;
  58.         virtual void        GfxStat_SetClipping(vertex* quad) = 0;
  59.         virtual void        GfxStat_SetTransform() = 0;
  60.         //virtual void        GfxStat_SetShader(void* shader) = 0;
  61.         virtual void        GfxStat_EnableState(ZgeGfxState) = 0;
  62.         virtual void        GfxStat_DisableState(ZgeGfxState) = 0;
  63.         virtual void        GfxStat_SetDefault() = 0;
  64.         //...
  65.        
  66.         //文理部分
  67.        
  68.         virtual void        Texture_Load(const zgestring& filename,const zgestring& texname) = 0;
  69.         virtual void        Texture_Free(const zgestring& texname) = 0;
  70.         virtual int                Texture_GetWidth(const zgestring& texname) = 0;
  71.         virtual int                Texture_GetHeight(const zgestring& texname) = 0;
  72.         //释放接口
  73.         virtual        void        Release() = 0;
  74. };

如何使用的范例

  1. #include "root.h"
  2. #pragma comment(lib,"debug/zge2d.lib")
  3. class Game
  4. {
  5.         Root*        root;
  6. public:
  7.         Game()
  8.         {
  9.                 root = getRoot(__ZGE2D_VERSION_);
  10.                 //。。。
  11.         }
  12.         int        Update(){//....做一些更新
  13.       };
  14.         void        Render(){//...做一些渲染工作
  15.                root->Gfx_Clear();
  16.                root->Gfx_BeginScene2D();
  17.                //...do someting..for rendering
  18.                root->Gfx_EndScene();
  19.       };
  20. } game_process;
  21. int Update()
  22. {
  23.         return game_process.Update();
  24. }
  25. int Render()
  26. {
  27.         game_process.Render();
  28.         return 1;
  29. }
  30. int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,INT)
  31. {
  32.         Root* root = 0;
  33.         if(root = getRoot(__ZGE2D_VERSION_))
  34.         {
  35.                 if(root->System_Initiate(Update,Render))
  36.                 {
  37.                         root->System_Start();
  38.                 }
  39.         }
  40.         return 0;
  41. }


目前只完成了core库,现在打算开始写help库。

ZGE 0.6开发的任务分配与完成情况

ZGE 0.6开发的任务分配与完成情况

corivSky 写扩展库class ZgeMesh

基本目标将MD2文件转为引擎可消化的格式。

完成周期 1 周

Zoo.ed 改写核心引擎的脚本部分Root::Script_*() = 0;函数

使用LUA扩展脚本引擎

完成周期 1 周


该引擎下载地址:
http://zooserver.oicp.net/zoobbs/viewthread.php?tid=30&extra=page%3D1

源代码不放出来了。

因为bug多多啊~(*^__^*) 嘻嘻……放出来害人啊……