Ogre:render to texture

Ogre渲染到纹理实践

Ogre中可以渲染到纹理,这如同渲染到屏幕上一样,具体的使用方法是:

1 先创建一个纹理,用于接受渲染的内容

TexturePtr renderTexture=TextureManager::getSingleton().createManual("RT",ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,TEX_TYPE_2D,window->getWidth(), window->getHeight(), 0, PF_R8G8B8, TU_RENDERTARGET);

2从这个纹理创建一个rendertarget类

RenderTarget *textureTarget=renderTexture->getBuffer()->getRenderTarget();

3在这个渲染目标上加视口(如同在window上加视口一样)

Viewport*rv=textureTarget->addViewport(cam);
  rv->setClearEveryFrame(true);
   rv->setBackgroundColour(ColourValue::Blue);
    rv->setOverlaysEnabled(false);

4创建一个使用这个纹理的material

MaterialPtr renderMaterial=MaterialManager::getSingleton().create("RM",ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
renderMaterial->getTechnique(0)->getPass(0)->createTextureUnitState("RT");

这样使用这个material就可以实时的被渲染了

5将这个材质给一个物体

xxx->setMaterialName("RM");

6 如果只这样做,可能会出现这样的现象,比如你在场景中创建了一个子窗口,他也显示整个场景的内容,有时在这个子窗口中也会出现子窗口,因为子窗口也被作为渲染物渲染到子窗口上,所以在RTT中有一个类是RenderTargetListener类,来解决这个问题,这个类用来监听RTT事件,需要override它的两个主要函数preRenderTargetUpdate(),这是在纹理被绘制前的一瞬产生,这时你通常的做法是要隐藏子窗口,还有一个postRenderTargetUpdate(),这个在纹理被刚好绘制好之后执行,这里要做的就是再显现子窗口。当然,为了让这个监听器工作,你需要调用textureTarget->addListener().

转载于:https://www.cnblogs.com/weizhixiao/archive/2010/07/16/5697364.html

ycz@ycz-VMware-Virtual-Platform:~$ gz sim [GUI] [Err] [Ogre2RenderEngine.cc:1304] Unable to create the rendering window: OGRE EXCEPTION(3:RenderingAPIException): OpenGL 3.3 is not supported. Please update your graphics card drivers. in GL3PlusRenderSystem::initialiseContext at ./RenderSystems/GL3Plus/src/OgreGL3PlusRenderSystem.cpp (line 3434) [GUI] [Err] [Ogre2RenderEngine.cc:1304] Unable to create the rendering window: OGRE EXCEPTION(3:RenderingAPIException): OpenGL 3.3 is not supported. Please update your graphics card drivers. in GL3PlusRenderSystem::initialiseContext at ./RenderSystems/GL3Plus/src/OgreGL3PlusRenderSystem.cpp (line 3434) [GUI] [Err] [Ogre2RenderEngine.cc:1304] Unable to create the rendering window: OGRE EXCEPTION(3:RenderingAPIException): OpenGL 3.3 is not supported. Please update your graphics card drivers. in GL3PlusRenderSystem::initialiseContext at ./RenderSystems/GL3Plus/src/OgreGL3PlusRenderSystem.cpp (line 3434) [GUI] [Err] [Ogre2RenderEngine.cc:1304] Unable to create the rendering window: OGRE EXCEPTION(3:RenderingAPIException): OpenGL 3.3 is not supported. Please update your graphics card drivers. in GL3PlusRenderSystem::initialiseContext at ./RenderSystems/GL3Plus/src/OgreGL3PlusRenderSystem.cpp (line 3434) [GUI] [Err] [Ogre2RenderEngine.cc:1304] Unable to create the rendering window: OGRE EXCEPTION(3:RenderingAPIException): OpenGL 3.3 is not supported. Please update your graphics card drivers. in GL3PlusRenderSystem::initialiseContext at ./RenderSystems/GL3Plus/src/OgreGL3PlusRenderSystem.cpp (line 3434) [GUI] [Err] [Ogre2RenderEngine.cc:1304] Unable to create the rendering window: OGRE EXCEPTION(3:RenderingAPIException): OpenGL 3.3 is not supported. Please update your graphics card drivers. in GL3PlusRenderSystem::initialiseContext at ./RenderSystems/GL3Plus/src/OgreGL3PlusRenderSystem.cpp (line 3434) [GUI] [Err] [Ogre2RenderEngine.cc:1304] Unable to create the rendering window: OGRE EXCEPTION(3:RenderingAPIException): OpenGL 3.3 is not supported. Please update your graphics card drivers. in GL3PlusRenderSystem::initialiseContext at ./RenderSystems/GL3Plus/src/OgreGL3PlusRenderSystem.cpp (line 3434) [GUI] [Err] [Ogre2RenderEngine.cc:1304] Unable to create the rendering window: OGRE EXCEPTION(3:RenderingAPIException): OpenGL 3.3 is not supported. Please update your graphics card drivers. in GL3PlusRenderSystem::initialiseContext at ./RenderSystems/GL3Plus/src/OgreGL3PlusRenderSystem.cpp (line 3434) [GUI] [Err] [Ogre2RenderEngine.cc:1304] Unable to create the rendering window: OGRE EXCEPTION(3:RenderingAPIException): OpenGL 3.3 is not supported. Please update your graphics card drivers. in GL3PlusRenderSystem::initialiseContext at ./RenderSystems/GL3Plus/src/OgreGL3PlusRenderSystem.cpp (line 3434) [GUI] [Err] [Ogre2RenderEngine.cc:1304] Unable to create the rendering window: OGRE EXCEPTION(3:RenderingAPIException): OpenGL 3.3 is not supported. Please update your graphics card drivers. in GL3PlusRenderSystem::initialiseContext at ./RenderSystems/GL3Plus/src/OgreGL3PlusRenderSystem.cpp (line 3434) [GUI] [Err] [Ogre2RenderEngine.cc:1312] Unable to create the rendering window after [11] attempts. [GUI] [Err] [Ogre2RenderEngine.cc:1194] Failed to create dummy render window. [GUI] [Err] [Ogre2RenderEngine.cc:1195] Please see the troubleshooting page for possible fixes: https://gazebosim.org/docs/fortress/troubleshooting Stack trace (most recent call last): #31 Object "/lib/x86_64-linux-gnu/libgz-sim8-gui.so.8", at 0x7983a8277610, in gz::sim::v8::gui::runGui(int&, char**, char const*, char const*, int, char const*, char const*) #30 Object "/lib/x86_64-linux-gnu/libQt5Core.so.5", at 0x7983a6edf3e7, in QCoreApplication::exec() #29 Object "/lib/x86_64-linux-gnu/libQt5Core.so.5", at 0x7983a6ed6a7a, in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) #28 Object "/lib/x86_64-linux-gnu/libQt5Core.so.5", at 0x7983a6f35278, in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) #27 Object "/lib/x86_64-linux-gnu/libglib-2.0.so.0", at 0x7983a5d13a62, in g_main_context_iteration #26 Object "/lib/x86_64-linux-gnu/libglib-2.0.so.0", at 0x7983a5d73736, in #25 Object "/lib/x86_64-linux-gnu/libglib-2.0.so.0", at 0x7983a5d145c4, in #24 Object "/lib/x86_64-linux-gnu/libQt5Core.so.5", at 0x7983a6f35c0e, in #23 Object "/lib/x86_64-linux-gnu/libQt5Core.so.5", at 0x7983a6edb94a, in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) #22 Object "/lib/x86_64-linux-gnu/libQt5Core.so.5", at 0x7983a6ed8117, in QCoreApplication::notifyInternal2(QObject*, QEvent*) #21 Object "/lib/x86_64-linux-gnu/libQt5Widgets.so.5", at 0x7983a656bd44, in QApplicationPrivate::notify_helper(QObject*, QEvent*) #20 Object "/lib/x86_64-linux-gnu/libQt5Core.so.5", at 0x7983a6f06342, in QObject::event(QEvent*) #19 Object "/usr/lib/x86_64-linux-gnu/gz-gui-8/plugins/libMinimalScene.so", at 0x798394400504, in gz::gui::plugins::RenderWindowItem::Ready() #18 Object "/usr/lib/x86_64-linux-gnu/gz-gui-8/plugins/libMinimalScene.so", at 0x798394400194, in gz::gui::plugins::RenderThread::Initialize[abi:cxx11]() #17 Object "/usr/lib/x86_64-linux-gnu/gz-gui-8/plugins/libMinimalScene.so", at 0x79839440ea8f, in gz::gui::plugins::RenderThreadRhiOpenGL::Initialize[abi:cxx11]() #16 Object "/usr/lib/x86_64-linux-gnu/gz-gui-8/plugins/libMinimalScene.so", at 0x798394404898, in gz::gui::plugins::GzRenderer::Initialize[abi:cxx11](gz::gui::plugins::RenderThreadRhi&) #15 Object "/lib/x86_64-linux-gnu/libgz-rendering8.so.8", at 0x798394379012, in gz::rendering::v8::RenderEngineManager::Engine(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) #14 Object "/lib/x86_64-linux-gnu/libgz-rendering8.so.8", at 0x798394378d64, in gz::rendering::v8::RenderEngineManagerPrivate::Engine(EngineInfo, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) #13 Object "/lib/x86_64-linux-gnu/libgz-rendering8.so.8", at 0x7983943814cf, in gz::rendering::v8::BaseRenderEngine::Init() #12 Object "/usr/lib/x86_64-linux-gnu/gz-rendering-8/engine-plugins/libgz-rendering-ogre2.so", at 0x798358ffa5f6, in gz::rendering::v8::Ogre2RenderEngine::InitImpl() #11 Object "/usr/lib/x86_64-linux-gnu/gz-rendering-8/engine-plugins/libgz-rendering-ogre2.so", at 0x798358ffd2ab, in gz::rendering::v8::Ogre2RenderEngine::InitAttempt() #10 Object "/usr/lib/x86_64-linux-gnu/OGRE-2.3/libOgreNextMain.so.2.3.1", at 0x798358aff7cf, in Ogre::ResourceGroupManager::initialiseAllResourceGroups(bool) #9 Object "/usr/lib/x86_64-linux-gnu/OGRE-2.3/libOgreNextMain.so.2.3.1", at 0x798358b0cf97, in Ogre::ResourceGroupManager::parseResourceGroupScripts(Ogre::ResourceGroupManager::ResourceGroup*) #8 Object "/usr/lib/x86_64-linux-gnu/OGRE-2.3/libOgreNextMain.so.2.3.1", at 0x798358b4c861, in Ogre::ScriptCompilerManager::parseScript(Ogre::SharedPtr<Ogre::DataStream>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) #7 Object "/usr/lib/x86_64-linux-gnu/OGRE-2.3/libOgreNextMain.so.2.3.1", at 0x798358b43f69, in Ogre::ScriptCompiler::compile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) #6 Object "/usr/lib/x86_64-linux-gnu/OGRE-2.3/libOgreNextMain.so.2.3.1", at 0x798358b43c52, in Ogre::ScriptCompiler::compile(Ogre::SharedPtr<std::__cxx11::list<Ogre::SharedPtr<Ogre::ConcreteNode>, Ogre::STLAllocator<Ogre::SharedPtr<Ogre::ConcreteNode>, Ogre::CategorisedAllocPolicy<(Ogre::MemoryCategory)0> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) #5 Object "/usr/lib/x86_64-linux-gnu/OGRE-2.3/libOgreNextMain.so.2.3.1", at 0x798358b546aa, in Ogre::MaterialTranslator::translate(Ogre::ScriptCompiler*, Ogre::SharedPtr<Ogre::AbstractNode> const&) #4 Object "/usr/lib/x86_64-linux-gnu/OGRE-2.3/libOgreNextMain.so.2.3.1", at 0x798358b5599f, in Ogre::TechniqueTranslator::translate(Ogre::ScriptCompiler*, Ogre::SharedPtr<Ogre::AbstractNode> const&) #3 Object "/usr/lib/x86_64-linux-gnu/OGRE-2.3/libOgreNextMain.so.2.3.1", at 0x798358b5b64b, in Ogre::PassTranslator::translate(Ogre::ScriptCompiler*, Ogre::SharedPtr<Ogre::AbstractNode> const&) #2 Object "/usr/lib/x86_64-linux-gnu/OGRE-2.3/libOgreNextMain.so.2.3.1", at 0x798358bcd576, in Ogre::Technique::createPass() #1 Object "/usr/lib/x86_64-linux-gnu/OGRE-2.3/libOgreNextMain.so.2.3.1", at 0x798358ac5aff, in Ogre::Pass::Pass(Ogre::Technique*, unsigned short) #0 Object "/usr/lib/x86_64-linux-gnu/OGRE-2.3/libOgreNextMain.so.2.3.1", at 0x7983589f24a6, in Ogre::Hlms::createDatablock(Ogre::IdString, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, Ogre::HlmsMacroblock const&, Ogre::HlmsBlendblock const&, std::vector<std::pair<Ogre::IdString, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, Ogre::STLAllocator<std::pair<Ogre::IdString, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, Ogre::CategorisedAllocPolicy<(Ogre::MemoryCategory)0> > > const&, bool, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) 段错误 (地址没有映射到对象 [0x220])
最新发布
06-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值