具有超过40k顶点的缓冲测量

时间:2017-11-01 16:11:08

标签: three.js

我在AAAAAAAAAAAAAGAAAAGGGAATTTAAGGAGTCCCAGAGACAGGAGAATTCAGGACAATTTGCACCAATCACTTGCTCCTGGAAAGGAAGGTTGGGC{/T}GATTTGGGGTTGGTAAGCACAGACCTTTCATCCGTTCGTA{/G}AAAGAAGGAAAATTAAATCTCATGGCCTGTTTGTGAAAGGAAATTGCCCAGAATAGCTCTGACAGAATAAGCTATTCCACAATAGCTCCCCATGCGGACACTCCAGCCACTTTGTTCCAGGCTAATTAGTGTGCTTCCAAGCGCAGTAATTATCCTGG 中加载的时间超过40k vertices

虽然有效,但几何图形并未完全呈现。将几何体分解为BufferGeometry的单独块后,它就可以工作了。我正在使用40k vertices

这是与我正在使用的硬件有关还是与三个version r86有关?

请在下面找到我用于创建js的代码的改编(normalgeom是作为参数传递的几何)

BufferGeometry

之后,我正在从缓冲区

创建LineSegments
var positions = new Float32Array(chunkLength * 3);
var indices = new Uint16Array(chunkLength);
var chunkLength = normalgeom.vertices.length;
for (var i = 0; i < chunkLength; i++)
{
    var posInNormalGeom = i;
    positions[i * 3] = normalgeom.vertices[posInNormalGeom].x;
    positions[i * 3 + 1] = normalgeom.vertices[posInNormalGeom].y;
    positions[i * 3 + 2] = normalgeom.vertices[posInNormalGeom].z;
    indices[i] = i;
}

var buffGeom = new THREE.BufferGeometry();
buffGeom.addAttribute('position', new THREE.BufferAttribute(positions, 3));
buffGeom.setIndex(new THREE.BufferAttribute(new Uint16Array(indices), 1));

更新:在@ TheJim01发表评论后,分割几何的代码如下

var lineSegs = new THREE.LineSegments(buffGeom, material);
scene.add(lineSegs);

1 个答案:

答案 0 :(得分:1)

你有847666个顶点,这导致了847666个索引,这远远超出了Uint16Array(max = 65535)的范围。

要缓解此问题,请改用Uint32Array。所有现代浏览器(任何结果)都支持WebGL缓冲区的32位数组。