Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.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中绘制的元素的图像_Javascript_Three.js_Rendering - Fatal编程技术网

Javascript 获取渲染时在three.js中绘制的元素的图像

Javascript 获取渲染时在three.js中绘制的元素的图像,javascript,three.js,rendering,Javascript,Three.js,Rendering,我认为three.js处理渲染的方式是,它将每个元素转换为一个图像,然后在上下文中绘制。 我在哪里可以得到更多的信息。 如果我是对的,有没有办法得到这个图像并加以处理 如有任何信息,将不胜感激 Three.js内部描述了场景在3D空间中的外观,包括所有顶点和材质等。渲染过程采用该三维表示并将其投影到二维空间。Three.js有几个渲染器,包括(最常见的)和。它们都使用不同的方法绘制二维投影: WebGLRenderer使用映射到图形命令的JavaScript API。尽可能多地,客户机的GPU

我认为three.js处理渲染的方式是,它将每个元素转换为一个图像,然后在上下文中绘制。 我在哪里可以得到更多的信息。 如果我是对的,有没有办法得到这个图像并加以处理


如有任何信息,将不胜感激

Three.js内部描述了场景在3D空间中的外观,包括所有顶点和材质等。渲染过程采用该三维表示并将其投影到二维空间。Three.js有几个渲染器,包括(最常见的)和。它们都使用不同的方法绘制二维投影:

  • WebGLRenderer使用映射到图形命令的JavaScript API。尽可能多地,客户机的GPU获取部分3D表示,并或多或少地执行2D投影本身。渲染每个几何体时,会将其绘制到缓冲区上。完整缓冲区是一个帧,它是显示在
    中的三维空间的完整二维投影
  • CanvasRenderer使用JavaScript API进行二维绘图。它在内部执行2D投影(速度较慢),但在其他方面的工作方式与WebGLRenderer在较高级别上的工作方式类似
  • CSS3DRenderer使用DOM元素和CSS3D变换来表示3D场景。这大致意味着浏览器将普通2D DOM元素转换为3D空间,以匹配Three.js 3D内部表示,然后以2D格式将其投影回页面
(所有这些都被高度简化了。)

重要的是要了解,帧渲染的WebGL和画布表示是您在屏幕上看到的结果图片,但它不是
。通常,浏览器每秒渲染60帧。您可以通过以下方式提取帧。通常,您需要停止动画循环以执行此操作,否则可能无法捕获所需的帧。以这种方式捕获帧的速度很慢,而且由于浏览器每秒渲染的帧太多,因此无法轻松捕获每一帧

此外,Chrome还内置了一个功能,允许您仔细查看浏览器绘制的每个框架


在Three.js渲染帧时,您无法轻松截取缓冲区,但您可以像通常那样直接在画布上绘制
renderer.context
是Three.js绘制的图形上下文,其中
renderer
是设置Three.js场景时创建的渲染器实例。(图形上下文基本上是组装构成帧的缓冲区的助手。)

感谢您提供的有用信息,但如果我们可以单独渲染每个元素,或者获得元素的可见像素,这将非常有用……我想您可以通过将3D空间中的每个对象渲染到单独的画布上来实现。还可以打开/关闭渲染某些对象。