• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            Cpper
            C/C++高級(jí)工程師 Android高級(jí)軟件工程師 IT集成工程師 音頻工程師 熟悉c,c++,java,c#,py,js,asp等多種語言 程序猿

                 摘要: 剛給引擎設(shè)備新加了一個(gè)函數(shù)GetLuaStateOwner();用于獲取引擎中的lua上下文看起來似乎沒多大必要但是我有自己的考慮!另外:我修改了粒子腳本如下:   1   2 -- 這是蓋莫引擎中使用lua腳本的測試粒子  3   4 -- 定義粒子池粒子...  閱讀全文
            posted @ 2010-02-25 13:39 ccsdu2009 閱讀(370) | 評(píng)論 (0)編輯 收藏
             
                 摘要: 初步做完粒子系統(tǒng)想著如何從腳本中載入數(shù)據(jù),配送方法這樣不是很好腳本我打算首先支持lua和天使腳本等引擎成熟了再支持python首先來看使用lua語言改寫上篇的粒子系統(tǒng)代碼.(不過鄙人的lua,python都很菜的,其原因就是一直沒有練習(xí)的機(jī)會(huì))對(duì)于Lua,其擴(kuò)展有l(wèi)uabind,tolua++,luaplus,前2著都與boost有關(guān)所以就使用luaplus,簡單些開始了先上lua腳本代碼(我把l...  閱讀全文
            posted @ 2010-02-24 19:43 ccsdu2009 閱讀(2193) | 評(píng)論 (1)編輯 收藏
             
                 摘要: 引擎的粒子系統(tǒng)我一直在考慮,以前也設(shè)計(jì)過,但是感覺以前做過的過于復(fù)雜,這里我本著讓粒子系統(tǒng)的接口盡可能的簡單,功能盡可能的強(qiáng)大,我把粒子系統(tǒng)設(shè)計(jì)成了這樣的形式: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1  2...  閱讀全文
            posted @ 2010-02-24 14:56 ccsdu2009 閱讀(1484) | 評(píng)論 (3)編輯 收藏
             
            今天由于要寫一些東西,遇到了需要把成員函數(shù)作為函數(shù)參數(shù)的問題
            總結(jié)有以下幾個(gè)辦法:
            1.使用類的靜態(tài)成員:
                  最簡單的.只是這種辦法與使用普通函數(shù)沒有什么區(qū)別
            2.模板的方法
             
            1   template<class  T>   
            2   void  Call(T* ptr,void(T::*MenFn)())   
            3   {   
            4      (ptr->*MenFn)();   
            5   }   
               
             1 class MyClass
             2 {
             3 public:
             4     void Call()
             5     {
             6        
             7     }
             8 };
             9 
            10 MyClass cs;
            11 Call(&cs,&MyCall::Call);

            3.  虛擬繼承的方法
             1 class Base
             2 {
             3 public:
             4     virtual void Call() = 0;
             5 };    
             6 
             7 class SubClass :public Base
             8 {
             9 public:
            10     void Call(){}
            11 };
            12  
            13 void Call(Base *ptr)
            14 {
            15     ptr->Call();
            16 

            4.use boost.

             

             1#include   <boost/bind.hpp>   
             2#include   <iostream>   
             3using   namespace   std;   
             4struct   MyClass   
             5{   
             6    void  Print(const char* str)   
             7    {   
             8        cout<<"holle "<<str<<endl;   
             9    }
               
            10}
            ;
            11
            12template<class _Fun>   
            13void CallBackFun(_Fun a,const char* str)   
            14{   
            15    t(n);   
            16}
               
            17 
            18int   main()   
            19{   
            20    MyClass mc;
            21    CallBackFun(boost::bind(boost::mem_fn(&MyClass::Print),&mc,_1),"world")
            22    return  1;   
            23}
               
            24

              5.使用靜態(tài)成員函數(shù)或者聯(lián)合體模擬之

            1 union
            2 {
            3     void(G_CALL ParticleSystem::*PhysicsThreadFun)(void *arg);
            4     ThreadFun f;
            5 }fn; 
            6 fn.PhysicsThreadFun = &ParticleSystem::PhysicsThreadFun;
            7 thread_id = CreateThread(fn.f,&ps);

            6.也許.
                  對(duì)loki庫不太熟悉也許上面也有答案吧
            posted @ 2010-02-23 19:08 ccsdu2009 閱讀(6462) | 評(píng)論 (6)編輯 收藏
             
            我所知的c++插槽系統(tǒng)由3個(gè)boost的,sigslot的,sigc++的
            這里介紹sigc++的使用

            最基本的使用方法:
            1.回調(diào)函數(shù)為一般函數(shù):
            代碼如下:
             1 #include <iostream>
             2 #include <string>
             3 #include <sigc++/sigc++.h>
             4 
             5 //! 普通函數(shù) 
             6 void Print(const std::string& str)
             7 {
             8    std::cout << str;
             9 }
            10 
            11 int main()
            12 {
            13    //! 返回值void,參數(shù)const std::string&  
            14    sigc::signal<voidconst std::string&> signal_print;
            15    //! 鏈接函數(shù) 
            16    signal_print.connect( sigc::ptr_fun(&Print));
            17    //! 發(fā)射信號(hào) 
            18    signal_print.emit("hello world\n");
            19   
            20    system("pause");
            21    return 0;
            22 }
            2.回調(diào)函數(shù)為成員函數(shù)
             1 #include <iostream>
             2 #include <string>
             3 #include <sigc++/sigc++.h>
             4  
             5 class Printer :public sigc::trackable
             6 {
             7 public:
             8    void Work(){slot.emit("work\n");}    
             9    typedef sigc::signal<voidconst std::string&> Slot;
            10    Slot slot;             
            11    void Print(const std::string& str){std::cout<<str;}   
            12 }; 
            13  
            14 int main()
            15 {
            16    Printer printer; 
            17    Printer::Slot::iterator iter = printer.slot.connect(sigc::mem_fun(&printer,&Printer::Print));
            18    printer.Work();
            19    iter->disconnect();
            20    printer.Work();
            21    
            22    system("pause");
            23    return 0;
            24 }
            在sigc++中sigc::ptr_fun負(fù)責(zé)綁定一般函數(shù)
            而sigc::men_fun負(fù)責(zé)綁定成員函數(shù).

            可以看到一般的信號(hào)插槽系統(tǒng)都具備以下幾個(gè)函數(shù)
            a.插槽連接
            b.插槽斷開
            c.信號(hào)發(fā)射
            當(dāng)然有的插槽信號(hào)庫還提供其它一些函數(shù)
            比如對(duì)信號(hào)設(shè)定優(yōu)先級(jí)等等

            這是簡單實(shí)用sigc++的例子
            不過若論簡單性的話還是sigslot比較好,只有一個(gè)頭文件

            posted @ 2010-02-22 16:42 ccsdu2009 閱讀(4086) | 評(píng)論 (7)編輯 收藏
             
            游戲引擎的粒子系統(tǒng)設(shè)計(jì)大致有2個(gè)方式:或者是雪,雨,煙花的具體類實(shí)現(xiàn),或者是類似ogre的那種由粒子發(fā)射器,粒子效果器等組成的具有簡明數(shù)學(xué),物理意義的通用粒子系統(tǒng)。
            蓋莫引擎采用的是類似于ogre的這種模型
            粒子系統(tǒng)由粒子發(fā)射器,粒子效果器,粒子開發(fā)等組成。
            下面這是一個(gè)粒子系統(tǒng)的貼圖:

            這個(gè)粒子場景是采用的點(diǎn)狀粒子發(fā)射器+重力粒子效果器(當(dāng)然這是最簡單的模式了)
            由于粒子系統(tǒng)比較龐大,代碼還在修改中故不上代碼
            posted @ 2010-02-22 14:51 ccsdu2009 閱讀(1662) | 評(píng)論 (0)編輯 收藏
             
                 摘要: 如何軟件設(shè)計(jì)中總有那么幾個(gè)比較小巧卻比較有用的小段代碼比如boost中的utility蓋莫游戲引擎也一樣有幾個(gè)比較小的代碼片段:如下這是關(guān)于指針的:  1 //! 定義一個(gè)檢測指針是否為空的宏 2 /*! 3     當(dāng)指針為空的話則返回指定值 4  &nb...  閱讀全文
            posted @ 2010-02-10 15:17 ccsdu2009 閱讀(1520) | 評(píng)論 (3)編輯 收藏
             

            剛改造了以前做的蓋莫游戲引擎渲染md2的代碼.
            對(duì)于md2模型來說
            一個(gè)模型由若干動(dòng)畫組成
            一個(gè)動(dòng)畫由若干幀構(gòu)成
            每個(gè)動(dòng)畫都有自己的名字
            具體渲染的時(shí)候是對(duì)幀做插值的
            具體測試?yán)尤缦?

              1 #include <cstdlib>
              2 #include <iostream>
              3 #include <GEngine/Main.hpp>
              4 
              5 using namespace std;
              6 using namespace core; 
              7 core::RefPtr<core::Image>   skyimage[5];
              8 core::RefPtr<core::Texture> skytexture[5];
              9 core::RefPtr<core::Image>   terrainimage[2];
             10 core::RefPtr<core::Texture> terraintexture[2];
             11  
             12  
             13 int main(int argc, char *argv[])
             14 {   
             15     Device *device = InitDevice("蓋莫引擎md2模型測試");
             16     device->SetClearColor(core::Color(80,90,255));
             17    
             18     //! 獲取場景管理器 
             19     RefPtr<SceneManager> scenemanager = SceneManager::GetSceneManager(); 
             20                                                                  
             21     //! 獲取資源管理器 
             22     ResourceManager* resourcemanager = device->GetResourceManager();
             23     //! 獲取天空?qǐng)D片資源
             24     //! 獲取天空?qǐng)D形指針 
             25     skyimage[0= resourcemanager->GetImage("sky_front","..\\image//sky//front.jpg");
             26     skyimage[1= resourcemanager->GetImage("sky_back","..\\image//sky//back.jpg");
             27     skyimage[2= resourcemanager->GetImage("sky_left","..\\image//sky//left.jpg");
             28     skyimage[3= resourcemanager->GetImage("sky_right","..\\image//sky//right.jpg");
             29     skyimage[4= resourcemanager->GetImage("sky_top","..\\image//sky//top.bmp");
             30   
             31     skytexture[0= resourcemanager->GetTexture("sky_front",skyimage[0]);
             32     skytexture[1= resourcemanager->GetTexture("sky_back",skyimage[1]);        
             33     skytexture[2= resourcemanager->GetTexture("sky_left",skyimage[2]);
             34     skytexture[3= resourcemanager->GetTexture("sky_right",skyimage[3]);   
             35     skytexture[4= resourcemanager->GetTexture("sky_top",skyimage[4]); 
             36     //! 獲取天空盒指針
             37     RefPtr<SceneNode> skybox = scenemanager->GetSkyBox(NULL,skytexture[0],skytexture[1],skytexture[2],skytexture[3],skytexture[4],500,500,600);  
             38     
             39     //! 設(shè)置地形數(shù)據(jù)
             40     terrainimage[0= resourcemanager->GetImage("terrain_image","..\\terrain//terrain.bmp");
             41     terrainimage[1= resourcemanager->GetImage("terrain_detail","..\\terrain//detail.bmp");
             42     terraintexture[0= resourcemanager->GetTexture("terrain_texture1",terrainimage[0]);
             43     terraintexture[1= resourcemanager->GetTexture("terrain_texture2",terrainimage[1]);
             44     RefPtr<Terrain>  terrain = scenemanager->GetTerrain(NULL,"..\\terrain//terrain.raw",1024,terraintexture[0],terraintexture[1]); 
             45   
             46     int height = terrain->GetHeight(440,370);
             47     height += 40;
             48     //! 獲取新的攝像機(jī)并設(shè)置為活動(dòng)攝像機(jī)
             49     RefPtr<Camera> camera = scenemanager->CreateCamera("mycamera", Vector3f(10,height,10),
             50                                                                    Vector3f(512,height - 30,512),
             51                                                                    Vector3f(0,1,0));
             52     //! 設(shè)置當(dāng)前活動(dòng)攝像機(jī) 
             53     scenemanager->SetActiveCamera(camera);
             54     camera->SetViewport(0,0,640,480);  
             55     
             56     //! 霧設(shè)置
             57     RefPtr<Fog> fog = scenemanager->GetFog();
             58     fog->SetColor(core::Color(0.3f,0.5f,0.2f));
             59     fog->SetDensity(0.0012f);
             60     fog->SetQuality(0.004f);
             61     fog->SetBound(0.2f,1000.0f);
             62     fog->Render();
             63     
             64     RefPtr<ActiveModel3D> model = scenemanager->GetActiveModel("md2model");
             65     model->Load("..\\model\\hobgoblin.md2");
             66     RefPtr<Image>   md2image = resourcemanager->GetImage("md2image","..\\model//hobgoblin.bmp");
             67     RefPtr<Texture> md2texture = resourcemanager->GetTexture("md2texture",md2image);
             68     model->LoadTexture(md2texture);
             69     model->SetTranslate(Vector3f(180,10+terrain->GetHeight(112,512),180));
             70    
             71     std::vector<AnimationFrame> frames; 
             72     model->GetFrameList(frames);
             73  
             74     BEGIN_LOOP(device);
             75         camera->SetPerspective(45,640.0f/480.0f,6.0f,1000);
             76         camera->Render();
             77         skybox->Render();
             78         terrain->Render();
             79         model->Render();
             80         static int begin_frame = 0;
             81         static int end_frame = begin_frame+1;;
             82         static float t = 0.0f;
             83         t+=0.02;
             84         if(t>1)
             85         {
             86            t = 0
             87            end_frame++;
             88            begin_frame++;
             89         }
             90         if(begin_frame == frames.back().frame_end)
             91            end_frame = begin_frame = 0;
             92         model->SetCurrentFrame(begin_frame,end_frame,t);        
             93         
             94         static float angle = 0.0f;      
             95         skybox->SetRotate(core::AXIS_Z,angle);
             96         
             97         angle+=0.000003;
             98         if(angle>360)
             99            angle-=360;
            100     END_LOOP(device);
            101     
            102     device->Close();
            103     device->Drop();
            104     
            105     system("PAUSE");
            106     return EXIT_SUCCESS;
            107 }
            108 
            109 
            貼圖如下:這里的模型是源于opengl游戲開發(fā)一書
            再來一個(gè)Opengl3d游戲開發(fā)中士兵的模型例子如下(當(dāng)然我拿走了他的槍):

            我會(huì)先讓引擎具備常見的功能
            之后我就會(huì)考慮加入引擎自己的亮點(diǎn)和消除引擎存在的Bug
            當(dāng)然了各類編輯器的設(shè)計(jì)也是遲早的了
            再來一個(gè)機(jī)器人的md2模型
            posted @ 2010-02-10 11:34 ccsdu2009 閱讀(1519) | 評(píng)論 (0)編輯 收藏
             
                 摘要: 以前早就看過了如何使用opengl繪制3ds靜態(tài)對(duì)象的材料現(xiàn)在總把這個(gè)加入到引擎里面了具體代碼如下:  1 #include <cstdlib> 2 #include <iostream> 3 #include <GEngine/Main.hpp> 4 ...  閱讀全文
            posted @ 2010-02-09 17:27 ccsdu2009 閱讀(1197) | 評(píng)論 (0)編輯 收藏
             
            這是蓋莫游戲引擎中的坐標(biāo)系統(tǒng)和輸入系統(tǒng)測試的小例子代碼如下所示:
             1 #include <cstdlib>
             2 #include <iostream>
             3 #include <GEngine/Main.hpp>
             4 
             5 using namespace std;
             6 using namespace core; 
             7  
             8 int main(int argc, char *argv[])
             9 {   
            10     Device *device = InitDevice("蓋莫引擎坐標(biāo)系統(tǒng)測試");
            11     device->SetClearColor(core::Color(80,100,230));
            12     int x,y,z;
            13     //! 使用Opengl坐標(biāo)系統(tǒng) 
            14     core::CoordinateSystem cs(COORDINATE_OPENGL);
            15     device->SetCoordinateSystem(cs);
            16     
            17     //! 啟用2D渲染模式 
            18     device->Ortho2D();  
            19     //! 獲取資源管理器 
            20     core::ResourceManager* resmgr = device->GetResourceManager();
            21     core::RefPtr<core::Text> defont= resmgr->GetText("default_font"); 
            22     
            23     char text[255]; 
            24     char fpstext[20];
            25     float fps = device->GetFPS();
            26     BEGIN_LOOP(device);
            27         device->GetInput()->GetMousePosition(x,y,z);
            28         sprintf(text,"mouse position is :x = %d, y = %d,z = %d",x,y,z);
            29         fps = device->GetFPS();
            30         sprintf(fpstext,"fps is:%f",fps);
            31         defont->Render(20,20,text);
            32         defont->Render(540,20,fpstext);
            33     END_LOOP(device);
            34     
            35     device->Close();
            36     device->Drop();
            37     
            38     system("PAUSE");
            39     return EXIT_SUCCESS;
            40 }
            41 

            對(duì)于opengl坐標(biāo)系,其原點(diǎn)位于屏幕左下角
            當(dāng)前字體的渲染坐標(biāo)固定為x軸向右,y軸向下,以屏幕左上角為原點(diǎn)

             

            這是貼圖 不過看上去幀速有點(diǎn)偏低

            posted @ 2010-02-09 10:19 ccsdu2009 閱讀(237) | 評(píng)論 (0)編輯 收藏
            僅列出標(biāo)題
            共38頁: First 30 31 32 33 34 35 36 37 38 
             
            久久精品卫校国产小美女| 性高湖久久久久久久久| 久久精品女人天堂AV麻| 亚洲精品乱码久久久久久蜜桃| 一本色综合久久| 国产精品久久久久久久| 亚洲国产成人久久精品99| 久久久久人妻精品一区二区三区 | 色老头网站久久网| 日韩精品久久久久久久电影蜜臀| 91久久香蕉国产熟女线看| 少妇熟女久久综合网色欲| 99久久夜色精品国产网站| 一本色道久久88—综合亚洲精品| 国产午夜精品理论片久久影视| av色综合久久天堂av色综合在 | 人人狠狠综合久久亚洲高清| 97久久精品国产精品青草| 久久婷婷人人澡人人爽人人爱| 伊人久久精品线影院| 天天爽天天狠久久久综合麻豆| 尹人香蕉久久99天天拍| 欧美午夜A∨大片久久| 91性高湖久久久久| 青青草原综合久久| 国产精品久久久久久影院| 日韩人妻无码精品久久免费一 | 亚洲国产精品婷婷久久| 人妻少妇久久中文字幕一区二区| 久久久这里有精品| 久久久久高潮综合影院| 久久精品二区| 久久成人18免费网站| 久久99精品国产一区二区三区| 国产亚洲欧美精品久久久| 久久精品国产亚洲AV麻豆网站| 中文字幕久久精品无码| 亚洲国产精品成人久久| 国产美女久久精品香蕉69| 国产成人无码久久久精品一| 成人综合伊人五月婷久久|