【问题标题】:Why the number of vertices in a merged Geometry differs from the number of vertices in the BufferedGeometry obtained from it?为什么合并的 Geometry 中的顶点数与从中获得的 BufferedGeometry 中的顶点数不同?
【发布时间】: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


【解决方案1】:

在非索引 BufferGeometry 中,position 属性数组的长度始终为 numberOfFaces * 3 * 3(每个面 3 个顶点,每个顶点 3 个值)。这也是您指向的 DirectGeometry 代码所做的:它遍历面并将每个面的三个顶点推送到顶点数组。

一个在所有方向上有 4 个线段的长方体几何有 192 个面:4 * 4 = 16 线段每边,2 三角形每线段构成 16 * 2 = 32 面每边。和32 * 6 = 192。你有100 这些盒子几何形状,所以总共有19200 个面。 3 次我们得到57600 顶点。

【讨论】:

  • 非常感谢您的清晰解释,这解决了我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-11
  • 1970-01-01
  • 2016-12-24
  • 2018-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多