开发环境
ogre 1.71
教程
Intermediate Tutorial 7 Render to texture (RTT)
http://www.ogre3d.org/tikiwiki/Intermediate+Tutorial+7&structure=Tutorials
关键代码:
//! 创建渲染纹理
Ogre::TexturePtr rtt_texture = Ogre::TextureManager::getSingleton().createManual("RttTex", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, Ogre::TEX_TYPE_2D, mWindow->getWidth(), mWindow->getHeight(), 0, Ogre::PF_R8G8B8, Ogre::TU_RENDERTARGET);
Ogre::RenderTexture *renderTexture = rtt_texture->getBuffer()->getRenderTarget();
renderTexture->addViewport(mCamera);
renderTexture->getViewport(0)->setClearEveryFrame(true);
renderTexture->getViewport(0)->setBackgroundColour(Ogre::ColourValue::Blue);
renderTexture->getViewport(0)->setOverlaysEnabled(false);
renderTexture->addListener(this);
//! 创建材质
Ogre::MaterialPtr renderMaterial = Ogre::MaterialManager::getSingleton().create("RttMat", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
Ogre::Technique* matTechnique = renderMaterial->createTechnique();
matTechnique->createPass();
renderMaterial->getTechnique(0)->getPass(0)->setLightingEnabled(false);
renderMaterial->getTechnique(0)->getPass(0)->createTextureUnitState("RttTex");
//! 创建矩形
mMiniScreen = OGRE_NEW Ogre::Rectangle2D(true);
mMiniScreen->setCorners(0.5f, -0.5f, 1.0f, -1.0f);
mMiniScreen->setBoundingBox(Ogre::AxisAlignedBox(-100000.0f * Ogre::Vector3::UNIT_SCALE, 100000.0f * Ogre::Vector3::UNIT_SCALE));
mMiniScreen->setMaterial("RttMat");
//! 创建节点
Ogre::SceneNode* miniScreenNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("MiniScreenNode");
miniScreenNode->attachObject(mMiniScreen);
漫谈
-------------------------------------
RTT主要用在效果展现时与shaders混合使用,例如模糊效果。发明RTT的想法很简单,将渲染结果存成原始数据还不如保存成纹理,保存成纹理后直接交给GPU处理。
这里是创建的一个OGRE矩形展现纹理,之前也介绍过创建一个CEGUI窗口展现矩形,似乎不与特定的窗口相关,既然渲染到纹理了,想如何处理都可以。