我使用THREE.BufferGeometry创建了几个THREE.Lines。最初我的应用程序让它们都从起源开始,事情按预期工作。现在,我希望能够在任何时候开始(并结束)它们。
这个小提琴(http://jsfiddle.net/9nVqU/)说明(我希望)如何改变线的一端远离原点会导致意外的结果。
我想知道是不是因为任何给定的行都是从前一行开始的 - 切换开始/结束顺序并没有改变任何东西,如果这是真的,我希望它会破坏。
也许我的数组设置不正确或者告诉THREE.js如何解释它的属性 - 我认为每行需要2 * 3个顶点,但我对buffer_geometry.attributes = {
所做的更改似乎让事情变得更糟
FWIW,我想要实现的实际效果是根据用户输入有选择地打开和关闭线路。我已经可以通过改变结束位置来做到这一点,但后来我失去了这个值,我不想把它存储在其他地方。我以为我可以将起点移动到终点以将其关闭,然后再将起点移动到原点以重新启用它。如果有一种方法可以使用BufferGeometry单独启用/禁用行,那么这显然会更好。
答案 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