Cpper
C/C++高级工程师 Android高级软件工程师 IT集成工程师 音频工程师 熟悉c,c++,java,c#,py,js,asp等多种语言 程序猿
这是刚写的渲染到纹理代码 还有点问题 以后慢慢修改吧
先上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 on 2010-05-07 17:01 ccsdu2009 阅读(258) 评论(1)  编辑 收藏 引用 所属分类: Game引擎
Comments
  • # re: 盖莫游戏引擎2.1.2-渲染到纹理
    ccsdu2009
    Posted @ 2010-05-07 17:02
    当前使用了2种手段 一个基于
    GL_EXT_framebuffer_object
    另外一个是:
    glCopyTexSubImage2D  回复  更多评论   

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理