Blender / Buffergeometry-从顶点组访问顶点

时间:2016-07-19 06:49:34

标签: three.js

我用混合器制作了一个Mesh,它有一个附加了命名的非空顶点组。为了正确导出所有内容,使用三个blender导出器,我选择导出»BufferGeometry«并在额外的顶点组字段中添加了一个»*«(见下面的截图)......

screenshot blender export three

这非常有效,导入后会生成一个工作网格和几何体。 有两件事我不明白:

FIRST:

let vertices  = this[DISK]geometry.getAttribute('position');    
vertices.count / 3; // 226 -- Blender (edit mode vertices) 282
vertices.itemSize   // 3   -- one for x, y and z each, as expected

那么为什么导出模型中的顶点数量会减少呢?

第二

当像这样访问顶点组时:

let hole = this[DISK]geometry.getAttribute('hole');
hole.count/3;  // 226 (same number of items as vertices) why not a third?
hole.itemSize; // 1 -- why?

let count = 0;

for (let i = 0; i < hole.count; i += hole.itemSize) {
    let value = hole.array[i]; // either 1 or 0

    if (value > 0) count++;
}

console.log(count); // 148 (148/3 = 49.333333) ??????

这是否意味着:如果value > 0顶点:

(vertices.array[i], vertices.array[i+1], vertices.array[i+2])

是否包含在该组中?正值意味着什么?

提前致谢!

更新

在github上抓取导出器的源代码导致我Lines 247 - 265 of utils/exporters/blender/addons/io_three/exporter/api/mesh.py.因此,例程迭代所有面的所有顶点,然后遍历此顶点的所有组。如果找到的组索引与要导出的组匹配,则组的顶点权重将附加到列表,否则为零

更新#2

在使用更简单的几何体(平面)和更小的顶点组(一个项目)进行更多测试之后,更容易看到数据是如何创建的。获取顶点如下所示:

let vertices = geometry.getAttribute('position'),
    group = geometry.getAttribute('groupname');

for (let i = 0, n = group.count; i < n; i++) {
    if (group.array[i] > 0) {
        let { x, y, z } = [vertices.getX(i), 
                           vertices.getY(i), 
                           vertices.getZ(i)];
    }
}

比起初看起来容易得多。所以我对此有所了解并建议每个人都在摆弄这样的东西:不要从复杂的模型开始,使用最少量的顶点,甚至不要那些优化也不会打扰!

0 个答案:

没有答案