2013-05-31 74 views
2

我使用THREE.BufferGeometry創建了幾個THREE.Lines。最初,我的應用程序將它們全部從起點開始,事情按預期工作。現在,我希望能夠隨時啓動(並結束)它們。使用THREE.BufferGeometry創建具有不同端點的THREE.Line

這個小提琴(http://jsfiddle.net/9nVqU/)說明(我希望)如何改變線的一端遠離原點導致意想不到的結果。

我想知道是否因爲任何給定的行都跟上一行 - 切換開始/結束順序並沒有改變任何東西,但如果這是真的,我希望它會中斷。

也許我的數組設置不正確或者告訴THREE.js如何解釋它的屬性 - 我認爲每行需要2 * 3個vert,但是我對buffer_geometry.attributes = {所做的更改似乎讓事情變得更糟。

FWIW,我試圖實現的實際效果是根據用戶輸入有選擇地打開和關閉線路。我可以通過改變結束位置來做到這一點,但之後我失去了這個價值,我不想將它存儲在其他地方。我認爲我可以將起點移動到終點以將其關閉,然後再次將起點移動到原點以重新啓用它。如果有一種方法可以使用BufferGeometry單獨啓用/禁用線條,那顯然會更好。

回答

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

+0

好的,謝謝。 - 工作。這將在更高版本中得到支持,或者我將不得不在每次發佈後重新應用此更改? – speedwell

+0

在r.59dev中修正。 – WestLangley

相關問題