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