Я объединяю больше объектов для создания BufferGeometry. Во время слияния я хочу заполнить буфер, который я буду использовать позже, чтобы добавить атрибут к моей BufferGeometry. Поэтому мне нужно знать размер буфера до Буферизованная геометрия создана.Почему количество вершин в объединенной геометрии отличается от числа вершин в буферизованной геометрии, полученной из нее?
Чтобы вычислить размер буфера я подсчет числа вершин в этой геометрии добавляется к числу лиц, умноженным на 3. Так как этот код говорит https://github.com/mrdoob/three.js/blob/master/src/core/DirectGeometry.js#L148, и как этот ответ предполагает Does converting a Geometry to a BufferGeometry in Three.js increase the number of vertices?
Но делать например, число вершин в геометрии буфера составляет 57600, что в моем вычислении составляет 67400. Я делаю что-то неправильно, но я не понимаю, что именно.
Это код, который я использую:
let tot_objects = 100;
let material = new THREE.MeshStandardMaterial({color: 0x00ff00});
let geometry = new THREE.BoxGeometry(5, 5, 5, 4, 4, 4);
let objs = populateGroup(geometry, material, tot_objects);
//let's merge all the objects in one geometry
let mergedGeometry = new THREE.Geometry();
for (let i = 0; i < objs.length; i++){
let mesh = objs[i];
mesh.updateMatrix();
mergedGeometry.merge(mesh.geometry, mesh.matrix);
}
let bufGeometry = new THREE.BufferGeometry().fromGeometry(mergedGeometry);
let totVerticesMergedGeometry = (mergedGeometry.vertices.length) + (mergedGeometry.faces.length * 3);
console.log(bufGeometry.attributes.position.count); // 57600
console.log(totVerticesMergedGeometry); // it returns 67400 !!!
scene.add(new THREE.Mesh(bufGeometry, material));
function populateGroup(selected_geometry, selected_material, tot_objects) {
let objects = [];
for (var i = 0; i< tot_objects; i++) {
let coord = {x:i, y:i, z:i};
let object = new THREE.Mesh(selected_geometry, selected_material);
object.position.set(coord.x, coord.y, coord.z);
object.rotateY((90 + 40 + i * 100/tot_objects) * -Math.PI/180.0);
objects.push(object);
}
return objects;
}
Никто не знает, что я делаю неправильно? – edap