引擎里不直接使用texture,直接使用的是精灵叠加在一起,进行渲染排序。最终结果是不同精灵进行不同的渲染顺序,形成了同一张图显示在屏幕上。
引擎以前都能合,以前是有cc.RenderTexture().bgain()和end()函数了,不知道后来为什么给移除了,还不给平替方案
这个大多数是用来截图读取屏幕像素的,现在是
initRender() {
let texture = new cc.RenderTexture();
var size = cc.view.getFrameSize();
texture.initWithSize(size.width, size.height, cc.gfx.RB_FMT_S8);
this.camera_result.targetTexture = texture;
this.camera_result.zoomRatio = cc.view.getVisibleSize().height / (size.height / cc.view.getScaleY());
this.texture_result = texture;
},
initImage() {
let data = this.texture_result.readPixels();
this._width = this.texture_result.width;
this._height = this.texture_result.height;
let picData = this.filpYImage(data, this._width, this._height);
return picData;
},
用相机实现截图功能
相机截图效率太低了吧,怎么将两个let data = this.texture_result.readPixels();混合并渲染出来呢?
一个相机有分组,相机只渲染相同分组的节点,读取的texture_result就是相机的当前画面。
相机确实简单,但是感觉绕远了
你要的功能本应该通过cocos的框架去实现,而不是自己去模拟相机渲染。
所以说这引擎没做的嘛
引擎的渲染框架追求的是通用,通用的渲染需要依托框架实现,你这个拿底层数据,模拟底层渲染,需要看cocos的底层代码实现。合并texture这件事,也可以自己按照数组进行合并。对于alpha空白的像素使用背景像素,对于alpha不空白的像素使用顶层像素,如果有透明,合并alpha
顶一顶顶一顶顶一顶顶一顶
顶一顶顶一顶顶一顶顶一顶
你应该是要混合吧,shader里面采样多张纹理混合后输出
就是要在不用shader的前提下做到这点
那就是读取像素值然后根据rgba值比例权重计算新的值
自己算像素的话,js这性能怕不是要算几分钟,还不如用摄像机截图,而这截图我都嫌慢
用rendertexture 解决
用了的,后面绘制的会擦除前面绘制的东西像我一楼那样背景都给擦没了
(帖子被作者删除,如无标记将在 24 小时后自动删除)
创建一个render texture不就好了。在缓冲区中进行