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

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

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

interface設計如下:
以后還會修改之
///////////////////////////////////////////////////////////
/// 定義渲染到紋理對象
/////////////////////////////////////////////////////////// 
class G_DLL_API RenderToTexture : public Renderable

public:
    
////////////////////////////////////////////////////////
    //! 構造,析構渲染到紋理
    ////////////////////////////////////////////////////////
    RenderToTexture();
    
virtual ~RenderToTexture();
public:    
    
////////////////////////////////////////////////////////
    //! 設置渲染回調函數
    ////////////////////////////////////////////////////////    
    virtual void SetRenderCallBack(RenderCallBack rendertexture) = 0;
 
    
////////////////////////////////////////////////////////
    //! 設置渲染到紋理參數 
    ////////////////////////////////////////////////////////    
    virtual void SetPara(float fov,float near,float far) = 0;
    
    
////////////////////////////////////////////////////////
    //! 設置紋理清屏色,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;
//! 獲取引擎視頻驅動器
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)
{
    
//! 初始化引擎設備并得到設備指針
    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();
    
//! 獲取引擎視頻驅動器
    videodriver = device->GetVideoDriver();
    glEnable(GL_TEXTURE_2D);
    
    
//! 啟用環境光
    lightmanager->RenderGlobalAmbient(false); 
    
//! 啟用光源
    lightmanager->EnableLight();    
    
//! 獲取光指針
    RefPtr<Light> light = lightmanager->CreateObject("rttlight","..\\script//rtt.lua","light"); 
    
    
//! 獲取全局攝像機,設置攝像機參數 
    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();
}

貼圖為:

.

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

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

其接口如下:
////////////////////////////////////////////////////////////
/// 定義引擎GUI刷子(提供簡單的幾何體繪制操作)
////////////////////////////////////////////////////////////
class G_DLL_API GuiBrush : public Object
{
public:
    
////////////////////////////////////////////////////////
    
/// GUI刷子構造,析構
    
////////////////////////////////////////////////////////
    GuiBrush();
    
virtual ~GuiBrush();
public:
    
////////////////////////////////////////////////////////
    
/// 設置GUI刷子顏色
    
////////////////////////////////////////////////////////
    virtual void SetBrushColor(const Color& color) = 0;
   
    
//////////////////////////////////////////////////////////
    
/// 設置刷子線寬
    
//////////////////////////////////////////////////////////         
    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為邊數)
    
//////////////////////////////////////////////////////////   
    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)
};

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

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

引擎UI需要達到的高度
1.控件組動態生成(要求源于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:
    
////////////////////////////////////////////////////////
    //! 構造,析構渲染到紋理
    ////////////////////////////////////////////////////////
    RenderToTexture();
    
virtual ~RenderToTexture();
public:    
    
////////////////////////////////////////////////////////
    //! 設置渲染紋理,目標回調函數
    ////////////////////////////////////////////////////////    
    virtual void SetRenderTexture(RenderCallBack rendertexture) = 0;
    
virtual void SetRenderTarget(RenderCallBack rendertarget) = 0;
 
    
////////////////////////////////////////////////////////
    //! 設置渲染攝像機透視參數
    ////////////////////////////////////////////////////////    
    virtual void SetRenderPara(float fov,float near,float far) = 0;
    
    
////////////////////////////////////////////////////////
    //! 設置紋理清屏色 
    ////////////////////////////////////////////////////////      
    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;
//! 獲取引擎視頻驅動器
RefPtr<VideoDriver> videodriver = NULL;

///////////////////////////////////////////////////////////////////////////////
// 渲染回調函數 
///////////////////////////////////////////////////////////////////////////////
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)
{
    
//! 初始化引擎設備并得到設備指針
    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();
    
//! 獲取引擎視頻驅動器
    videodriver = device->GetVideoDriver();
    
    
//! 得到tile圖形和其紋理
    core::RefPtr<Image>   box = imagemanager->CreateObject("cube","..\\image//logo.bmp");
    boxtexture 
= texturemanager->CreateObject("cube",box);
    boxtexture
->Generate();
    
    
//! 獲取全局攝像機,設置攝像機參數 
    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的游標控制類
該類主要負責游標圖形 游標顯示和設置游標位置
比較簡單直接上代碼不說啥了

namespace core 
{

////////////////////////////////////////////////////////////
/// 定義引擎游標控制類(當前最大支持8個光標)(當前僅對win32有效)
////////////////////////////////////////////////////////////
class G_DLL_API CursorControl : public Object
{   
public:     
    
//////////////////////////////////////////////////////// 
    
/// 構造,析構游標控制
    
////////////////////////////////////////////////////////
    CursorControl();
    
virtual ~CursorControl();

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

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

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

接口很簡單
如下:

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

如下(這是蓋莫音頻引擎的中樞)
/////////////////////////////////////////////////////////
//! 定義音頻設備基類
/////////////////////////////////////////////////////////
class AudioDevice : public Object 
{
public:
    
/////////////////////////////////////////////////////////
    //! 初始化,卸載音頻設備 
    /////////////////////////////////////////////////////////       
    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;

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

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

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

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

//! 使用蓋莫游戲引擎內核命名空間 
using namespace core;
using namespace std;
 
int Main()
{
    RefPtr
<Device> device = InitDevice("音頻捕獲");
    
//! 獲取音頻設備指針
    RefPtr<core::AudioDevice> audiodevice = device->GetAudioDevice();
    
//! 獲取音頻設備個數
    uint16 number = audiodevice->GetAudioDeviceNumber(); 
    
for(int i = 0; i < number ; i++
    {
        std::cout
<<audiodevice->GetDeviceByIndex(i)<<std::endl;        
    }  
    
//! 初始化音頻設備 
    engine_string audiodeviceinde = audiodevice->GetDeviceByIndex(0);
    cout
<<"初始化音頻設備"<<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;
}
步驟就是從設備指針獲取音頻管理器指針
從音頻管理器指針獲取音頻錄入指針
然后在錄入過程中調用數據錄入函數
停止錄入的時候調用StopAudioCapture即可!

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

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

到時候歡迎下載啊
posted @ 2010-04-24 18:18 ccsdu2009 閱讀(1246) | 評論 (2)編輯 收藏
 
順手翻了下3d游戲引擎設計實時計算機圖形學的應用方法這本書(英文本第二版)
在其800page.18.4章的
template<class T>
class Stack中這兒有一個小錯誤
就是
在函數
bool Push..
中間 其判斷條件是錯誤的
對于這個類模板
我把它成了了蓋莫引擎死板的風格
如下:
///////////////////////////////////////////////////////////
/// 定義引擎棧模板類
///////////////////////////////////////////////////////////
template<class T>
class Stack : NonCopyable
{
public:
    
///////////////////////////////////////////////////////
    
/// 構造,析構棧模板
    
///////////////////////////////////////////////////////
    Stack(int maxsize);
    
~Stack();
public:     
    
///////////////////////////////////////////////////////
    
/// 數據入棧
    
///////////////////////////////////////////////////////
    bool Push(const T& element);
    
    
///////////////////////////////////////////////////////
    
/// 數據出棧
    
///////////////////////////////////////////////////////    
    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
///////////////////////////////////////////////////////
/// 構造,析構棧模板
///////////////////////////////////////////////////////
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);
}
     
///////////////////////////////////////////////////////
/// 數據入棧
///////////////////////////////////////////////////////
template<class T>
inline 
bool Stack<T>::Push(const T& element)
{
    
if(top < maxsize-1)
    {
        data[
++top] = element;
        
return true
    }
    
return false;
}
    
///////////////////////////////////////////////////////
/// 數據出棧
///////////////////////////////////////////////////////    
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年年底我就一直想設計一套基于OpenGL的游戲專用GUI系統出來
當然有人說現在不是有現成的嗎?CEGUI...
使用這個當然沒什么問題
但是覺得自己開發的游戲引擎還是配備一個套自行開發的GUI系統比較好(比如irr)
當然在下面使用若干子庫(比如freetype,sigc++等等)還是沒有問題的
也是從那個時候看了很多GUI系統,比如CEGUI,MyGUI,GLOOEY,UFO GUI,UI LIB 等等
之后我開始設計了一個套GUI系統但是感覺問題多多
一個主要的問題就是沒有處理好事件

現在重新看UI系統
設計她的前置條件有
1.良好的字體渲染器
2.對象系列化
3.中文輸入.
4.其它

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

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

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


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

posted @ 2010-04-21 18:46 ccsdu2009 閱讀(1638) | 評論 (4)編輯 收藏
 
這是使用蓋莫游戲引擎2.1.2測試環境映射的demo
對opengl而言
環境映射主要就圍繞函數glTexEnv工作的
但是其實現起來不是那么容易
該測試例子源于2.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);
環境映射的操作模式就是從紋理中獲取對應的環境映射指針并設置合適的參數數值
全demo源碼為:
/*!==========================================================================
 *
 *  蓋莫游戲引擎(GaiMo Game Engine)
 *
 *  版權所有 (C) 2009-2009 成都蓋莫軟件技術工作室 保留所有權利
 *  Copyright (C) 成都蓋莫軟件技術工作室.  All Rights Reserved.
 *
 *  了解更多情況,請訪問 
http://www.gaimo.net
 ***************************************************************************
*/
#include 
<GEngine/Gaimo.hpp>

using namespace std;
using namespace core;

int main(int argc, char **argv)
{
    
//! 初始化引擎設備并得到設備指針
    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();
    
//! 獲取引擎視頻驅動器
    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();

    
//! 獲取全局攝像機,設置攝像機參數 
    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;
}
 
當前測試例子設置環境映射模式為渲染模式
則其效果為:

再貼一次對應的無環境映射的圖片如下:

可以看出蓋莫游戲引擎一直在不斷完善ing.
posted @ 2010-04-21 09:22 ccsdu2009 閱讀(1394) | 評論 (3)編輯 收藏
僅列出標題
共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>
            蜜桃久久精品乱码一区二区| 国产亚洲欧美一区在线观看| 亚洲第一区在线| 日韩视频免费在线观看| 亚洲国产乱码最新视频| 国产欧美视频一区二区三区| 国产精品视频1区| 国产在线观看91精品一区| 国产一区二区三区最好精华液 | 欧美成人一区二区在线| 美女视频一区免费观看| 欧美国产另类| 国产精品福利在线观看| 国产视频丨精品|在线观看| 好吊色欧美一区二区三区四区 | 欧美激情中文字幕乱码免费| 欧美国产精品一区| 91久久夜色精品国产网站| 亚洲免费观看高清完整版在线观看熊 | 欧美激情一区二区三区成人| 亚洲国产精品尤物yw在线观看| 亚洲免费成人av电影| 欧美一区二区三区男人的天堂 | 蜜臀久久久99精品久久久久久 | 亚洲国产一区二区三区高清| 一区二区三区日韩精品视频| 欧美一区二区三区四区夜夜大片| 蜜桃av综合| 国产精品网红福利| 亚洲经典三级| 午夜综合激情| 亚洲国产精品一区| 欧美一区二区三区免费观看视频 | 野花国产精品入口| 久久久久久久网站| 亚洲另类黄色| 久久综合导航| 国产欧美一区二区三区沐欲| 亚洲美女色禁图| 久久亚洲色图| 亚洲男人的天堂在线| 欧美黄色aaaa| 亚洲第一天堂av| 久久露脸国产精品| 亚洲欧美自拍偷拍| 国产精品chinese| 99精品视频一区| 狠狠v欧美v日韩v亚洲ⅴ| 欧美精品色一区二区三区| 国产午夜精品久久久久久免费视| 亚洲日本一区二区| 欧美成人国产va精品日本一级| 亚洲男人第一网站| 国产精品综合色区在线观看| 亚洲视频在线观看| 亚洲精品久久久久久久久| 久久亚洲色图| 亚洲福利视频二区| 欧美 日韩 国产一区二区在线视频| 性欧美video另类hd性玩具| 欧美性猛交xxxx乱大交蜜桃| 日韩一区二区精品| 亚洲精品国产精品国自产在线| 免费日韩av电影| 亚洲国产日日夜夜| 91久久综合亚洲鲁鲁五月天| 欧美成人一二三| 亚洲免费观看高清完整版在线观看熊 | 欧美国产先锋| 亚洲精品美女在线观看播放| 欧美国产在线视频| 欧美成人精品在线观看| 亚洲精品综合久久中文字幕| 91久久久久久久久| 欧美亚州一区二区三区| 校园春色国产精品| 欧美伊久线香蕉线新在线| 国产婷婷色一区二区三区| 久久综合给合久久狠狠狠97色69| 久久国产精品久久久| 伊人春色精品| 亚洲欧洲视频在线| 欧美性生交xxxxx久久久| 欧美一区二区三区免费视频| 欧美在线视频一区二区三区| 亚洲黄色免费| 在线亚洲高清视频| 国产一区二区毛片| 亚洲丰满少妇videoshd| 国产精品久久久久9999| 美女黄毛**国产精品啪啪| 欧美激情第五页| 欧美一级视频精品观看| 久久视频一区二区| 亚洲视频国产视频| 久久精品国产亚洲精品| 亚洲精品综合| 欧美在线视频a| 日韩视频在线免费| 亚洲欧美区自拍先锋| 亚洲国产精品www| 一区二区三区 在线观看视| 亚洲欧美自拍偷拍| 欧美午夜精品久久久久久久| 欧美在线视频免费观看| 免费观看成人网| 亚洲欧美资源在线| 欧美成人午夜影院| 久久精品91| 欧美精品一区二区三区视频| 欧美在线啊v| 欧美日本韩国一区二区三区| 欧美专区在线观看| 欧美日韩国产欧| 欧美jizzhd精品欧美巨大免费| 欧美午夜片在线观看| 欧美成人精品h版在线观看| 国产精品尤物福利片在线观看| 亚洲国产天堂久久综合| 激情欧美一区二区| 亚洲一区二区三区视频播放| 亚洲茄子视频| 久久久青草青青国产亚洲免观| 欧美一区二区| 欧美日韩在线综合| 亚洲人成亚洲人成在线观看| 激情久久综艺| 久久成人一区二区| 久久久精品久久久久| 国产精品免费电影| 一区二区三区四区五区在线| 99亚洲精品| 欧美乱妇高清无乱码| 亚洲缚视频在线观看| 亚洲国产日韩综合一区| 男女激情视频一区| 欧美激情1区| 亚洲精品国产精品国自产观看| 久久一区二区三区四区五区| 久久人人97超碰国产公开结果| 国产日韩欧美| 欧美一区二区三区四区高清| 欧美在线观看一区| 一区免费观看视频| 久久亚洲一区二区三区四区| 玖玖在线精品| 亚洲电影下载| 欧美精品粉嫩高潮一区二区| 亚洲毛片视频| 欧美亚洲视频一区二区| 国产亚洲精品久久久久久| 久久国产高清| 欧美大片一区| 洋洋av久久久久久久一区| 国产精品久久久久久久久免费樱桃 | 在线欧美小视频| 欧美承认网站| 一区二区三区视频观看| 欧美一区视频在线| 狠狠色狠狠色综合日日91app| 久久精品国产v日韩v亚洲| 欧美黄色一区二区| 亚洲欧美成aⅴ人在线观看| 国产亚洲成人一区| 麻豆精品在线播放| 一区二区高清视频在线观看| 欧美日韩直播| 免费观看日韩av| 亚洲日本va午夜在线电影| 欧美色区777第一页| 欧美一区二区大片| 亚洲欧洲精品成人久久奇米网 | 久久一区二区三区超碰国产精品| 国产性猛交xxxx免费看久久| 欧美综合第一页| 亚洲国产精品高清久久久| 一本久久综合亚洲鲁鲁五月天| 国产欧美日韩精品在线| 老巨人导航500精品| 日韩网站在线观看| 久久久水蜜桃| 亚洲一级网站| 国内一区二区在线视频观看| 免费在线播放第一区高清av| 亚洲视频一区二区在线观看| 久久精品一区二区三区四区 | 久久福利毛片| 亚洲伦伦在线| 合欧美一区二区三区| 欧美日韩在线免费| 久久午夜电影网| 午夜亚洲影视| 一区二区三区精品| 亚洲精品孕妇| 亚洲第一天堂无码专区| 久久免费99精品久久久久久| 亚洲尤物在线视频观看| 亚洲欧洲一区| 亚洲电影一级黄| 国产一区高清视频|