游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2397|回复: 0

盖莫游戏引擎2.1.2-rtt demo小试

[复制链接]

56

主题

94

帖子

98

积分

注册会员

Rank: 2

积分
98
发表于 2010-5-8 21:17:00 | 显示全部楼层 |阅读模式
这是设计的盖莫游戏引擎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[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.0f, 0.0f, -1.0f);
        glTexCoord2f(0.0f, 0.0f);
        glVertex3f(-1.0f, -1.0f, -1.0f);
        glTexCoord2f(1.0f, 0.0f);
        glVertex3f(1.0f, -1.0f, -1.0f);
        glTexCoord2f(0.0f, 1.0f);
        glVertex3f(-1.0f, 1.0f, -1.0f);
        glTexCoord2f(1.0f, 1.0f);
        glVertex3f(1.0f, 1.0f, -1.0f);
    glEnd();
   
    glColor4fv(color[1]);
    glBegin(GL_TRIANGLE_STRIP);
        glNormal3f(1.0f, 0.0f, 0.0f);
        glTexCoord2f(0.0f, 0.0f);
        glVertex3f(1.0f, -1.0f, -1.0f);
        glTexCoord2f(1.0f, 0.0f);
        glVertex3f(1.0f, -1.0f, 1.0f);
        glTexCoord2f(0.0f, 1.0f);
        glVertex3f(1.0f, 1.0f, -1.0f);
        glTexCoord2f(1.0f, 1.0f);
        glVertex3f(1.0f, 1.0f, 1.0f);
    glEnd();
   
    glColor4fv(color[2]);
    glBegin(GL_TRIANGLE_STRIP);
        glNormal3f(0.0f, 0.0f, 1.0f);
        glTexCoord2f(0.0f, 0.0f);
        glVertex3f(1.0f, -1.0f, 1.0f);
        glTexCoord2f(1.0f, 0.0f);
        glVertex3f(-1.0f, -1.0f, 1.0f);
        glTexCoord2f(0.0f, 1.0f);
        glVertex3f(1.0f, 1.0f, 1.0f);
        glTexCoord2f(1.0f, 1.0f);
        glVertex3f(-1.0f, 1.0f, 1.0f);
    glEnd();
   
    glColor4fv(color[3]);
    glBegin(GL_TRIANGLE_STRIP);
        glNormal3f(-1.0f, 0.0f, 0.0f);
        glTexCoord2f(0.0f, 0.0f);
        glVertex3f(-1.0f, -1.0f, 1.0f);
        glTexCoord2f(1.0f, 0.0f);
        glVertex3f(-1.0f, -1.0f, -1.0f);
        glTexCoord2f(0.0f, 1.0f);
        glVertex3f(-1.0f, 1.0f, 1.0f);
        glTexCoord2f(1.0f, 1.0f);
        glVertex3f(-1.0f, 1.0f, -1.0f);
    glEnd();
   
    glColor4fv(color[4]);
    glBegin(GL_TRIANGLE_STRIP);
        glNormal3f(0.0f, -1.0f, 0.0f);
        glTexCoord2f(0.0f, 0.0f);
        glVertex3f(-1.0f, -1.0f, 1.0f);
        glTexCoord2f(1.0f, 0.0f);
        glVertex3f(1.0f, -1.0f, 1.0f);
        glTexCoord2f(0.0f, 1.0f);
        glVertex3f(-1.0f, -1.0f, -1.0f);
        glTexCoord2f(1.0f, 1.0f);
        glVertex3f(1.0f, -1.0f, -1.0f);
    glEnd();
   
    glColor4fv(color[5]);
    glBegin(GL_TRIANGLE_STRIP);
        glNormal3f(0.0f, 1.0f, 0.0f);
        glTexCoord2f(0.0f, 0.0f);
        glVertex3f(-1.0f, 1.0f, -1.0f);
        glTexCoord2f(1.0f, 0.0f);
        glVertex3f(1.0f, 1.0f, -1.0f);
        glTexCoord2f(0.0f, 1.0f);
        glVertex3f(-1.0f, 1.0f, 1.0f);
        glTexCoord2f(1.0f, 1.0f);
        glVertex3f(1.0f, 1.0f, 1.0f);
    glEnd();
}

贴图为:


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-7-1 18:37

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表