這是剛寫的渲染到紋理代碼 還有點(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(1, 1);
glVertex2f( 1, 1);
glTexCoord2f(0, 1);
glVertex2f(-5, 1);
glTexCoord2f(0, 0);
glVertex2f(-5,-5);
glTexCoord2f(1, 0);
glVertex2f( 1,-5);
glTexCoord2f(1, 1);
glVertex2f(3, 3);
glTexCoord2f(0, 1);
glVertex2f(-3,3);
glTexCoord2f(0, 0);
glVertex2f(-3,-3);
glTexCoord2f(1, 0);
glVertex2f(3,-3);
glEnd();
}
///////////////////////////////////////////////////////////////////////////////
//
///////////////////////////////////////////////////////////////////////////////
void G_CALL RenderTexture()
{
boxtexture->AttachRenderTarget();
glBegin(GL_QUADS);
glTexCoord2f(1, 1);
glVertex2f(0,0);
glTexCoord2f(0, 1);
glVertex2f(-8,0);
glTexCoord2f(0, 0);
glVertex2f(-8,-8);
glTexCoord2f(1, 0);
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è)以后還要修改之!