setDrawRange 的作用是什么?在 Three.js 中

Soo*_*onk 0 javascript data-visualization three.js

我一直在研究一个 Three.js 代码。

在阅读代码和文档时,我无法理解一件事。

在这段代码中。 http://jsfiddle.net/w67tzfhx/

有一个代码如下。

function init(){

    var geometry = new THREE.BufferGeometry();
    var positions = new Float32Array(MAX_POINTS*3);
        geometry.addAttribute('position',new THREE.BufferAttribute(positions,3))

        drawCount =2;
        geometry.setDrawRange(0,drawCount );

        mat =  new THREE.LineBasicMaterial( { color: 0xff0000, linewidth: 2 } );

        line= new THREE.Line(geometry, mat)

        scene.add(line)

        updatePositions();

}
Run Code Online (Sandbox Code Playgroud)

什么是setDrawRange?drawCount 在那里做什么?

官方文件说

.setDrawRange ( start : Integer, count : Integer ) : null 设置 .drawRange 属性。对于非索引 BufferGeometry,count 是要渲染的顶点数。对于索引 BufferGeometry,count 是要渲染的索引数。

我根本不明白。

谁能帮我解释一下它是什么?先感谢您。

gma*_*man 6

您的几何图形有许多顶点。例如,一个立方体至少有 36 个(6 个边各有 6 个,因为每边需要 2 个三角形才能形成矩形,每个三角形需要 3 个顶点)。默认情况下,三个将绘制所有 36 个。要仅绘制前 6 个,您可以调用setDrawRange(0, 6)。要抽到最后 6 个,你需要调用setDrawRange(30, 6). 要抽出全部 36 个,您需要调用setDrawRange(0, 36)

顶点可以是索引的,也可以是非索引的。如果它们被索引,则仅意味着数据中存在一定程度的间接性。它不是setDrawRange(0, 6)引用前 6 个顶点,而是引用前 6 个索引,而前 6 个索引又引用 6 个顶点(如果索引重复,则某些顶点可能会重复)。

它并不常见setDrawRange,但有一个用例,比如你想画一堆线。您无需创建大量单独的线对象,只需创建一个具有可容纳一堆线的空间的几何体(例如 1000 条线,即 2000 个顶点)。然后,您可以根据需要向几何图形添加线条,并通过调用setDrawRange(0, numLines * 2) (每条线 2 个顶点)告诉三个仅绘制前 N 条线

您可以在这里这里了解有关几何的更多信息