OGRE RTT笔记

来源:互联网 发布:深圳婚纱摄影 知乎 编辑:程序博客网 时间:2024/05/17 02:25

开发环境  

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窗口展现矩形,似乎不与特定的窗口相关,既然渲染到纹理了,想如何处理都可以。

 

原创粉丝点击