javascript - 如何访问 three.js 中的深度数据

标签 javascript three.js

我见过着色器根据边缘处像素的深度(从相机到表面的距离)与相邻像素的深度(深度较小)之间的差异动态地围绕边缘创建轮廓可能意味着更细的轮廓或根本没有轮廓)。喜欢这些渲染:

enter image description here

enter image description here

我有兴趣在我的 three.js 渲染器上使用这样的着色器,但我认为我需要弄清楚如何访问每个像素的深度数据。

Three.js 文档 mentions a depth setting :

depth - whether the drawing buffer has a depth buffer of at least 16 bits. Default is true.

但我不确定具有深度缓冲区的绘图缓冲区是什么意思。我熟悉的图像缓冲区是像素缓冲区,没有深度信息。我应该在哪里访问这个深度缓冲区?

最佳答案

an example in the Three.js website将场景渲染到 THREE.WebGLRenderTarget 并将其 depthBuffer 属性设置为 true。这使您可以访问深度数据。

思路如下:

  1. 将主场景渲染到 WebGLRenderTarget。该目标将包含 RGB 和深度数据,可通过其 .texture 访问。和 .depthTexture相应的属性。
  2. 获取这 2 个纹理,并将它们应用到带有自定义着色器的平面上。
  3. 在飞机的自定义着色器中,您可以访问纹理数据以执行任何您想要的颜色和深度计算。
  4. 将第二个场景(仅包含平面)渲染到 Canvas 。

Here's the link to source code of that example请注意,您可以注释掉第 73 行的代码以允许显示颜色数据。

关于javascript - 如何访问 three.js 中的深度数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50530765/

相关文章:

javascript - 当使用 3d 变换时,Google map 控制 Webkit 中的卡住

javascript - 如何为 JVectorMap jquery 插件生成新的自定义 map ?

javascript - 将动态文本添加到硬币 slider

javascript - 三个 js 贴花

3d - 将模型从3dStudioMax导入THREE.js

javascript - 地球和太阳模型未渲染

javascript - 先锚定标签href,然后onclick

javascript - backbone.js + google.maps api v3 + overlayview = 使用backbone进行原型(prototype)设计

three.js - 过载解析失败?

three.js - 将 THREE.BasicLineMaterial 不透明度设置为 0 会生成一条白色和灰色虚线