three.js 屏幕截取变成图片 截图

问题提出

截取three.js 渲染的图,如果直接将输出的canvas变成图片是无法获取的,因为在获取之前渲染界面是清空的状态,所以需要在渲染之后清空之前将渲染的内容转换为图片,即将场景的内容渲染一遍并将渲染的内容转为图片数据。

关于WebGL的截图

WebGL渲染内容的截图空白/全黑算是一个常常被问到的问题,在爆栈上面也被问到过,这里给一个稍微比较综合一些的答案链接
为什么WebGL渲染的canvas截图是空白的?

解决方案

capture(){
          var image = new Image();
          renderer.render(scene, camera);//此处renderer为three.js里的渲染器,scene为场景 camera为相机

          let imgData = renderer.domElement.toDataURL("image/jpeg");//这里可以选择png格式jpeg格式
          image.src = imgData;
          document.body.appendChild(image);//这样就可以查看截出来的图片了
}

其实就是相当于渲染一帧,并把这一帧输出
而如果需要截某个部分的图片,只需要将相机变一下,换成自己想要范围,并渲染一帧再截屏出来。
优点常明显, 这样相当于重新渲染一帧,即便是截取某个很小的部分,截取的图片也是很清晰的。

如果加上扩展的话可以实现某个区域的放大。

另外我看到有人推荐将renderer的 preserveDrawingBuffer设置为true。这样的确可以在任意时间获得截图,但是这样是更消耗性能以及占用内存的,不推荐使用。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值