• <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等多種語(yǔ)言 程序猿

            這是設(shè)計(jì)的蓋莫游戲引擎2.1.2的demo例子小試

            interface設(shè)計(jì)如下:
            以后還會(huì)修改之
            ///////////////////////////////////////////////////////////
            /// 定義渲染到紋理對(duì)象
            /////////////////////////////////////////////////////////// 
            class G_DLL_API RenderToTexture : public Renderable

            public:
                
            ////////////////////////////////////////////////////////
                //! 構(gòu)造,析構(gòu)渲染到紋理
                ////////////////////////////////////////////////////////
                RenderToTexture();
                
            virtual ~RenderToTexture();
            public:    
                
            ////////////////////////////////////////////////////////
                //! 設(shè)置渲染回調(diào)函數(shù)
                ////////////////////////////////////////////////////////    
                virtual void SetRenderCallBack(RenderCallBack rendertexture) = 0;
             
                
            ////////////////////////////////////////////////////////
                //! 設(shè)置渲染到紋理參數(shù) 
                ////////////////////////////////////////////////////////    
                virtual void SetPara(float fov,float near,float far) = 0;
                
                
            ////////////////////////////////////////////////////////
                //! 設(shè)置紋理清屏色,fbo色 
                ////////////////////////////////////////////////////////      
                virtual void SetClearColor(const Color& color) = 0
                
            virtual void SetFboColor(const Color& color) = 0
                
                DECLARE_OBJECT(RenderToTexture)  
            };

            }

            #endif 
            //! ccsdu2004


            測(cè)試代碼如下:

            #include <GEngine/Gaimo.hpp>
            using namespace std;
            using namespace core;

            RefPtr
            <Texture> boxtexture = NULL;
            RefPtr
            <Camera> camera = NULL;
            //! 獲取引擎視頻驅(qū)動(dòng)器
            RefPtr<VideoDriver> videodriver = NULL;

            //! 立方體繪制    
            void _RenderCube_(float color[6][4]);

            float color[6][4];
            float yaw_angle = 0.0f;
            float pitch_angle = 0.0f;

            void InitClearColor()
            {
                
            for(int i = 0; i < 6; i++)
                   
            for(int j = 0; j < 4; j++)
                      color[i][j] 
            = 0.8f;
             
                color[
            0][0= 0.5f;
                color[
            1][1= 0.5f;
                color[
            2][2= 0.5f;
                color[
            3][0= 0.5f;
                color[
            3][1= 0.5f;
                color[
            4][1= 0.5f;
                color[
            4][2= 0.5f;
                color[
            5][0= 0.5f;        
            }

            void G_CALL draw()
            {
                videodriver
            ->SetPilotView(0.0f,0.0f,5.0f,-55.0f,-pitch_angle,-yaw_angle);
                _RenderCube_(color);
            }

            int main(int argc, char **argv)
            {
                
            //! 初始化引擎設(shè)備并得到設(shè)備指針
                RefPtr<Device> device = core::InitDevice("渲染到紋理");
                
            //! 得到引擎場(chǎng)景指針
                RefPtr<SceneManager> scenemanager = device->GetSceneManager();
                
            //! 得到引擎資源指針
                RefPtr<ResourceManager> resourcemanager = device->GetResourceManager();
                
            //! 獲取引擎紋理管理器指針
                RefPtr<TextureManager> texturemanager = resourcemanager->GetTextureManager(); 
                
            //! 獲取光管理器指針
                RefPtr<LightManager> lightmanager = resourcemanager->GetLightManager();    
                
                
            //! 獲取引擎圖形管理器
                RefPtr<ImageManager>   imagemanager = resourcemanager->GetImageManager();
                
            //! 獲取引擎視頻驅(qū)動(dòng)器
                videodriver = device->GetVideoDriver();
                glEnable(GL_TEXTURE_2D);
                
                
            //! 啟用環(huán)境光
                lightmanager->RenderGlobalAmbient(false); 
                
            //! 啟用光源
                lightmanager->EnableLight();    
                
            //! 獲取光指針
                RefPtr<Light> light = lightmanager->CreateObject("rttlight","..\\script//rtt.lua","light"); 
                
                
            //! 獲取全局?jǐn)z像機(jī),設(shè)置攝像機(jī)參數(shù) 
                camera = scenemanager->GetActiveCamera();
                camera
            ->SetPosition(Vector3f(0,0,18));
                camera
            ->SetView(Vector3f(0,0,0));
                camera
            ->SetDirection(Vector3f(0,1,0));
                
                camera
            ->SetViewPort(Recti(0,0,640,480));
                camera
            ->SetPerspective(50.0f,640.0f/480.0f,1.0f,100.0f);

                InitClearColor();
                
                RefPtr
            <RenderToTexture> rtt = device->GetRenderer()->GetRenderToTexture(&draw);
                rtt
            ->SetClearColor(Color(0.2f,0.2f,0.7f,0.5f));
                rtt
            ->SetFboColor(Color(1.0f,0.9f,0.7f,0.6f));

                light
            ->Render();
             
                BEGIN_LOOP(device)
                   
            //camera->Render();
                       yaw_angle += 0.3f;
                    pitch_angle 
            += 0.21f;
                    rtt
            ->Render();
                END_LOOP(device)
                
                
            //delete fbo;

                
            return 0;
            }

            //! 立方體繪制    
            void _RenderCube_(float color[6][4])
            {    
                
            //! draw cube
                glEnable(GL_COLOR_MATERIAL);
                
                glColor4fv(color[
            0]);
                glBegin(GL_TRIANGLE_STRIP);
                    glNormal3f(
            0.0f0.0f-1.0f);
                    glTexCoord2f(
            0.0f0.0f);
                    glVertex3f(
            -1.0f-1.0f-1.0f);
                    glTexCoord2f(
            1.0f0.0f);
                    glVertex3f(
            1.0f-1.0f-1.0f);
                    glTexCoord2f(
            0.0f1.0f);
                    glVertex3f(
            -1.0f1.0f-1.0f);
                    glTexCoord2f(
            1.0f1.0f);
                    glVertex3f(
            1.0f1.0f-1.0f);
                glEnd();
                
                glColor4fv(color[
            1]);
                glBegin(GL_TRIANGLE_STRIP);
                    glNormal3f(
            1.0f0.0f0.0f);
                    glTexCoord2f(
            0.0f0.0f);
                    glVertex3f(
            1.0f-1.0f-1.0f);
                    glTexCoord2f(
            1.0f0.0f);
                    glVertex3f(
            1.0f-1.0f1.0f);
                    glTexCoord2f(
            0.0f1.0f);
                    glVertex3f(
            1.0f1.0f-1.0f);
                    glTexCoord2f(
            1.0f1.0f);
                    glVertex3f(
            1.0f1.0f1.0f);
                glEnd();
                
                glColor4fv(color[
            2]);
                glBegin(GL_TRIANGLE_STRIP);
                    glNormal3f(
            0.0f0.0f1.0f);
                    glTexCoord2f(
            0.0f0.0f);
                    glVertex3f(
            1.0f-1.0f1.0f);
                    glTexCoord2f(
            1.0f0.0f);
                    glVertex3f(
            -1.0f-1.0f1.0f);
                    glTexCoord2f(
            0.0f1.0f);
                    glVertex3f(
            1.0f1.0f1.0f);
                    glTexCoord2f(
            1.0f1.0f);
                    glVertex3f(
            -1.0f1.0f1.0f);
                glEnd();
                
                glColor4fv(color[
            3]);
                glBegin(GL_TRIANGLE_STRIP);
                    glNormal3f(
            -1.0f0.0f0.0f);
                    glTexCoord2f(
            0.0f0.0f);
                    glVertex3f(
            -1.0f-1.0f1.0f);
                    glTexCoord2f(
            1.0f0.0f);
                    glVertex3f(
            -1.0f-1.0f-1.0f);
                    glTexCoord2f(
            0.0f1.0f);
                    glVertex3f(
            -1.0f1.0f1.0f);
                    glTexCoord2f(
            1.0f1.0f);
                    glVertex3f(
            -1.0f1.0f-1.0f);
                glEnd();
                
                glColor4fv(color[
            4]);
                glBegin(GL_TRIANGLE_STRIP);
                    glNormal3f(
            0.0f-1.0f0.0f);
                    glTexCoord2f(
            0.0f0.0f);
                    glVertex3f(
            -1.0f-1.0f1.0f);
                    glTexCoord2f(
            1.0f0.0f);
                    glVertex3f(
            1.0f-1.0f1.0f);
                    glTexCoord2f(
            0.0f1.0f);
                    glVertex3f(
            -1.0f-1.0f-1.0f);
                    glTexCoord2f(
            1.0f1.0f);
                    glVertex3f(
            1.0f-1.0f-1.0f);
                glEnd();
                
                glColor4fv(color[
            5]);
                glBegin(GL_TRIANGLE_STRIP);
                    glNormal3f(
            0.0f1.0f0.0f);
                    glTexCoord2f(
            0.0f0.0f);
                    glVertex3f(
            -1.0f1.0f-1.0f);
                    glTexCoord2f(
            1.0f0.0f);
                    glVertex3f(
            1.0f1.0f-1.0f);
                    glTexCoord2f(
            0.0f1.0f);
                    glVertex3f(
            -1.0f1.0f1.0f);
                    glTexCoord2f(
            1.0f1.0f);
                    glVertex3f(
            1.0f1.0f1.0f);
                glEnd();
            }

            貼圖為:

            .

            ....................................................................................................................................................................
            繼續(xù).
            posted @ 2010-05-08 21:13 ccsdu2009 閱讀(1421) | 評(píng)論 (2)編輯 收藏
             
            這是蓋莫游戲引擎2.1.2中GUI之2-GUI刷子
            該對(duì)象提供對(duì)2d基本圖元的繪制和操作
            提供以下功能
            1.點(diǎn)繪制
            2.線段繪制
            3.矩形繪制
            4.三角形繪制
            5.紋理渲染
            以后還會(huì)加入更多的功能

            其功能大致相當(dāng)于UI lib中的Graphics,
            Glooery中的Renderer
            以及GUI Chart中的Graphics!

            其接口如下:
            ////////////////////////////////////////////////////////////
            /// 定義引擎GUI刷子(提供簡(jiǎn)單的幾何體繪制操作)
            ////////////////////////////////////////////////////////////
            class G_DLL_API GuiBrush : public Object
            {
            public:
                
            ////////////////////////////////////////////////////////
                
            /// GUI刷子構(gòu)造,析構(gòu)
                
            ////////////////////////////////////////////////////////
                GuiBrush();
                
            virtual ~GuiBrush();
            public:
                
            ////////////////////////////////////////////////////////
                
            /// 設(shè)置GUI刷子顏色
                
            ////////////////////////////////////////////////////////
                virtual void SetBrushColor(const Color& color) = 0;
               
                
            //////////////////////////////////////////////////////////
                
            /// 設(shè)置刷子線寬
                
            //////////////////////////////////////////////////////////         
                virtual void  SetLineWidth(float width) = 0;
                
            virtual float GetMaxLineWidth()const = 0;
                
            virtual float GetLineWidth()const = 0;     
               
                
            //////////////////////////////////////////////////////////
                
            /// 繪制一個(gè)點(diǎn)
                
            //////////////////////////////////////////////////////////     
                virtual void RenderPoint(const Point& point) = 0;   
                
            virtual void RenderPoint(const Vector2f& point) = 0;   
                
            virtual void RenderPoint(int x,int y) = 0;   
                
            virtual void RenderPoint(float x,float y) = 0;
               
                
            ////////////////////////////////////////////////////////
                
            /// 繪制一個(gè)線段
                
            ////////////////////////////////////////////////////////   
                virtual void RenderLine(const Vector2f& from, const Vector2f& to) = 0;
                
            virtual void RenderLine(const Point& from, const Point& to) = 0;
               
                
            ////////////////////////////////////////////////////////
                
            /// 繪制一個(gè)矩陣框(填充與否)
                
            ////////////////////////////////////////////////////////
                virtual void RenderRect(const Recti& rect, bool fill = true= 0;
                
            virtual void RenderRect(const Rectf& rect, bool fill = true= 0;
               
                
            ////////////////////////////////////////////////////////
                
            /// 繪制一個(gè)三角形
                
            ////////////////////////////////////////////////////////   
                virtual void RenderTriangle(const Vector2f& p1,const Vector2f& p2,const Vector2f& p3, bool fill = true= 0;
                
            virtual void RenderTriangle(const Point& p1,const Point& p2,const Point& p3, bool fill = true= 0;
               
                
            //////////////////////////////////////////////////////////
                
            /// 繪制一個(gè)園,園扇(segments為邊數(shù))
                
            //////////////////////////////////////////////////////////   
                virtual void RenderCircle(const Vector2f& center,float radius,int segments = 32= 0;
                
            virtual void RenderCircleSegment(const Vector2f& center,float radius,float angle1,float angle2,int segments = 32,bool filled = true= 0;

                
            ////////////////////////////////////////////////////////
                
            /// 渲染紋理
                
            ////////////////////////////////////////////////////////  
                virtual void RenderTexture(float x,float y,float w,float h) = 0;  
                
            virtual void RenderTexture(const Rectf& rect) = 0;

                DECLARE_OBJECT(GuiBrush)
            };

            可以看出比較簡(jiǎn)單 沒(méi)有什么復(fù)雜的東西!

            在GUI部分
            引擎還會(huì)陸續(xù)加入以下對(duì)象
            1.Widget 基本控件單元
            2.Border 控件裝飾器
            3.Layout 控件布局管理器
            4.UIManager UI管理器
            5.UIEvent UI消息事件
            6.WidgetSort 提供對(duì)控件的深度排序
            可能還會(huì)加入U(xiǎn)ISurface以提供對(duì)控件表面的裝飾效果

            引擎UI需要達(dá)到的高度
            1.控件組動(dòng)態(tài)生成(要求源于xml config file)
            2.控件自布局
            3.靈活簡(jiǎn)單易用
            4.UI引擎和引擎的低聚合
            .....
            posted @ 2010-05-08 09:23 ccsdu2009 閱讀(1006) | 評(píng)論 (0)編輯 收藏
             
            這是剛寫的渲染到紋理代碼 還有點(diǎn)問(wèn)題 以后慢慢修改吧
            先上interface
            ///////////////////////////////////////////////////////////
            /// 定義渲染到紋理對(duì)象
            /////////////////////////////////////////////////////////// 
            class G_DLL_API RenderToTexture : public Renderable

            public:
                
            ////////////////////////////////////////////////////////
                //! 構(gòu)造,析構(gòu)渲染到紋理
                ////////////////////////////////////////////////////////
                RenderToTexture();
                
            virtual ~RenderToTexture();
            public:    
                
            ////////////////////////////////////////////////////////
                //! 設(shè)置渲染紋理,目標(biāo)回調(diào)函數(shù)
                ////////////////////////////////////////////////////////    
                virtual void SetRenderTexture(RenderCallBack rendertexture) = 0;
                
            virtual void SetRenderTarget(RenderCallBack rendertarget) = 0;
             
                
            ////////////////////////////////////////////////////////
                //! 設(shè)置渲染攝像機(jī)透視參數(shù)
                ////////////////////////////////////////////////////////    
                virtual void SetRenderPara(float fov,float near,float far) = 0;
                
                
            ////////////////////////////////////////////////////////
                //! 設(shè)置紋理清屏色 
                ////////////////////////////////////////////////////////      
                virtual void SetClearColor(const Color& color) = 0
                
                DECLARE_OBJECT(RenderToTexture)  
            };

            下面是測(cè)試的例子代碼:
            #include <GEngine/Gaimo.hpp>
            using namespace std;
            using namespace core;

            RefPtr
            <Texture> boxtexture = NULL;
            RefPtr
            <Camera> camera = NULL;
            //! 獲取引擎視頻驅(qū)動(dòng)器
            RefPtr<VideoDriver> videodriver = NULL;

            ///////////////////////////////////////////////////////////////////////////////
            // 渲染回調(diào)函數(shù) 
            ///////////////////////////////////////////////////////////////////////////////
            void G_CALL Render()
            {   
               glBegin(GL_QUADS);
                    glTexCoord2f(
            11);
                    glVertex2f( 
            11);
                    glTexCoord2f(
            01);
                    glVertex2f(
            -51);
                    glTexCoord2f(
            00);
                    glVertex2f(
            -5,-5);
                    glTexCoord2f(
            10);
                    glVertex2f( 
            1,-5);
                    
                    glTexCoord2f(
            11);
                    glVertex2f(
            33);
                    glTexCoord2f(
            01);
                    glVertex2f(
            -3,3);
                    glTexCoord2f(
            00);
                    glVertex2f(
            -3,-3);
                    glTexCoord2f(
            10);
                    glVertex2f(
            3,-3);        
                glEnd(); 
            }

            ///////////////////////////////////////////////////////////////////////////////
            //  
            ///////////////////////////////////////////////////////////////////////////////
            void G_CALL RenderTexture()
            {   
                boxtexture
            ->AttachRenderTarget();
                glBegin(GL_QUADS);
                    glTexCoord2f(
            11);  
                    glVertex2f(
            0,0);
                    glTexCoord2f(
            01);  
                    glVertex2f(
            -8,0);
                    glTexCoord2f(
            00);  
                    glVertex2f(
            -8,-8);
                    glTexCoord2f(
            10);  
                    glVertex2f(
            0,-8);
                glEnd();
            }

            int main(int argc, char **argv)
            {
                
            //! 初始化引擎設(shè)備并得到設(shè)備指針
                RefPtr<Device> device = core::InitDevice("渲染到紋理");
                
            //! 得到引擎場(chǎng)景指針
                RefPtr<SceneManager> scenemanager = device->GetSceneManager();
                
            //! 得到引擎資源指針
                RefPtr<ResourceManager> resourcemanager = device->GetResourceManager();
                
            //! 獲取引擎紋理管理器指針
                RefPtr<TextureManager> texturemanager = resourcemanager->GetTextureManager(); 
                
            //! 獲取引擎圖形管理器
                RefPtr<ImageManager>   imagemanager = resourcemanager->GetImageManager();
                
            //! 獲取引擎視頻驅(qū)動(dòng)器
                videodriver = device->GetVideoDriver();
                
                
            //! 得到tile圖形和其紋理
                core::RefPtr<Image>   box = imagemanager->CreateObject("cube","..\\image//logo.bmp");
                boxtexture 
            = texturemanager->CreateObject("cube",box);
                boxtexture
            ->Generate();
                
                
            //! 獲取全局?jǐn)z像機(jī),設(shè)置攝像機(jī)參數(shù) 
                camera = scenemanager->GetActiveCamera();
                camera
            ->SetPosition(Vector3f(0,0,18));
                camera
            ->SetView(Vector3f(0,0,0));
                camera
            ->SetDirection(Vector3f(0,1,0));
                
                camera
            ->SetViewPort(Recti(0,0,640,480));
                camera
            ->SetPerspective(50.0f,640.0f/480.0f,1.0f,100.0f);
                videodriver
            ->EnableCulling(); 
                
                
            //! 獲取渲染到紋理指針
                RefPtr<RenderToTexture> render = device->GetRenderer()->GetRenderToTexture(256,256);
                render
            ->SetRenderTexture(&RenderTexture);
                render
            ->SetRenderTarget(&Render);
                render
            ->SetClearColor(Color::Blue);
                render
            ->SetRenderPara(45.0f,1.0f,100.0f);
             
                BEGIN_LOOP(device)
                   camera
            ->Render();
                   render
            ->Render();
                END_LOOP(device)

                
            return 0;
            }

            貼圖比較簡(jiǎn)單就不上了 這個(gè)以后還要修改之!
            posted @ 2010-05-07 17:01 ccsdu2009 閱讀(260) | 評(píng)論 (1)編輯 收藏
             

             

            這是蓋莫游戲引擎2.1.2的游標(biāo)控制類
            該類主要負(fù)責(zé)游標(biāo)圖形 游標(biāo)顯示和設(shè)置游標(biāo)位置
            比較簡(jiǎn)單直接上代碼不說(shuō)啥了

            namespace core 
            {

            ////////////////////////////////////////////////////////////
            /// 定義引擎游標(biāo)控制類(當(dāng)前最大支持8個(gè)光標(biāo))(當(dāng)前僅對(duì)win32有效)
            ////////////////////////////////////////////////////////////
            class G_DLL_API CursorControl : public Object
            {   
            public:     
                
            //////////////////////////////////////////////////////// 
                
            /// 構(gòu)造,析構(gòu)游標(biāo)控制
                
            ////////////////////////////////////////////////////////
                CursorControl();
                
            virtual ~CursorControl();

            public:    
                
            //////////////////////////////////////////////////////// 
                
            /// 載入光標(biāo)文件(win32下可載入.cur,.ani,.ico格式)(返回光標(biāo)索引)
                
            ////////////////////////////////////////////////////////        
                virtual int OpenCursor(const engine_string& cursor) = 0;
             
                
            //////////////////////////////////////////////////////// 
                
            /// 設(shè)置給定索引的光標(biāo)
                
            //////////////////////////////////////////////////////// 
                virtual bool SetCursor(int cursor) = 0;

                
            //////////////////////////////////////////////////////// 
                
            /// 光標(biāo)的顯示和隱藏
                
            //////////////////////////////////////////////////////// 
                virtual void ShowCursor(bool show) = 0
                
                
            //////////////////////////////////////////////////////// 
                
            /// 設(shè)置光標(biāo)位置
                
            ////////////////////////////////////////////////////////     
                virtual void SetCursotPosition(int x, int y) = 0;
             
                DECLARE_OBJECT(CursorControl)    
            };
            posted @ 2010-05-06 16:56 ccsdu2009 閱讀(218) | 評(píng)論 (0)編輯 收藏
             
                 摘要: 好幾天沒(méi)寫博客了接著以前寫的Loki系列來(lái)首先Loki Factory設(shè)計(jì)的目的就是讓對(duì)象功能按名生成!該文主要涉及Loki/Factory.h文件首先上工廠異常類如下: /** * \defgroup    FactoryErrorPoliciesGroup Factory Error Policies&...  閱讀全文
            posted @ 2010-05-05 21:29 ccsdu2009 閱讀(2085) | 評(píng)論 (6)編輯 收藏
             
                 摘要: 蓋莫音頻引擎1.2.8的上次發(fā)布版本為1.1.2版本當(dāng)前發(fā)布版本增加功能如下:1.對(duì)音頻錄入的支持2.對(duì)xm,mod,it,s3m的支持3.修改了一些內(nèi)部實(shí)現(xiàn)總的說(shuō)來(lái)本引擎(API)功能如下:1.支持ogg,mp3,wav,xm,it,s3m,mod格式2.基于多線程流式播放音頻3.真3d音效4.支持低通,次級(jí)音效本音頻引擎完全勝任游戲開(kāi)發(fā),嵌入式設(shè)備等商業(yè)應(yīng)用!本音頻引擎使用于商業(yè)用途只需要付出...  閱讀全文
            posted @ 2010-04-27 14:39 ccsdu2009 閱讀(1365) | 評(píng)論 (0)編輯 收藏
             

            剛做完了蓋莫音頻引擎1.2.8的音頻錄入功能
            這個(gè)比較簡(jiǎn)單
            就是把聽(tīng)到的音頻保存為一定格式的音頻文件(當(dāng)前只設(shè)計(jì)了保存為wav文件)

            接口很簡(jiǎn)單
            如下:

            ////////////////////////////////////////////////////////////
            /// 定義音頻錄入類接口
            //////////////////////////////////////////////////////////// 
            class AudioCapture : public Object  
            {
            public:
                
            /////////////////////////////////////////////////////////
                //! 構(gòu)造,析構(gòu)音頻錄入 
                /////////////////////////////////////////////////////////       
                AudioCapture();
                
            virtual ~AudioCapture();
                
                
            /////////////////////////////////////////////////////////
                //! 捕獲,停止捕獲音頻數(shù)據(jù) 
                /////////////////////////////////////////////////////////     
                virtual void CaptureData() = 0;    
                
            virtual void StopCapture() = 0;
                
                   DECLARE_OBJECT(AudioCapture)       
            };
            只有2個(gè)函數(shù)
            一個(gè)是音頻數(shù)據(jù)分批錄入
            一個(gè)就是停止錄入音頻數(shù)據(jù)
            那么該指針從哪里獲取呢?
            當(dāng)然是AudioDevice了

            如下(這是蓋莫音頻引擎的中樞)
            /////////////////////////////////////////////////////////
            //! 定義音頻設(shè)備基類
            /////////////////////////////////////////////////////////
            class AudioDevice : public Object 
            {
            public:
                
            /////////////////////////////////////////////////////////
                //! 初始化,卸載音頻設(shè)備 
                /////////////////////////////////////////////////////////       
                virtual bool Init(const  engine_string &devicename,
                                  uint16 eax_effect_num, 
                                  
            uint   output_freq) = 0
                
            virtual bool Deinit() = 0;        
                
            /////////////////////////////////////////////////////////
                //! 獲取音頻引擎版本號(hào)
                /////////////////////////////////////////////////////////
                virtual const char* GetVerson() const = 0;

                
            /////////////////////////////////////////////////////////
                //! 獲取音頻引擎作者
                /////////////////////////////////////////////////////////
                virtual const char* GetMaker() const = 0;

                
            /////////////////////////////////////////////////////////
                //! 查詢音頻設(shè)備是否支持指定格式的音頻文件
                /////////////////////////////////////////////////////////
                virtual bool IsSupport(const AudioFileType& type) = 0;

                
            /////////////////////////////////////////////////////////
                //! 抓取音頻音源指針(最大可獲取255個(gè)音源)
                /////////////////////////////////////////////////////////
                virtual AudioSource*  GetAudioSource() = 0;

                
            /////////////////////////////////////////////////////////
                //! 獲取聽(tīng)者指針 
                /////////////////////////////////////////////////////////
                virtual AudioListener* GetAudioListener() = 0
                
                
            /////////////////////////////////////////////////////////
                //! 獲取音頻捕獲設(shè)備指針(參數(shù)為音頻名字)(當(dāng)前僅僅支持wav格式)(全局唯一) 
                /////////////////////////////////////////////////////////     
                virtual RefPtr<AudioCapture> GetAudioCapture(const engine_string& name = "capture")const = 0;     
                
                
            /////////////////////////////////////////////////////////
                //! 獲取音頻設(shè)備列表個(gè)數(shù) 
                /////////////////////////////////////////////////////////
                virtual uint16 GetAudioDeviceNumber() = 0;  
                
            virtual engine_string GetDeviceByIndex(uint8 index) = 0;  
                
                
            /////////////////////////////////////////////////////////
                //! 獲取默認(rèn)設(shè)備名 
                /////////////////////////////////////////////////////////    
                virtual engine_string GetDefaultDeviceName()const = 0;   
                
                DECLARE_OBJECT(AudioDevice)
            };

            那么如何使用蓋莫音頻引擎錄入音頻呢?
            如下:
            /*!==========================================================================
             *
             *  蓋莫游戲引擎(GaiMo Game Engine)
             *
             *  版權(quán)所有 (C) 2009-2009 成都蓋莫軟件技術(shù)工作室 保留所有權(quán)利
             *  Copyright (C) 成都蓋莫軟件技術(shù)工作室.  All Rights Reserved.
             *
             *  了解更多情況,請(qǐng)?jiān)L問(wèn) 
            http://www.gaimo.net
             ***************************************************************************
            */
            #include 
            <GEngine/Gaimo.hpp>

            //! 使用蓋莫游戲引擎內(nèi)核命名空間 
            using namespace core;
            using namespace std;
             
            int Main()
            {
                RefPtr
            <Device> device = InitDevice("音頻捕獲");
                
            //! 獲取音頻設(shè)備指針
                RefPtr<core::AudioDevice> audiodevice = device->GetAudioDevice();
                
            //! 獲取音頻設(shè)備個(gè)數(shù)
                uint16 number = audiodevice->GetAudioDeviceNumber(); 
                
            for(int i = 0; i < number ; i++
                {
                    std::cout
            <<audiodevice->GetDeviceByIndex(i)<<std::endl;        
                }  
                
            //! 初始化音頻設(shè)備 
                engine_string audiodeviceinde = audiodevice->GetDeviceByIndex(0);
                cout
            <<"初始化音頻設(shè)備"<<audiodevice->Init(audiodeviceinde,4,0)<<endl;  
                
                
            //! 獲取音頻錄入指針
                RefPtr<AudioCapture> audiocapture = audiodevice->GetAudioCapture("capture"); 
                
                
            //! 獲取錄制開(kāi)始時(shí)間
                float time = device->GetTime(); 
                
                BEGIN_LOOP(device)
                    
            //! 錄制時(shí)間10秒 
                    if(device->GetTime() > time +10)
                        
            break
                    audiocapture
            ->CaptureData(); 
                      
                END_LOOP(device)
                
                audiocapture
            ->StopCapture();
                
            return EXIT_SUCCESS;
            }
            步驟就是從設(shè)備指針獲取音頻管理器指針
            從音頻管理器指針獲取音頻錄入指針
            然后在錄入過(guò)程中調(diào)用數(shù)據(jù)錄入函數(shù)
            停止錄入的時(shí)候調(diào)用StopAudioCapture即可!

            當(dāng)然這是基于蓋莫游戲引擎的音頻錄入
            過(guò)些天我要發(fā)布一個(gè)單獨(dú)的蓋莫音頻引擎sdk(第三次發(fā)布)

            題外話
            在蓋莫游戲引擎2.1.2中音頻部分需要增加的功能就是對(duì)midi,mid.mod系列音樂(lè)文件的支持了
            (不過(guò)聽(tīng)人說(shuō)這個(gè)解碼似乎不太好處理)

            到時(shí)候歡迎下載啊
            posted @ 2010-04-24 18:18 ccsdu2009 閱讀(1228) | 評(píng)論 (2)編輯 收藏
             
            順手翻了下3d游戲引擎設(shè)計(jì)實(shí)時(shí)計(jì)算機(jī)圖形學(xué)的應(yīng)用方法這本書(英文本第二版)
            在其800page.18.4章的
            template<class T>
            class Stack中這兒有一個(gè)小錯(cuò)誤
            就是
            在函數(shù)
            bool Push..
            中間 其判斷條件是錯(cuò)誤的
            對(duì)于這個(gè)類模板
            我把它成了了蓋莫引擎死板的風(fēng)格
            如下:
            ///////////////////////////////////////////////////////////
            /// 定義引擎棧模板類
            ///////////////////////////////////////////////////////////
            template<class T>
            class Stack : NonCopyable
            {
            public:
                
            ///////////////////////////////////////////////////////
                
            /// 構(gòu)造,析構(gòu)棧模板
                
            ///////////////////////////////////////////////////////
                Stack(int maxsize);
                
            ~Stack();
            public:     
                
            ///////////////////////////////////////////////////////
                
            /// 數(shù)據(jù)入棧
                
            ///////////////////////////////////////////////////////
                bool Push(const T& element);
                
                
            ///////////////////////////////////////////////////////
                
            /// 數(shù)據(jù)出棧
                
            ///////////////////////////////////////////////////////    
                bool Pop(T& element);
                
                
            //////////////////////////////////////////////////////////
                
            /// 獲取棧頂元素
                
            //////////////////////////////////////////////////////////     
                bool GetTop(T& element)const;
                            
                
            ///////////////////////////////////////////////////////
                
            /// 檢查棧是否為空棧,滿棧
                
            ///////////////////////////////////////////////////////    
                bool IsEmpty()const;
                
            bool IsFull()const;
            private:
                
            int  maxsize;
                
            int  top;
                T
            *   data;    
            };

            #include 
            <GEngine/Template/Stack.inl>
            in stack.inl
            ///////////////////////////////////////////////////////
            /// 構(gòu)造,析構(gòu)棧模板
            ///////////////////////////////////////////////////////
            template<class T>
            Stack
            <T>::Stack(int maxsize):
            top(
            -1)
            {
                ASSERT(maxsize 
            > 0);
                
            this->maxsize = maxsize;
                data 
            = new T[this->maxsize];    
            }

            template
            <class T>
            Stack
            <T>::~Stack()
            {
                CHECK_PTR_ARRAY_AND_DELETE(data);
            }
                 
            ///////////////////////////////////////////////////////
            /// 數(shù)據(jù)入棧
            ///////////////////////////////////////////////////////
            template<class T>
            inline 
            bool Stack<T>::Push(const T& element)
            {
                
            if(top < maxsize-1)
                {
                    data[
            ++top] = element;
                    
            return true
                }
                
            return false;
            }
                
            ///////////////////////////////////////////////////////
            /// 數(shù)據(jù)出棧
            ///////////////////////////////////////////////////////    
            template<class T>
            inline 
            bool Stack<T>::Pop(T& element)
            {
                
            if(top >=0)
                {
                    element 
            = data[top--];
                    
            return true;
                }
                
            return false;
            }
                
            //////////////////////////////////////////////////////////
            /// 獲取棧頂元素
            //////////////////////////////////////////////////////////     
            template<class T>
            inline 
            bool Stack<T>::GetTop(T& element)const
            {
                
            if(top >= 0)
                {
                    element 
            = data[top];
                    
            return true
                }
                
            return false;
            }
                            
            ///////////////////////////////////////////////////////
            /// 檢查棧是否為空棧,滿棧
            ///////////////////////////////////////////////////////    
            template<class T>
            inline 
            bool Stack<T>::IsEmpty()const
            {
                
            return top == -1;
            }

            template
            <class T>
            inline 
            bool Stack<T>::IsFull()const
            {
                
            return top == maxsize-1;
            }
                
                
                
                
                
                

            posted @ 2010-04-23 19:11 ccsdu2009 閱讀(388) | 評(píng)論 (0)編輯 收藏
             
            從2008年年底我就一直想設(shè)計(jì)一套基于OpenGL的游戲?qū)S肎UI系統(tǒng)出來(lái)
            當(dāng)然有人說(shuō)現(xiàn)在不是有現(xiàn)成的嗎?CEGUI...
            使用這個(gè)當(dāng)然沒(méi)什么問(wèn)題
            但是覺(jué)得自己開(kāi)發(fā)的游戲引擎還是配備一個(gè)套自行開(kāi)發(fā)的GUI系統(tǒng)比較好(比如irr)
            當(dāng)然在下面使用若干子庫(kù)(比如freetype,sigc++等等)還是沒(méi)有問(wèn)題的
            也是從那個(gè)時(shí)候看了很多GUI系統(tǒng),比如CEGUI,MyGUI,GLOOEY,UFO GUI,UI LIB 等等
            之后我開(kāi)始設(shè)計(jì)了一個(gè)套GUI系統(tǒng)但是感覺(jué)問(wèn)題多多
            一個(gè)主要的問(wèn)題就是沒(méi)有處理好事件

            現(xiàn)在重新看UI系統(tǒng)
            設(shè)計(jì)她的前置條件有
            1.良好的字體渲染器
            2.對(duì)象系列化
            3.中文輸入.
            4.其它

            UI系統(tǒng)應(yīng)該包括的內(nèi)容(個(gè)人感覺(jué))
            1.UI事件
            2.UI工廠(或者管理器)
            3.UI控件對(duì)象(按鍵,組合框等等)
            4.UI邊框(裝飾器)
            5.UI布局管理器
            6.其它

            故從蓋莫引擎2.1.2版本起我會(huì)逐步加入新設(shè)計(jì)的GUI引擎

            下面是我的開(kāi)胃菜
            GUI主題色
            設(shè)置這個(gè)的目的是為了統(tǒng)一GUI控件顏色而不需要一個(gè)一個(gè)設(shè)計(jì)它
            下面是實(shí)現(xiàn)很簡(jiǎn)單的!
            class G_DLL_API UIThemeColor : public Object
            {   
            public:
                
            //////////////////////////////////////////////////////// 
                
            /// 獲取默認(rèn)主題色
                
            ////////////////////////////////////////////////////////
                static UIThemeColor GetDefaultTheme();
            public:     
                
            //////////////////////////////////////////////////////// 
                
            /// 構(gòu)造,析構(gòu)主題色
                
            ////////////////////////////////////////////////////////
                UIThemeColor();
                UIThemeColor(
            const Color &normal,const Color &disable,const Color &focus,const Color &tagged);
                UIThemeColor(UIThemeColor 
            &theme);
                
            ~UIThemeColor(){}
                
                
            //////////////////////////////////////////////////////// 
                
            /// 使用默認(rèn)主題色
                
            ////////////////////////////////////////////////////////    
                void UseDefaultTheme();
                
                
            //////////////////////////////////////////////////////// 
                
            /// 重新設(shè)置,獲取主題色
                
            ////////////////////////////////////////////////////////    
                void SetThemeColor(const Color &normal,const Color &disable,const Color &focus,const Color &tagged); 
                
            void GetThemeColor(Color &normal,Color &disable,Color &focus,Color &tagged);  
                
                
            //////////////////////////////////////////////////////// 
                
            /// 設(shè)置,獲取主題正常色 
                
            ////////////////////////////////////////////////////////
                void  SetNormalColor(const Color &color){this->color[0= color;}
                Color GetNormalColor()
            const{return color[0];}
                
                
            //////////////////////////////////////////////////////// 
                
            /// 設(shè)置,獲取主題不可用色
                
            ////////////////////////////////////////////////////////
                void  SetDisableColor(const Color &color){this->color[1= color;}
                Color GetDisableColor()
            const{return color[0];}
                
                
            //////////////////////////////////////////////////////// 
                
            /// 設(shè)置,獲取主題聚焦顏色
                
            ////////////////////////////////////////////////////////
                void  SetFocusColor(const Color &color){this->color[2= color;}
                Color GetFocusColor()
            const{return color[2];}
                
                
            //////////////////////////////////////////////////////// 
                
            /// 設(shè)置,獲取主題(被選中的)顏色
                
            ////////////////////////////////////////////////////////
                void  SetTaggedColor(const Color &color){this->color[3= color;}
                Color GetTaggedColor()
            const{return color[3];}
            private:    
                
            static UIThemeColor themecolor;
                
            //! 當(dāng)前保留一個(gè)空的顏色值
                static const int    themecolor_number = 5
                Color               color[themecolor_number];


            然后每個(gè)控件包含一個(gè)主題色對(duì)象
            (當(dāng)前這里認(rèn)為控件有4個(gè)狀態(tài).正常,禁止,聚焦,選中)

            posted @ 2010-04-21 18:46 ccsdu2009 閱讀(1614) | 評(píng)論 (4)編輯 收藏
             
            這是使用蓋莫游戲引擎2.1.2測(cè)試環(huán)境映射的demo
            對(duì)opengl而言
            環(huán)境映射主要就圍繞函數(shù)glTexEnv工作的
            但是其實(shí)現(xiàn)起來(lái)不是那么容易
            該測(cè)試?yán)釉从?.1.1版本demo中的球面映射一例
            增加的代碼為:
                RefPtr<TexEnv>  texenv = reflect->GetTexEnv(); 
                texenv
            ->SetEnvColor(Color::Blue);
                texenv
            ->SetMode(TEXTURE_ENV_MODE_BLEND);
                texenv
            ->SetLodBias(0.2f);
                texenv
            ->SetPointSpriteCoordReplace(true);
                texenv
            ->SetRGBScale(1.2f);
                texenv
            ->SetAlphaScale(0.8f);
                texenv
            ->SetCombineMode(TEXTURE_ENV_MODE_INTERPOLATE);
                texenv
            ->SetEnvSource0(TEXTURE_ENV_SOURCE_TEXTURE0);
                texenv
            ->SetEnvSource1(TEXTURE_ENV_SOURCE_TEXTURE1);
                texenv
            ->SetEnvSource2(TEXTURE_ENV_SOURCE_TEXTURE2);
            環(huán)境映射的操作模式就是從紋理中獲取對(duì)應(yīng)的環(huán)境映射指針并設(shè)置合適的參數(shù)數(shù)值
            全demo源碼為:
            /*!==========================================================================
             *
             *  蓋莫游戲引擎(GaiMo Game Engine)
             *
             *  版權(quán)所有 (C) 2009-2009 成都蓋莫軟件技術(shù)工作室 保留所有權(quán)利
             *  Copyright (C) 成都蓋莫軟件技術(shù)工作室.  All Rights Reserved.
             *
             *  了解更多情況,請(qǐng)?jiān)L問(wèn) 
            http://www.gaimo.net
             ***************************************************************************
            */
            #include 
            <GEngine/Gaimo.hpp>

            using namespace std;
            using namespace core;

            int main(int argc, char **argv)
            {
                
            //! 初始化引擎設(shè)備并得到設(shè)備指針
                RefPtr<Device> device = core::InitDevice("環(huán)境映射");
                
            //! 得到引擎場(chǎng)景指針
                RefPtr<SceneManager> scenemanager = device->GetSceneManager();
                
            //! 得到引擎資源指針
                RefPtr<ResourceManager> resourcemanager = device->GetResourceManager();
                
            //! 獲取引擎紋理管理器指針
                RefPtr<TextureManager> texturemanager = resourcemanager->GetTextureManager(); 
                
            //! 獲取引擎圖形管理器
                RefPtr<ImageManager>   imagemanager = resourcemanager->GetImageManager();
                
            //! 獲取引擎視頻驅(qū)動(dòng)器
                RefPtr<VideoDriver>    videodriver = device->GetVideoDriver();
                
                
            //! 得到圖形和其紋理
                RefPtr<Image>   image1 = imagemanager->CreateObject("background","..\\image//spheremap//tree.jpg");
                RefPtr
            <Texture> background = texturemanager->CreateObject("background",image1);
                background
            ->Generate(); 
                
                RefPtr
            <Image>   image2 = imagemanager->CreateObject("reflect","..\\image//spheremap//tree1.jpg");
                RefPtr
            <Texture> reflect = texturemanager->CreateSphereMap("reflect",image2);
                
                RefPtr
            <TexEnv>  texenv = reflect->GetTexEnv(); 
                texenv
            ->SetEnvColor(Color::Blue);
                texenv
            ->SetMode(TEXTURE_ENV_MODE_BLEND);
                texenv
            ->SetLodBias(0.2f);
                texenv
            ->SetPointSpriteCoordReplace(true);
                texenv
            ->SetRGBScale(1.2f);
                texenv
            ->SetAlphaScale(0.8f);
                texenv
            ->SetCombineMode(TEXTURE_ENV_MODE_INTERPOLATE);
                texenv
            ->SetEnvSource0(TEXTURE_ENV_SOURCE_TEXTURE0);
                texenv
            ->SetEnvSource1(TEXTURE_ENV_SOURCE_TEXTURE1);
                texenv
            ->SetEnvSource2(TEXTURE_ENV_SOURCE_TEXTURE2);
                reflect
            ->Generate();

                
            //! 獲取全局?jǐn)z像機(jī),設(shè)置攝像機(jī)參數(shù) 
                core::RefPtr<core::Camera> camera = scenemanager->GetActiveCamera();
                camera
            ->SetPosition(Vector3f(0,0,30));
                camera
            ->SetView(Vector3f(0,0,0));
                camera
            ->SetDirection(Vector3f(0,1,0));
                camera
            ->SetViewPort(Recti(0,0,640,480));
                camera
            ->SetPerspective(50.0f,640.0f/480.0f,0.1f,300.0f);
                videodriver
            ->EnableCulling();
             
                BEGIN_LOOP(device)
                   videodriver
            ->SetClearBuffer(ENGINE_CLEAR_COLOR | ENGINE_CLEAR_DEPTH);
                   videodriver
            ->SetClearColor(core::Color::Blue);
                   camera
            ->Render();
              
                   background
            ->AttachRenderTarget();
                   glBegin(GL_QUADS);
                      glNormal3f( 
            0.0f0.0f1.0f);
                      glTexCoord2f(
            0.0f0.0f); glVertex3f(-13.0f-12.0f,  10.0f);
                      glTexCoord2f(
            1.0f0.0f); glVertex3f( 13.0f-12.0f,  10.0f);
                      glTexCoord2f(
            1.0f1.0f); glVertex3f( 13.0f,  12.0f,  10.0f);
                      glTexCoord2f(
            0.0f1.0f); glVertex3f(-13.0f,  12.0f,  10.0f);
                   glEnd();
                   
                   reflect
            ->AttachRenderTarget();
                   videodriver
            ->RenderSphere(12,32,32);
                   videodriver
            ->RenderSphere(9,32,32);
                   videodriver
            ->RenderSphere(6,32,32);
                   reflect
            ->Destroy();
                END_LOOP(device)

                
            return 0;
            }
             
            當(dāng)前測(cè)試?yán)釉O(shè)置環(huán)境映射模式為渲染模式
            則其效果為:

            再貼一次對(duì)應(yīng)的無(wú)環(huán)境映射的圖片如下:

            可以看出蓋莫游戲引擎一直在不斷完善ing.
            posted @ 2010-04-21 09:22 ccsdu2009 閱讀(1371) | 評(píng)論 (3)編輯 收藏
            僅列出標(biāo)題
            共38頁(yè): First 27 28 29 30 31 32 33 34 35 Last 
             
            嫩草影院久久国产精品| 国产亚洲美女精品久久久2020| 日韩久久无码免费毛片软件| 亚洲а∨天堂久久精品| 久久精品国产清高在天天线| 久久综合九色综合久99| 国产欧美久久久精品影院| 国产精品久久久久国产A级| 久久免费香蕉视频| 久久超乳爆乳中文字幕| 久久人人超碰精品CAOPOREN| 午夜精品久久久久久久久| 国产精品gz久久久| 亚洲熟妇无码另类久久久| 国产AV影片久久久久久| 精产国品久久一二三产区区别| 国产午夜久久影院| 四虎影视久久久免费观看| 久久精品成人国产午夜| 久久久久久久精品成人热色戒| 四虎国产精品免费久久5151| 99久久国产精品免费一区二区| 26uuu久久五月天| 熟妇人妻久久中文字幕| 青青久久精品国产免费看| 热re99久久精品国产99热| 国产精品99久久久精品无码| 久久久WWW免费人成精品| 69SEX久久精品国产麻豆| 久久丫忘忧草产品| 欧美日韩精品久久久免费观看| 精品久久一区二区| 久久婷婷五月综合国产尤物app| 中文字幕精品久久久久人妻| 国产亚洲精久久久久久无码AV| 久久久女人与动物群交毛片| 国产精品美女久久福利网站| 久久强奷乱码老熟女网站| 99久久精品无码一区二区毛片 | 久久精品国产亚洲AV大全| 午夜福利91久久福利|