假设有一个需求,需要获取 Three 场景的一张快照,然后再将其显示在屏幕上。

1. 获取快照

  对于这个需求,一种方法是在创建 WebGLRenderer 时设置一个 preserveDrawingBuffer 参数为 true,然后再调用场景中的 canvastoDataURL 方法来获取某一帧的 base64 格式的图像数据:

renderer = new WebGLRenderer({preserveDrawingBuffer :true
});const image = new Image();
image.src = renderer.domElement.toDataURL();

  而 preserveDrawingBuffer 参数的含义是:是否保留缓直到手动清除或被覆盖。若设为 true,在任意时刻,前一帧的缓存图像不会被清除,因此可以获取到任意一刻的截图,若未设置的话,获取的截图可能就会是一张空白的图片。不过,这有一个明显的副作用,那就是会更加的消耗性能和占用内存。因此不推荐这种方式。

  另一种方式就是在获取截图之前先再渲染一下场景,这样就不会因为缓存清空而导致截屏空白了:

renderer.clear();
renderer.render(scene, camera);
const image = new Image();
image.src = canvas.toDataURL("image/png");

2.在屏幕上显示出来

  既然我们已经能够获取到正确的快照了,那么要将其显示在屏幕上,我们可以再创建一个新的 canvas,然后将获取的快照使用这个新的 canvas 加载出来就行了,代码如下:

const canvas = renderer.domElement;renderer.clear();
renderer.render(scene, camera);const image = new Image();
const base64 = canvas.toDataURL("image/png");
image.src = base64;const mycanvas = document.getElementById('myImageEditCanvas');
mycanvas.width = canvas.width;
mycanvas.height = canvas.height;
const ctx = mycanvas.getContext('2d');image.onload = () => {ctx.drawImage(image, 0, 0);
};

  使用 canvas 载入图像使用了 drawImage 方法,它的第二第三个参数的意识是从源图像的哪个位置开始载入,要载入整张图像,填入 0 即可。

  drawImage 详细一些的介绍可看:drawImage

ThreeJS获取快照相关推荐

  1. reactjs组件的生命周期函数:getSnapshotBeforeUpdate更新之前获取快照

    reactjs组件的生命周期函数:getSnapshotBeforeUpdate更新之前获取快照

  2. wpf 对控件进行截图,获取快照

    有时候我们项目,在执行某个操作后,会生成一些数据结果,如报表一类的东西,我们需要对结果进行保存,甚至是生成word文档. 那么首先获取到控件快照就最基本的条件. 生成快照的静态方法类 using Sy ...

  3. threejs获取模型坐标_Threejs倒影实现解析

    倒影是在自然界中非常常见的一种现象,例如水面倒影.镜子.我们都知道,眼睛之所以能够看到某个物体,是因为物体本身能够发光或者物体能够反射其它的物体所发的光,这些光进入到我们的眼里就形成了该物体影像.倒影 ...

  4. THREEJS - 获取场景中模型数据

    在一些场景中,我们需要展示场景内的模型数据,如模型的数量.面片数以及顶点数等,下面给大家提供的就是对应的统计函数,在场景加载结束后,传入对应的scene即可: /*** 获取场景内模型数量.顶点数及面 ...

  5. threejs 绘制球体_javascript – 使用ThreeJS获取球体纹理上的点击位置

    目前:我有一个球体,其上有一个围绕y轴旋转的纹理.我也有在3D空间中点击的位置,以及球体上的旋转位置(我认为). 目标:获取纹理上的位置,例如:我想获得我点击的图像的正方形. (参见下面的示例球体和图 ...

  6. threejs获取物体的坐标的最大值和最小

    let box =  new THREE.Box(): box.setObjectFrom( '物体')途中标红色的方法都是等效的 然后查看 box.max 和box.min属性: 2D的类似

  7. cgo+gSoap+onvif学习总结:5、获取profileToken、rtsp流地址、快照地址及cgo程序signal SIGSEGV: segmentation violation解决方法

    cgo+gSoap+onvif学习总结:5.获取profileToken.rtsp流地址.快照地址及cgo偶发signal SIGSEGV: segmentation violation分割违例解决方 ...

  8. Postgresql源码(16)数据库快照数据结构与获取

    相关: <Postgresql源码(18)PGPROC相关结构> <Postgresql源码(65)新快照体系Globalvis工作原理分析> <Postgresql快照 ...

  9. 虚拟化部署之灵活应用Hyper-V快照

    在<虚拟化部署之Hyper-V虚拟机创建>和<虚拟化部署之Hyper-V快速迁移>两篇文章中我清楚了如何创建和迁移虚拟机,虚拟机成功创建以后我们便可以像正常系统一样安装必要的软 ...

最新文章

  1. 3d stroke插件下载_推荐一款好用的PS 3D地图插件,PS插件3D Map Generator ,一键生成地图神器...
  2. 传统的6d位姿估计fangfa1_基于改进的点对特征的6D位姿估计
  3. ubuntu安装mysql报错_在Ubuntu上安装mysql数据库和遇到的问题
  4. 让你更中立!腾讯微信进行灰度测试 “好看”变为“在看”
  5. vue如何取消下拉框按回车自动下拉_如何用大白菜重装系统|大白菜怎么重装系统教程详解...
  6. asp.net中, 如何在后台获取访问这个页面的用户的名字?
  7. 个人CTF入门训练过程WriteUp
  8. Elman神经网络原理
  9. 计算机科技想象作文600字,科技想象作文600字四篇
  10. 最近在写一个IE9的插件
  11. 微软云计算-私有云概述
  12. Git中HEAD和ORIG_HEAD指针指的是什么
  13. 致翔OA漏洞复现手册
  14. min capacitance 违例
  15. 2010浙大报录比及分数
  16. 洛谷P1007——独木桥 解法 (C++)
  17. 计算机网络 自顶向下方法 原书第7版 Chapter 1 计算机网络与因特网读书笔记
  18. 控制用计算机应具有特点,国开(中央电大)专科《可编程控制器应用》网上形考、机考试题及答案...
  19. 为何一页的本科简历可以打败研究生
  20. 被面试官问到频繁跳槽,求职者应该怎么回

热门文章

  1. MySQL基础篇:用户和权限管理
  2. Kafka 六战 RabbitMQ,这差距还不够明显吗?
  3. 厉害了!单点登录系统用 8 张漫画就解释了。。。
  4. 全局负载均衡与CDN内容分发
  5. 面试题:mysql 表删除一半数据,B+树索引文件会不会变小???
  6. 一口气说出 9种 分布式ID生成方式,面试官有点懵了
  7. ES的跨索引查询有多便利?对比下分库分表、分片更直观
  8. 海归技术大佬:硅谷科技公司到底牛在哪里?讲透“奈飞文化”8个原则!
  9. 程序员吐槽:不和同事一起吃午饭,被领导批了!网友戏称:以后拉屎也要和同事一起,打成一片!...
  10. 有格调的读书人,朋友圈是什么样的?