geometry.attributes.position.array
IS вершины. Каждые три значения составляют одну вершину. Вы также захотите взглянуть на свойство index
(geometry.index
), потому что это список индексов в массиве position
, определяющий вершины, составляющие форму. В случае Mesh
, определенного как отдельные треугольники, каждые три индекса составляют один треугольник. (Данные Tri-Strip немного отличаются, но концепция ссылки на значения вершин по индексу та же.)
Вы можете поочередно использовать вспомогательные функции атрибута:
Эти функции принимают индекс в учет. Поэтому, если вы хотите первую вершину первого треугольника (индекс = 0):
let pos = geometry.attributes.position;
let vertex = new THREE.Vector3( pos.getX(0), pos.getY(0), pos.getZ(0) );
Это эквивалентно:
let pos = geometry.attributes.position.array;
let idx = geometry.index.array;
let size = geometry.attributes.position.itemSize;
let vertex = new THREE.Vector3( pos[(idx[0] * size) + 0], pos[(idx[0] * size) + 1], pos[(idx[0] * size) + 2] );
Как только у вас будет ваша вершина, тогда вы можете использовать mesh.localToWorld
для преобразования точки в мировое пространство.