我正在使用three.js创建一个查看器,发现将相机的近平面和远平面设置为固定值会导致某些3d模型闪烁。
我看到这是由于GPU的边界框长度约为4000-5000的模型精度不够。
近平面当前设置为0.1,远为20000。
答案 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