Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Three.js 如何排序/优化对象列表以避免gl调用_Three.js - Fatal编程技术网

Three.js 如何排序/优化对象列表以避免gl调用

Three.js 如何排序/优化对象列表以避免gl调用,three.js,Three.js,我正在查看three.js代码,注意到它在绘制时在所有对象上交互。然后依次更新每个对象的GL上下文。但是如果我有一堆对象共享一个材质,这是非常低效的,因为它可能与其他对象交错 如何按顺序放置对象以最小化gl调用?我知道哪些对象共享属性,但我不知道如何告诉three.js这些信息 更新:我修改了three.js代码并计算了更新次数。这是相当浪费的。给定一个具有两种材质的逻辑对象,对于我添加到场景中的每个对象,它需要交换两次程序。因此,对于100个这样的对象,它将交换200次,而不是期望的2次交换

我正在查看three.js代码,注意到它在绘制时在所有对象上交互。然后依次更新每个对象的GL上下文。但是如果我有一堆对象共享一个材质,这是非常低效的,因为它可能与其他对象交错

如何按顺序放置对象以最小化gl调用?我知道哪些对象共享属性,但我不知道如何告诉three.js这些信息


更新:我修改了three.js代码并计算了更新次数。这是相当浪费的。给定一个具有两种材质的逻辑对象,对于我添加到场景中的每个对象,它需要交换两次程序。因此,对于100个这样的对象,它将交换200次,而不是期望的2次交换

什么是“最佳”是针对具体情况的,所以你的问题太笼统,无法回答。国家变化不是唯一值得关注的问题

three.js将不透明对象从前到后排序,将透明对象从前到前排序。它最后渲染透明对象

如果你设定

renderer.sortObjects = false;
然后,将按照对象添加到场景中的顺序渲染对象。既然你知道你的对象是什么,这就是你的工作

还可以合并几何体,或使用
BufferGeometry
减少绘制调用的次数

您可以通过在控制台中检查
renderer.info
来获取有关渲染器的信息(或请参阅)。这样,您就不必破解源代码


three.js r.64

问题是如何对对象进行分组?我确信类似材质的对象可以一起渲染。不幸的是,这些都不是静态的,因此不能组合,必须在不同的场景对象中(因为它们有自己的变换)。这是一个常见的问题。我尽我所能帮助你,我可以回答你的three.js问题,但我无法告诉你如何对对象进行分组。我知道我想如何对它们进行分组,我只是不确定如何告诉three.js。也就是说,我看不到有能力影响渲染器中对象的顺序。我编写了一个自定义分类器,它进行了正确的分组,但显然不是标准的并按您希望的渲染顺序将对象添加到场景中。但我不能这样做。逻辑对象在Object3d包中分组在一起。每个都是一对,所有第一对成员都应首先呈现,然后呈现所有第二对成员。我使用组合对象共享缩放和位置矩阵。