代码之家  ›  专栏  ›  技术社区  ›  nayan dhabarde

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

  •  2
  • nayan dhabarde  · 技术社区  · 7 年前

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

    我发现这是因为对于边界框长度约为4000-5000的模型,GPU的精度不足。

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   manthrax    7 年前

    你可以向上移动近距离的飞机以获得更高的分辨率。也许1…

    另一个需要注意的选项是对数深度缓冲区: 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