【发布时间】:2017-06-27 02:40:48
【问题描述】:
我正在将更多对象合并在一起以创建一个 BufferGeometry。在合并期间,我想填充一个缓冲区,稍后我将使用该缓冲区将属性添加到我的 BufferGeometry。因此,我需要在创建 BufferedGeometry之前知道缓冲区的大小。
为了计算缓冲区的大小,我计算了几何中的顶点数加上面数乘以 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;
}
【问题讨论】:
-
没人知道我做错了什么?
标签: three.js