#three.js
#three.js
Вопрос:
Для большого количества объектов (узлов графа в моем случае), которые имеют одинаковую геометрию, но разного цвета, что более эффективно:
1) создание сетки, а затем клонирование сетки и материала сетки (с помощью mesh.traverse ) для каждого узла
2) создайте новую сетку с клонированным материалом для каждого узла
Ответ №1:
Единственное различие между созданием объекта с помощью new
и .clone()
заключается в том, что последний также копирует все свойства исходного объекта. Если вам это не нужно, лучше просто создать свои сетки с помощью new
оператора.
Поскольку у вас большое количество объектов, вы можете рассмотреть возможность использования инстанцированного рендеринга, чтобы уменьшить количество вызовов отрисовки в вашем приложении. Прямо сейчас вам нужно нарисовать каждый узел отдельно. При инстанцированном рендеринге узлы отображаются все сразу. Есть несколько примеров, демонстрирующих инстанцированный рендеринг с three.js
:
https://threejs.org/examples/?q=instancing
Использование инстанцированного рендеринга не является обязательным, но может быть полезно, если у вас возникнут проблемы с производительностью. Другой вариант, который проще реализовать, но менее гибкий, — объединить все сетки в большую единую геометрию и использовать цвета вершин. У вас будет единый объект геометрии, материала и сетки, но дополнительный атрибут цвета вершин гарантирует, что ваши узлы будут окрашены по-разному.
three.js R103
Комментарии:
1. Спасибо за комментарий. Возможно, я должен упомянуть, что я использую библиотеку js ( github.com/vasturiano/3d-force-graph ), который зависит от three.js и, таким образом, я не могу реально повлиять на то, когда и как можно рисовать узлы. Я могу указать только сетку для каждого узла. Основываясь на вашем комментарии, я просто создам новую сетку с клонированным материалом.