Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript three.js如何提高renderer.doElement.todataurl的速度?_Javascript_Image_Canvas_Three.js_Data Uri - Fatal编程技术网

Javascript three.js如何提高renderer.doElement.todataurl的速度?

Javascript three.js如何提高renderer.doElement.todataurl的速度?,javascript,image,canvas,three.js,data-uri,Javascript,Image,Canvas,Three.js,Data Uri,我使用three.js renderer.domeElement.todataurl获取当前视图的图像。它很好用。 问题是我的项目需要以高频率(每0.1秒)捕获图像 在这种频繁浏览的情况下,浏览几乎冻结,用户无能为力。函数todataurl()占用了大部分cpu时间 欢迎提出任何建议 我的想法是: 1) 找到另一种捕获图像的方法,避免todataurl()? 2) 将渲染器放入web worker 谢谢。首先,不建议读取像素那么快。在普通桌面应用程序中甚至不建议使用它 如果必须,我建议您使用gl

我使用three.js renderer.domeElement.todataurl获取当前视图的图像。它很好用。 问题是我的项目需要以高频率(每0.1秒)捕获图像

在这种频繁浏览的情况下,浏览几乎冻结,用户无能为力。函数todataurl()占用了大部分cpu时间

欢迎提出任何建议

我的想法是: 1) 找到另一种捕获图像的方法,避免todataurl()? 2) 将渲染器放入web worker


谢谢。

首先,不建议读取像素那么快。在普通桌面应用程序中甚至不建议使用它

如果必须,我建议您使用gl.readpixels。这应该是在javascript中读取像素的最快方法。同时尽可能减少宽度和高度,以加快阅读速度

如何使用:

var pixels = new Uint8Array(width * height * 4);
renderer.gl.readPixels(x, y, width, height, gl.RGBA, gl.UNSIGNED_BYTE, pixels);
然后,您可以使用worker中的像素数组来执行更多操作。或者将像素的变换延迟到稍后的日期

==================================================

如果您使用的是canvasrenderer,那么您应该使用context.getImagedata。

Docs here:另请注意,您可以使用gl.RGB来减少复制的总数据量。