[LayaAir 2.0]Laya2.0 的3d截图

前段时间搞抖音3d小游戏,有一个截图的需求,才发现2d的截图不能用于3d截图,在论坛上也没有看到解决方案,昨天尝试了下最后出了解决方案,在这里分享下,直接上代码了
shot_4_4_4_4():void{
        let gl:WebGL2RenderingContext = (Laya.WebGLContext as any).mainContext;
        let pixels:Uint8Array = new Uint8Array(gl.drawingBufferWidth*gl.drawingBufferHeight*4);
        gl.readPixels(0,0,gl.drawingBufferWidth,gl.drawingBufferHeight,gl.RGBA,gl.UNSIGNED_BYTE,pixels);
        let sp:Laya.Sprite = new Laya.Sprite();
        let w: number = gl.drawingBufferWidth;
        let h: number = gl.drawingBufferHeight;
        let texture2d: Laya.Texture2D = new Laya.Texture2D(w,h,Laya.TextureFormat.R8G8B8A8,false,false);
        texture2d.setPixels(pixels);
        let tex: Laya.Texture = new Laya.Texture(texture2d);
        let sp:Laya.Sprite = new Laya.Sprite(tex);
 
}大致思路应该按照代码往下缕就行了,读取像素点。
截取的像素与实际位置是上下反向,这个就没必要提供方案了。
在这之前还不能生效,还需要将Config的preserveDrawingBuffers设置为false,不然读取像素的时候rgb的通道值,别的论坛里有说这样会影响性能,实际用的时候没有看出有啥差别
还有一种思路是在每次清理buff前进行截取就不用对此参数进行设置,底层代码比较复杂,暂时没那么多时间研究,哪位大神搞出来了还请赐教
已邀请:

Drancy

赞同来自:

TIM图片20200815212101.png

头次发帖,发现图片丢了,补一下

要回复问题请先

商务合作
商务合作