RenderTexture 渲染到纹理

Stella981
• 阅读 651

cocos2d里面有个CCRenderTexture,用于将指定对象渲染到纹理。在unity3d里面也有同样的技术。

今天查阅了相关资料,再看了一下cocos2d的源码,发现他实际上用的是FBO(帧缓存对象)渲染到纹理技术,即我们可以为帧缓存关联一个纹理附件,然后将帧缓存里面的内容放到纹理附件里面。

在cocos2d里面使用步骤大致如下:

1 创建texture:初始化的时候生成一个空的texture。并指定纹理数据的宽和高。

2 创建FBO:用glGenFramebuffers生成帧缓存FBO framebuffer。

3 记录之前的FBO:glGetIntegerv(GL_FRAMEBUFFER_BINDING, &_oldFBO);              

4 关联texture到FBO:绑定刚才生成的framebuffer(glBindFramebuffer), 用glFramebufferTexture2D 将texture关联到FBO。(当然可以为FBO创建深度缓存,这部分没仔细看)

以下内容通过命令队列执行

5 推送命令绑定FBO:RenderTexture begin 渲染开始的时候再次使用glBindFramebuffer。指定渲染到渲染缓存。注意这部分是推送到render command queue里面执行的。

6 推送命令渲染物体:调用待渲染的物体的visit,将渲染命令推送到render。

7 执行渲染:利用render进行渲染,执行上面5、6条的命令。

8 恢复之前的FBO:RenderTexture end,渲染结束的时候,通过glBindFramebuffer(GL_FRAMEBUFFER, _oldFBO);绑定到老的FBO。

这样就通过帧缓存将东西渲染到了纹理。

点赞
收藏
评论区
推荐文章
凯特林 凯特林
3年前
React - Fiber原理
浏览器渲染屏幕刷新率(FPS)浏览器的正常绘制频率是60次/秒,小于这个值时,用户会感觉到卡顿绘制一次的称为一帧,平均每帧16.6ms帧每个帧的开头包括样式计算、布局和绘制js的执行是单线程,js引擎和页面渲染引擎都占用主线程,GUI渲染和Javascript执行两者是互斥的如果某个js任务执行时间过长,浏览器会推迟渲染,每
Wesley13 Wesley13
3年前
Unity Shader 序列帧动画
shader中的序列帧动画属于纹理动画中的一种,主要原理是将给定的纹理进行等分,再根据时间的变化循环播放等分中的一部分。UnityShader内置时间变量名称类型描述\_Timefloat4(t/20,t,2t,3t)  其中t为自该场景加载所经过时间\_SinTimefloat4(t/8,t/4,t/2,t) 
Wesley13 Wesley13
3年前
Unity渲染教程的GAD中文翻译版本地址。
Unity渲染教程(一):矩阵:http://gad.qq.com/program/translateview/7181958Unity渲染教程(二):着色器基础:http://gad.qq.com/program/translateview/7173930Unity渲染教程(三):使用多张纹理贴图:http://g
Wesley13 Wesley13
3年前
Unity3D开发之Unity5版本自写Shader没有雾的效果问题
原本项目是Unity4.6版本的,升级到Unity5之后发现原本的雾不再看见了,然后查了一下相关资料,发现官方是改变了雾的渲染。这里有相关的官方方式:http://forum.unity3d.com/threads/officialchanginghowfogisdoneinunityshaders.261217/里面有比较重
Stella981 Stella981
3年前
Lite2D的渲染线程尝试
项目地址   https://github.com/dreamyouxi/Lite2D(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fgithub.com%2Fdreamyouxi%2FLite2D)注意:1.GL只能和一个线程相关,所以纹理产生,初始化等都要放到渲染线程
Wesley13 Wesley13
3年前
Unity性能优化整理
纹理优化SpritePacker通过细分导入到Unity的纹理,利用自带的SpritePacker将时间段内需要同时绘制在屏幕上的纹理合并到一个图集中,可以减少Drawcall的开销UGUI优化Canvas1._分离Canvas_画布(Canvas)是U
Wesley13 Wesley13
3年前
2D实现背景图3D滚动效果(透视) !Cocos Creator !
\战斗地面效果!在2D中实现有纵深感(透视)的卷动效果。效果!(http://lamyoung.com//img/inpost/202006/2901.gif)回顾这次的纹理管理仍然是使用Sprite组件的渲染模式Mesh,需要的可以参考初探精灵中的网格渲染模式!(https://www.o
Wesley13 Wesley13
3年前
Unity Mesh基础系列(一)生成网格(程序生成)
目录1渲染事物2创建顶点网格3创建Mesh4生成附加顶点数据本文主要内容:1、创建一个点阵网格2、用协程分析点阵网格的位置3、用三角形定义表面4、自动生成法线5、增加纹理坐标和切线在本教程中,我们将创建一个由顶点和三角形组成
燕青 燕青
1年前
三维数字雕刻软件推荐:Pixologic ZBrush 2024破解版
是一款功能强大的数字雕刻和绘画软件,它可以在计算机中模拟出几乎任何形状、纹理或表面细节。它为艺术家们提供了一个直观的工具集,使其能够在3D空间中进行复杂的形状设计和绘画。该软件包含了许多特性和工具,例如快速建模、细节雕刻、纹理绘制、渲染等等。此外,ZBru
流浪剑客 流浪剑客
1年前
Cinema 4D 2024 for mac(c4d)v2024.0.2中文版 支持M1
Cinema4D2024是一款专业的三维建模、动画和渲染软件,被广泛用于电影制作、广告设计、工业设计等领域。它具有强大的建模工具,可以创建各种复杂的三维场景和动画效果,如多边形网格、NURBS曲线和体积对象等。Cinema4D2024提供了丰富的材质和纹理