這是設(shè)計(jì)的蓋莫游戲引擎2.1.2的demo例子小試
interface設(shè)計(jì)如下:
以后還會(huì)修改之
///////////////////////////////////////////////////////////
/// 定義渲染到紋理對(duì)象
///////////////////////////////////////////////////////////
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
測(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;
//! 立方體繪制
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("渲染到紋理");
//! 得到引擎場(chǎng)景指針
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ū)動(dòng)器
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像機(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);
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();
}
貼圖為:

.

....................................................................................................................................................................
繼續(xù).