Bal*_*ntó 3 performance load three.js
海兰!我正在使用巨大的顶点对象,我能够显示很多模型,因为我将它们分成更小的部分(65K以下的顶点).我也在使用三台js相机.我想通过使用优先级队列来提高性能,当用户移动摄像机时只显示前10个,然后当移动停止显示其余部分时.这部分并不是那么难,但我不想把模式渲染,当它们在另一个对象后面时,可能从相机的视图发出一些光线(检查边界框命中)并根据命中列表我可以构建先前的队列.
你怎么看?
另外,我如何检测是否可以加载下一个模式.(动态)
选项A:遮挡剔除,您需要为此找到一个库.
选项B:使用带摄像机Frustum平面和对象边界框的AABB Plane测试,这将告诉您对象是否在摄像机视野中.(不一定在对象后面可见,因为这样的操作是不可能的,这很可能已经在某种程度上用webgl完成)
实施:谷歌它,三个js可能支持这个
选项C:使用最大对象渲染限制,根据与摄像机的距离和对象的大小确定优先级.例如,计算哪些对象可见(选项B),然后确定最近和最大对象的优先级,并禁用其余对象.
伪代码:
if(object is in frustum ){
var priority = (bounding.max - bounding.min) / distanceToCamera
}
Run Code Online (Sandbox Code Playgroud)
确保着色器只进行一次传递.因为这将使计算时间加倍(大致视情况而定)
选项D:如果全部失败则不会渲染对象,将光线投射到边界框的八个角.这非常准确,但绝不是完美的.
选项A将是最好的,如果您不关心远处的小物体不会被渲染,那么使用选项C会很棒.选项D适用于具有大量顶点的对象,您可能希望根据情况对该对象的更多点进行光线投射.选项B可能对您的场景没有用,但它是c的一部分,以及其他优化方法.总而言之,从来没有一种极其可靠和最佳的方式来判断某些东西是否落后于其他东西.