【发布时间】:2015-08-31 16:52:13
【问题描述】:
我正在尝试将大量索引几何(如 SphereGeometry)合并到单个缓冲区几何中。
索引几何是我的“预制件”。
首先,我将预制件的索引“展平”成这样的数组:
var prefabFaceCount = prefabGeometry.faces.length;
for (var i = 0; i < prefabFaceCount; i++) {
var face = prefabGeometry.faces[i];
prefabIndices.push(face.a, face.b, face.c);
}
然后,我为每个预制件重复具有偏移量的索引,如下所示:
var prefabIndexCount = prefabGeometry.faces.length * 3;
var prefabVertexCount = prefabGeometry.vertices.length;
for (var i = 0; i < prefabCount; i++) {
for (var k = 0; k < prefabIndexCount; k++) {
bufferIndices[i * prefabIndexCount + k] = prefabIndices[k] + i * prefabVertexCount;
}
}
当我的面数少于 65535 (prefabFaceCount * prefabCount) 时,这可以正常工作,但是当我超过这个数字时,我的索引会变得混乱,从而导致不正确的三角形。
当我缓冲更复杂的几何体(如 SphereGeometries)时,这一点更加明显(球体不应连接):
我的猜测是,当通过调用 BufferGeometry.computeOffsets() 将缓冲区几何体分块为偏移量时,就会出现问题。我尝试了块大小和索引排序的不同组合,但我还没有找到解决方案。
我必须:
a) 在缓冲索引时考虑块大小
b) 根据我的“预制件”中的面数计算块大小
c) 做 a 和 b 的组合
d) 完全做其他事情
任何指针将不胜感激。
【问题讨论】: