版本:2.4.13,怎么将多个cc.SpriteFrame绘制到一张cc.SpriteFrame上

引擎里不直接使用texture,直接使用的是精灵叠加在一起,进行渲染排序。最终结果是不同精灵进行不同的渲染顺序,形成了同一张图显示在屏幕上。

引擎以前都能合,以前是有cc.RenderTexture().bgain()和end()函数了,不知道后来为什么给移除了,还不给平替方案 :sob:

这个大多数是用来截图读取屏幕像素的,现在是
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();混合并渲染出来呢? :sob:

一个相机有分组,相机只渲染相同分组的节点,读取的texture_result就是相机的当前画面。

相机确实简单,但是感觉绕远了 :rofl:

你要的功能本应该通过cocos的框架去实现,而不是自己去模拟相机渲染。

所以说这引擎没做的嘛

引擎的渲染框架追求的是通用,通用的渲染需要依托框架实现,你这个拿底层数据,模拟底层渲染,需要看cocos的底层代码实现。合并texture这件事,也可以自己按照数组进行合并。对于alpha空白的像素使用背景像素,对于alpha不空白的像素使用顶层像素,如果有透明,合并alpha

顶一顶顶一顶顶一顶顶一顶

顶一顶顶一顶顶一顶顶一顶

你应该是要混合吧,shader里面采样多张纹理混合后输出

就是要在不用shader的前提下做到这点 :sob:

那就是读取像素值然后根据rgba值比例权重计算新的值

自己算像素的话,js这性能怕不是要算几分钟,还不如用摄像机截图,而这截图我都嫌慢 :sob:

用rendertexture 解决

用了的,后面绘制的会擦除前面绘制的东西像我一楼那样背景都给擦没了

(帖子被作者删除,如无标记将在 24 小时后自动删除)

创建一个render texture不就好了。在缓冲区中进行