我正在查看three.js代码并注意它在绘制时会对所有对象进行交互。然后,这又更新每个对象的GL上下文。但是如果我有一堆共享一个材料的对象,这是非常低效的,因为它可能与其他对象交错。
如何将我的对象按顺序放置以最小化gl调用?我知道哪些对象共享属性,我只是不知道如何告诉three.js那些信息。
更新:我修改了three.js代码并计算了更新。这很浪费。给定一个具有两种材质的逻辑对象,对于我添加到场景中的每一种,它需要交换两次程序。因此,对于100个这样的对象,它将交换200次而不是所需的2次交换!
答案 0 :(得分:1)
什么是“最佳”是特定于案例的,因此您的问题过于笼统,无法回答。国家变化不是唯一令人担忧的问题。
three.js从前到后对不透明物体进行排序,从后到前对透明物体进行排序。它最后渲染透明对象。
如果您设置
renderer.sortObjects = false;
然后对象将按照添加到场景的顺序进行渲染。既然你知道你的对象是什么,这就是你的解决方法。
您还可以合并几何体,或使用BufferGeometry
减少绘制调用次数。
您可以通过检查控制台中的renderer.info
来获取有关渲染器的信息(或参见https://github.com/spite/rstats)。这样,您就不必破解来源。
three.js r.64