如何使用模型边界框在three.js中计算相机的近平面

时间:2018-07-24 08:54:27

标签: three.js

我正在使用three.js创建一个查看器,发现将相机的近平面和远平面设置为固定值会导致某些3d模型闪烁。

我看到这是由于GPU的边界框长度约为4000-5000的模型精度不够。

近平面当前设置为0.1,远为20000。

1 个答案:

答案 0 :(得分:1)

您可以向上移动近平面以获得更高的分辨率。也许是1.0 ...

要注意的另一个选项是对数深度缓冲区: https://threejs.org/examples/webgl_camera_logarithmicdepthbuffer.html

您可以通过其几何形状获取网格的边界框... geometry.boundingBox和geometry.boundingSphere ..有时您需要使用mesh.geometry.computeBoundingBox和computeBoundingSphere ...重新计算它们。

要在摄影机空间中获取边界框有些棘手..我不知道这样做的最佳选择,但是其他人可能会考虑...

一种蛮力方式是将网格顶点转换为屏幕空间。

也许像这样:

var gclone = mesh.geometry.clone();
for(var i=0;i<geometry.vertices.length;i++)
  gclone.vertices[i].applyMatrix4(mesh.matrixWorld).project(camera)
gclone.computeBoundingBox()

var zExtent = gclone.boundingBox.max.z-gclone.boundingBox.min.z