目前有个需求,需要截屏做模糊操作,之前2D截屏是一个摄像机做呈现,另外一个摄像机render到texture上,对texture进行操作就行了。
但是3D里测试了下摄像机不能渲染canvas下的UI,而canvas在做呈现,用rendertexture和settimeout渲染一帧又会闪一下蓝屏。 canvas只能对自己下面的UI渲染,又没办法用其他canvas做rendertexture。
总结:3D怎么使UI同时被呈现和被rendertexture。
有没有好的办法。
canvas 下的 targetTexture 也可以放 RenderTexture,然后你再处理这个 RenderTexture 就行了
canvas渲染rendertexture,这个canvas有一帧的呈现空白期,会闪一下
空白期?不是很理解是在什么情况下会出现
canvas设置targetTexture的话,这个canvas就不能呈现到屏幕了吧。
canvas设置targetTexture渲染后,再设置targetTexture = null,以便继续呈现到屏幕。但是渲染不是同步的,那么从设置targetTexture到设置为null这一段时间屏幕上什么都不显示。状态就是闪一下屏幕。
unity和cocos2d解决方法是:
canvas做屏幕呈现,如果需要同时渲染到一张图片的话,用另外一个摄像机渲染到图片,不影响canvas。
但是经过测试,摄像机没办法渲染canvas下的UI。
渲染是同步的,都是一帧内完成,不是你设置了 targetTexture 我就立马给你渲染,一帧之内我只能渲染一次,targetTexture = rendertexture; targetTexture = null; 最终是按 null 来执行的,也就是直接画在屏幕上,你这种同一个内容画两次的需求,要么自己去定制,要么就是把一个 Canvas 的内容画到 RenderTexture 上,把这个 RenderTexture 拿去给另一个 UI 里的贴图使用
要是不明白用法的话,可以看一下,test-cases-3d 里关于 rendertexture 这部分的测试例,你说的这种方法我参考一下 2dx 的做法