青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Cpper
C/C++高級工程師 Android高級軟件工程師 IT集成工程師 音頻工程師 熟悉c,c++,java,c#,py,js,asp等多種語言 程序猿

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

interface設(shè)計如下:
以后還會修改之
///////////////////////////////////////////////////////////
/// 定義渲染到紋理對象
/////////////////////////////////////////////////////////// 
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


測試代碼如下:

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

RefPtr
<Texture> boxtexture = NULL;
RefPtr
<Camera> camera = NULL;
//! 獲取引擎視頻驅(qū)動器
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("渲染到紋理");
    
//! 得到引擎場景指針
    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ū)動器
    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像機,設(shè)置攝像機參數(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 閱讀(1430) | 評論 (2)編輯 收藏
 
這是蓋莫游戲引擎2.1.2中GUI之2-GUI刷子
該對象提供對2d基本圖元的繪制和操作
提供以下功能
1.點繪制
2.線段繪制
3.矩形繪制
4.三角形繪制
5.紋理渲染
以后還會加入更多的功能

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

其接口如下:
////////////////////////////////////////////////////////////
/// 定義引擎GUI刷子(提供簡單的幾何體繪制操作)
////////////////////////////////////////////////////////////
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;     
   
    
//////////////////////////////////////////////////////////
    
/// 繪制一個點
    
//////////////////////////////////////////////////////////     
    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;
   
    
////////////////////////////////////////////////////////
    
/// 繪制一個線段
    
////////////////////////////////////////////////////////   
    virtual void RenderLine(const Vector2f& from, const Vector2f& to) = 0;
    
virtual void RenderLine(const Point& from, const Point& to) = 0;
   
    
////////////////////////////////////////////////////////
    
/// 繪制一個矩陣框(填充與否)
    
////////////////////////////////////////////////////////
    virtual void RenderRect(const Recti& rect, bool fill = true= 0;
    
virtual void RenderRect(const Rectf& rect, bool fill = true= 0;
   
    
////////////////////////////////////////////////////////
    
/// 繪制一個三角形
    
////////////////////////////////////////////////////////   
    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;
   
    
//////////////////////////////////////////////////////////
    
/// 繪制一個園,園扇(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)
};

可以看出比較簡單 沒有什么復(fù)雜的東西!

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

引擎UI需要達到的高度
1.控件組動態(tài)生成(要求源于xml config file)
2.控件自布局
3.靈活簡單易用
4.UI引擎和引擎的低聚合
.....
posted @ 2010-05-08 09:23 ccsdu2009 閱讀(1010) | 評論 (0)編輯 收藏
 
這是剛寫的渲染到紋理代碼 還有點問題 以后慢慢修改吧
先上interface
///////////////////////////////////////////////////////////
/// 定義渲染到紋理對象
/////////////////////////////////////////////////////////// 
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è)置渲染攝像機透視參數(shù)
    ////////////////////////////////////////////////////////    
    virtual void SetRenderPara(float fov,float near,float far) = 0;
    
    
////////////////////////////////////////////////////////
    //! 設(shè)置紋理清屏色 
    ////////////////////////////////////////////////////////      
    virtual void SetClearColor(const Color& color) = 0
    
    DECLARE_OBJECT(RenderToTexture)  
};

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

RefPtr
<Texture> boxtexture = NULL;
RefPtr
<Camera> camera = NULL;
//! 獲取引擎視頻驅(qū)動器
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("渲染到紋理");
    
//! 得到引擎場景指針
    RefPtr<SceneManager> scenemanager = device->GetSceneManager();
    
//! 得到引擎資源指針
    RefPtr<ResourceManager> resourcemanager = device->GetResourceManager();
    
//! 獲取引擎紋理管理器指針
    RefPtr<TextureManager> texturemanager = resourcemanager->GetTextureManager(); 
    
//! 獲取引擎圖形管理器
    RefPtr<ImageManager>   imagemanager = resourcemanager->GetImageManager();
    
//! 獲取引擎視頻驅(qū)動器
    videodriver = device->GetVideoDriver();
    
    
//! 得到tile圖形和其紋理
    core::RefPtr<Image>   box = imagemanager->CreateObject("cube","..\\image//logo.bmp");
    boxtexture 
= texturemanager->CreateObject("cube",box);
    boxtexture
->Generate();
    
    
//! 獲取全局?jǐn)z像機,設(shè)置攝像機參數(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;
}

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

 

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

namespace core 
{

////////////////////////////////////////////////////////////
/// 定義引擎游標(biāo)控制類(當(dāng)前最大支持8個光標(biāo))(當(dāng)前僅對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 閱讀(224) | 評論 (0)編輯 收藏
 
     摘要: 好幾天沒寫博客了接著以前寫的Loki系列來首先Loki Factory設(shè)計的目的就是讓對象功能按名生成!該文主要涉及Loki/Factory.h文件首先上工廠異常類如下: /** * \defgroup    FactoryErrorPoliciesGroup Factory Error Policies&...  閱讀全文
posted @ 2010-05-05 21:29 ccsdu2009 閱讀(2100) | 評論 (6)編輯 收藏
 
     摘要: 蓋莫音頻引擎1.2.8的上次發(fā)布版本為1.1.2版本當(dāng)前發(fā)布版本增加功能如下:1.對音頻錄入的支持2.對xm,mod,it,s3m的支持3.修改了一些內(nèi)部實現(xiàn)總的說來本引擎(API)功能如下:1.支持ogg,mp3,wav,xm,it,s3m,mod格式2.基于多線程流式播放音頻3.真3d音效4.支持低通,次級音效本音頻引擎完全勝任游戲開發(fā),嵌入式設(shè)備等商業(yè)應(yīng)用!本音頻引擎使用于商業(yè)用途只需要付出...  閱讀全文
posted @ 2010-04-27 14:39 ccsdu2009 閱讀(1372) | 評論 (0)編輯 收藏
 

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

接口很簡單
如下:

////////////////////////////////////////////////////////////
/// 定義音頻錄入類接口
//////////////////////////////////////////////////////////// 
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個函數(shù)
一個是音頻數(shù)據(jù)分批錄入
一個就是停止錄入音頻數(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;        
    
/////////////////////////////////////////////////////////
    //! 獲取音頻引擎版本號
    /////////////////////////////////////////////////////////
    virtual const char* GetVerson() const = 0;

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

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

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

    
/////////////////////////////////////////////////////////
    //! 獲取聽者指針 
    /////////////////////////////////////////////////////////
    virtual AudioListener* GetAudioListener() = 0
    
    
/////////////////////////////////////////////////////////
    //! 獲取音頻捕獲設(shè)備指針(參數(shù)為音頻名字)(當(dāng)前僅僅支持wav格式)(全局唯一) 
    /////////////////////////////////////////////////////////     
    virtual RefPtr<AudioCapture> GetAudioCapture(const engine_string& name = "capture")const = 0;     
    
    
/////////////////////////////////////////////////////////
    //! 獲取音頻設(shè)備列表個數(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.
 *
 *  了解更多情況,請訪問 
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è)備個數(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"); 
    
    
//! 獲取錄制開始時間
    float time = device->GetTime(); 
    
    BEGIN_LOOP(device)
        
//! 錄制時間10秒 
        if(device->GetTime() > time +10)
            
break
        audiocapture
->CaptureData(); 
          
    END_LOOP(device)
    
    audiocapture
->StopCapture();
    
return EXIT_SUCCESS;
}
步驟就是從設(shè)備指針獲取音頻管理器指針
從音頻管理器指針獲取音頻錄入指針
然后在錄入過程中調(diào)用數(shù)據(jù)錄入函數(shù)
停止錄入的時候調(diào)用StopAudioCapture即可!

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

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

到時候歡迎下載啊
posted @ 2010-04-24 18:18 ccsdu2009 閱讀(1246) | 評論 (2)編輯 收藏
 
順手翻了下3d游戲引擎設(shè)計實時計算機圖形學(xué)的應(yīng)用方法這本書(英文本第二版)
在其800page.18.4章的
template<class T>
class Stack中這兒有一個小錯誤
就是
在函數(shù)
bool Push..
中間 其判斷條件是錯誤的
對于這個類模板
我把它成了了蓋莫引擎死板的風(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 閱讀(399) | 評論 (0)編輯 收藏
 
從2008年年底我就一直想設(shè)計一套基于OpenGL的游戲?qū)S肎UI系統(tǒng)出來
當(dāng)然有人說現(xiàn)在不是有現(xiàn)成的嗎?CEGUI...
使用這個當(dāng)然沒什么問題
但是覺得自己開發(fā)的游戲引擎還是配備一個套自行開發(fā)的GUI系統(tǒng)比較好(比如irr)
當(dāng)然在下面使用若干子庫(比如freetype,sigc++等等)還是沒有問題的
也是從那個時候看了很多GUI系統(tǒng),比如CEGUI,MyGUI,GLOOEY,UFO GUI,UI LIB 等等
之后我開始設(shè)計了一個套GUI系統(tǒng)但是感覺問題多多
一個主要的問題就是沒有處理好事件

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

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

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

下面是我的開胃菜
GUI主題色
設(shè)置這個的目的是為了統(tǒng)一GUI控件顏色而不需要一個一個設(shè)計它
下面是實現(xià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)前保留一個空的顏色值
    static const int    themecolor_number = 5
    Color               color[themecolor_number];


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

posted @ 2010-04-21 18:46 ccsdu2009 閱讀(1637) | 評論 (4)編輯 收藏
 
這是使用蓋莫游戲引擎2.1.2測試環(huán)境映射的demo
對opengl而言
環(huán)境映射主要就圍繞函數(shù)glTexEnv工作的
但是其實現(xiàn)起來不是那么容易
該測試?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)境映射的操作模式就是從紋理中獲取對應(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.
 *
 *  了解更多情況,請訪問 
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)境映射");
    
//! 得到引擎場景指針
    RefPtr<SceneManager> scenemanager = device->GetSceneManager();
    
//! 得到引擎資源指針
    RefPtr<ResourceManager> resourcemanager = device->GetResourceManager();
    
//! 獲取引擎紋理管理器指針
    RefPtr<TextureManager> texturemanager = resourcemanager->GetTextureManager(); 
    
//! 獲取引擎圖形管理器
    RefPtr<ImageManager>   imagemanager = resourcemanager->GetImageManager();
    
//! 獲取引擎視頻驅(qū)動器
    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像機,設(shè)置攝像機參數(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)前測試?yán)釉O(shè)置環(huán)境映射模式為渲染模式
則其效果為:

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

可以看出蓋莫游戲引擎一直在不斷完善ing.
posted @ 2010-04-21 09:22 ccsdu2009 閱讀(1394) | 評論 (3)編輯 收藏
僅列出標(biāo)題
共38頁: First 27 28 29 30 31 32 33 34 35 Last 
 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲高清自拍| 欧美激情一区二区三区四区| 亚洲国产高清一区| 欧美黄免费看| 久久精品99无色码中文字幕| 亚洲精品久久久久久久久久久久久| 欧美日韩直播| 国产美女一区二区| 国产精品亚洲视频| 国产精品日韩欧美一区二区| 国产精品久久久久久久久搜平片| 欧美日韩视频不卡| 国产精品嫩草影院av蜜臀| 国产精品美女久久| 极品少妇一区二区三区精品视频| 在线日韩av| 亚洲综合另类| 久久人人爽人人| 亚洲人屁股眼子交8| 国产精品99久久久久久人| 欧美一级视频精品观看| 久久视频一区| 国产免费观看久久| 亚洲美女中出| 免费在线观看一区二区| 日韩亚洲欧美一区| 蜜臀91精品一区二区三区| 欧美日韩综合另类| 午夜国产一区| 美女精品国产| 在线视频精品| 久久成人精品无人区| 在线欧美福利| 亚洲精品乱码久久久久久黑人| 日韩天堂在线观看| 麻豆av一区二区三区久久| 亚洲剧情一区二区| 欧美一区视频| 午夜视频在线观看一区二区三区| 欧美国产亚洲精品久久久8v| 国产乱码精品一区二区三区忘忧草 | 亚洲国产天堂久久综合网| 欧美在线观看一区二区三区| 亚洲精品国产品国语在线app| 欧美激情视频在线免费观看 欧美视频免费一 | 欧美日韩在线播放一区二区| 亚洲茄子视频| 99re热这里只有精品视频| 欧美日韩国产一中文字不卡 | 卡通动漫国产精品| 一色屋精品视频免费看| 欧美激情无毛| 欧美精品在线看| 亚洲特级毛片| 久久成人免费日本黄色| 狠狠色丁香久久婷婷综合丁香| 久久久久久穴| 国产精品a级| 欧美刺激午夜性久久久久久久| 欧美v国产在线一区二区三区| 亚洲午夜成aⅴ人片| 亚洲字幕在线观看| 另类图片国产| 亚洲午夜性刺激影院| 久久国产手机看片| 亚洲一区国产精品| 鲁大师成人一区二区三区| 亚洲在线视频免费观看| 久久综合九色九九| 性色一区二区三区| 欧美日韩免费在线观看| 欧美成年人视频网站| 国产日韩在线播放| 亚洲视频精选| 欧美夜福利tv在线| 国产精品嫩草影院一区二区 | 激情视频一区二区| 亚洲在线网站| 久久九九99| 国内激情久久| 猛干欧美女孩| 亚洲福利专区| 亚洲欧美国产另类| 午夜在线视频一区二区区别| 欧美日在线观看| 亚洲精品女人| 亚洲免费观看| 国产精品久久一级| 久久精品国产亚洲aⅴ| 欧美xxx在线观看| 亚洲一区二区三区在线| 国产精品女人毛片| 欧美成人免费一级人片100| 亚洲高清中文字幕| 亚洲欧美精品suv| 在线观看中文字幕亚洲| 欧美日韩国产综合网| 欧美一区二区三区婷婷月色 | 一区二区电影免费观看| 欧美视频中文字幕| 久久国产黑丝| 亚洲专区欧美专区| 奶水喷射视频一区| 久久国产视频网| 亚洲视频中文| 亚洲精品一区在线观看| 狠狠色综合色区| 欧美午夜精品一区| 欧美精品999| 欧美成人激情视频免费观看| 亚洲伊人色欲综合网| 欧美成人精品在线观看| 久久精品亚洲一区二区三区浴池| 夜夜夜久久久| 亚洲福利一区| 亚洲风情亚aⅴ在线发布| 国产精品视频一| 国产精品激情av在线播放| 欧美日韩在线视频一区| 国产精品v日韩精品v欧美精品网站| 免费久久99精品国产自| 免费在线国产精品| 欧美激情一二区| 国产精品福利av| 国产精品久久久久毛片软件| 国产农村妇女精品一二区| 国产美女在线精品免费观看| 国产欧美日韩视频一区二区三区| 国产精品一区二区三区成人| 国产午夜精品一区二区三区欧美| 国产欧美日韩在线观看| 亚洲福利在线视频| 亚洲一区不卡| 久久伊伊香蕉| 国产精品99久久99久久久二8| 欧美一区二区三区视频在线 | 欧美日韩一区二区在线| 国产手机视频一区二区| 亚洲激情二区| 久久久久久久一区| 日韩午夜电影av| 久久精品99国产精品酒店日本| 欧美久久影院| 亚洲国产成人精品女人久久久| 一区二区三区精品视频| 久久亚洲综合色| 午夜欧美视频| 国产精品免费观看视频| 亚洲一区二区精品在线观看| 免费黄网站欧美| 欧美亚洲综合网| 国产欧美欧美| 欧美一区二区三区视频在线| 国产精品美女诱惑| 亚洲综合色视频| 亚洲天堂成人在线视频| 国产精品v欧美精品v日韩 | 99精品99久久久久久宅男| 欧美sm重口味系列视频在线观看| 小嫩嫩精品导航| 国产亚洲一本大道中文在线| 欧美亚洲一级| 久久国产乱子精品免费女| 国产精品综合视频| 久久综合婷婷| 美日韩免费视频| 亚洲尤物视频在线| 欧美在线观看视频在线| 国内精品模特av私拍在线观看| 久久久国产精品亚洲一区| 久久久噜噜噜久久久| 一区二区三区日韩欧美精品| 亚洲影院免费观看| 在线精品国精品国产尤物884a| 亚洲国产欧美另类丝袜| 国产精品成人一区二区三区吃奶| 亚洲影院一区| 美女尤物久久精品| 欧美日韩精品欧美日韩精品一| 亚洲综合成人婷婷小说| 欧美一区二区三区视频免费播放 | 欧美看片网站| 麻豆精品在线播放| 欧美性淫爽ww久久久久无| 欧美14一18处毛片| 国产伦精品一区二区三区照片91| 欧美黑人国产人伦爽爽爽| 激情av一区二区| 亚洲综合色丁香婷婷六月图片| 亚洲国产精品t66y| 久久精品日产第一区二区三区 | 国产精品美女久久久久av超清 | 日韩午夜精品视频| 亚洲三级免费电影| 免费在线欧美黄色| 亚洲欧洲日本一区二区三区| 亚洲欧洲精品一区二区三区不卡 | 99国产欧美久久久精品| 亚洲人成在线观看一区二区| 欧美电影在线免费观看网站|