Ogre:render to texture

简介:

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().

目录
相关文章
249Echarts - 3D 曲面(Simple Surface)
249Echarts - 3D 曲面(Simple Surface)
204 0
|
小程序 图形学 C语言
OpenglEs之着色器
Opengl ES连载系列
144 0
|
图形学
unity报错之Material doesn‘t have a texture property ‘_MainTex
Material doesn‘t have a texture property ‘_MainTex
unity报错之Material doesn‘t have a texture property ‘_MainTex
|
Java
com.jogamp.opengl.GLException: J3D-Renderer-1: createImpl ARB n/a but required, profile > GL2 reques
com.jogamp.opengl.GLException: J3D-Renderer-1: createImpl ARB n/a but required, profile > GL2 reques
90 0
|
API 计算机视觉 索引
|
存储
Renderer.material与Renderer.sharedMaterial的区别
此函数自动实例化材质并使它们对于此渲染器是唯一的。在销毁游戏对象时销毁材料是您的责任。 Resources.UnloadUnusedAssets 也会破坏材质,但通常仅在加载新关卡时调用。
263 0
Renderer.material与Renderer.sharedMaterial的区别
|
图形学
Unity里实现Sprite Renderer的阴影
将以下脚本附到产生Shadow的物体上: voidOnEnable(){ GetComponent().receiveShadows =true; GetComponent().castShadows =true; } 但是这是不够的,还需要Shader帮忙,下面的Shader请放到产生Shado...
3166 0
|
异构计算 编解码 开发者
Shader、Draw Call和渲染管线(Rendering Pipeline)
翻阅了很多资料,也做了不少笔记,决定还是对渲染进行一个总结,以巩固所学的东西。   《Real-Time Rendering, Third Edition》   (PDF的配图链接)将一个渲染流程分为三个阶段: 即 应用阶段(PApplication Stage)、几何阶段(Geometry St...
1686 0