[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前进行截取就不用对此参数进行设置,底层代码比较复杂,暂时没那么多时间研究,哪位大神搞出来了还请赐教
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前进行截取就不用对此参数进行设置,底层代码比较复杂,暂时没那么多时间研究,哪位大神搞出来了还请赐教
没有找到相关结果
已邀请:
要回复问题请先登录
1 个回复
Drancy
赞同来自:
头次发帖,发现图片丢了,补一下