2

我正在使用 THREE.BufferGeometry 创建几个 THREE.Lines。最初,我的应用程序让它们都从原点开始,并且事情按预期工作。现在,我希望能够在任何时候开始(和结束)它们。

这个小提琴(http://jsfiddle.net/9nVqU/)说明(我希望)将线的一端从原点改变会导致意外结果。

我想知道这是否是因为任何给定的行都是从前一行继承下来的——切换开始/结束顺序并没有改变任何东西,所以如果这是真的,我希望它会中断。

也许我的数组设置不正确,或者告诉 THREE.js 如何解释它的属性 - 我认为每行需要 2 * 3 个顶点,但我所做的更改buffer_geometry.attributes = {似乎让事情变得更糟。

FWIW,我想要达到的实际效果是根据用户输入选择性地打开和关闭线路。我已经可以通过改变结束位置来做到这一点,但是我失去了那个价值,我不想把它存储在别处。我认为我可以将起点移动到终点以将其关闭,然后将起点再次移动到原点以重新启用它。如果有办法使用 BufferGeometry 单独启用/禁用线条,那显然会更好。

4

1 回答 1

2

首先,你必须这样做:

var line = new THREE.Line( buffer_geometry, material );
line.type = THREE.LinePieces;

其次,这在 r.58 中不受支持,但应该支持。

作为一种解决方法,您可以WebGLRenderer.renderBufferDirect()像这样破解:

// render lines

setLineWidth( material.linewidth );

var position = geometryAttributes[ "position" ];

primitives = ( object.type === THREE.LineStrip ) ? _gl.LINE_STRIP : _gl.LINES;
_gl.drawArrays( primitives, 0, position.numItems / 3 );

_this.info.render.calls ++;
_this.info.render.points += position.numItems;

三.js r.58

于 2013-05-31T23:47:47.100 回答