使用THREE.BufferGeometry创建具有不同端点的THREE.Line

时间:2013-05-31 23:14:52

标签: three.js

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

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

我想知道是不是因为任何给定的行都是从前一行开始的 - 切换开始/结束顺序并没有改变任何东西,如果这是真的,我希望它会破坏。

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

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

1 个答案:

答案 0 :(得分: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;

three.js r.58