我想出瞭如何在三個j中繪製一條線,問題是我需要動態地將頂點添加到該線。當我動態添加頂點到線時,場景不會更新。我試過geometry.verticesNeedUpdate = true
,這似乎不起作用。在Three.js中動態添加頂點到一條線
回答
編輯:使用BufferGeometry
和drawcalls
您現在可以實現等效功能。見Drawing a line with three.js dynamically。
three.js所r.71
動態添加頂點到線不被支持。正如Wiki說:
只能更新緩衝區的內容,你不能調整緩衝區(這是非常昂貴的,基本上等同於創造新的幾何形狀)。
您可以通過預先分配較大的緩衝區來模擬調整大小,然後保留不需要的頂點摺疊/隱藏。
three.js所r.55
我遇到了這個前兩天了。正如WestLangley所說,你不能做出真正的動態幾何體,但改變q有一些'僞造它'的策略,並在https://github.com/mrdoob/three.js/issues/342達到預期的效果。
關於你對最後一個答案的評論,不要只是從場景中刪除並重新添加一行新的每一幀 - 你(很可能)會招致巨大的性能影響。您需要使用更改後的第一個或第二個解決方法策略。
在我的應用我使用選項1是這樣的:
事先創建一個THREE.Geometry對象,並使用盡可能多的頂點初始化它,你認爲你需要(或以其他方式相當高的數量頂點)。 (您還需要以某種方式隱藏它們,然後才能顯示它們 - 我將它們的位置設置爲脫離屏幕。)
使用該幾何創建THREE.Line對象並將其添加到場景中。
現在,當你想添加一個新的點到這條線時,你必須將索引到幾何對象的頂點,找到最後一個未使用的頂點,然後更新它 - 將座標更改爲真正的頂點,並設置
geometry.verticesNeedUpdate = true;
(否則它認爲沒有改變)。 (見How to do updates在wiki)
我仍然對我的做法熨燙出來的疑難問題,但至少應該讓你得到一個行畫面繪製。
three.js r55
如何防止屏幕上的點連接到要渲染的「真實」點? – 2014-04-23 23:20:05
Max,現在已經有一段時間了,所以我不記得確切,但我想我將點(或連線)的顏色改爲與場景的背景顏色相同。所以連接仍然存在,但它不可見。 – user1475135 2014-05-24 16:50:03
正如WestLangley的回答所說,你不能那樣做。這是無可否認的解決辦法哈克我已決定使用:
- 分配更多的頂點比我更需要通過我行的起點填充geometry.vertices
- 作爲新的點進來,我想補充,該數組的內容轉移到左側,在geometry.vertices 的最後一個數組項寫入新的點
代碼: 要創建一個新的行:
function createNewLine(startingPoint){
var geometry = new THREE.Geometry();
for (i=0; i<MAX_LINE_POINTS; i++){
geometry.vertices.push(startingPoint.clone());
}
myLine = new THREE.Line(geometry, lineMaterial);
myLine.geometry.dynamic = true;
scene.add(myLine);
render();
}
把點添加到該行:
function addPoint(myPoint) {
myLine.geometry.vertices.push(myLine.geometry.vertices.shift()); //shift the array
myLine.geometry.vertices[maxLinePoints-1] = myPoint; //add the point to the end of the array
myLine.geometry.verticesNeedUpdate = true;
render();
}
你結束了,然後什麼是有一堆對方接着你居然要渲染的點的頂部堆放點的線。 我在three.js git存儲庫上提交了一個問題,以更簡單地解決這個問題。 https://github.com/mrdoob/three.js/issues/4716
- 1. 在Three.js中添加點到頂點
- 2. Three.js在動畫精靈之間添加動態線條
- 3. THREE.js動態添加點到點幾何不會渲染
- 4. 將法線添加到頂點列表
- 5. 如何在條形圖頂部添加一條線?
- 6. 在Three.js中爲線條繪製動畫
- 7. 向高圖添加多條動態線
- 8. 在three.js中擠出一條線
- 9. 如何在OpenGl中動態添加頂點?
- 10. 如何在three.js場景中添加線條?
- 11. 在mxGraph中添加子頂點到父頂點
- 12. 在winform中拖動一條動態線
- 13. 動態更改Three.js中的頂點顏色
- 14. Three.js - 幾何頂點
- 15. 如何使用three.js在webgl場景中添加頂點或點幾何?
- 16. 添加滾動條到動態ul li
- 17. 動態添加圖像到滾動條
- 18. 使用點形狀將頂點添加到折線shapefile
- 19. 在動態LINQ中添加條件
- 20. 在兩個不相關的頂點之間添加一條邊
- 21. 在AWT中添加一個滾動條/滾動條到框架
- 22. 向圖中添加一個頂點
- 23. Three.js - 向AxisHelper添加標籤 - 無法獲取四肢的頂點
- 24. three.js - 使用投影機和光線選擇一個頂點
- 25. 動態添加到哪裏條件 - Laravel
- 26. 將滾動條添加到模態
- 27. 如何在three.js中將點添加到obj文件中?
- 28. 添加一條線到SSRS字段
- 29. 添加一條線到matplotlib子圖
- 30. 動態添加textview到線性佈局
thanks.i想我將只刪除並重新添加一個新行每一幀...只是似乎更低效 – K2xL 2013-02-13 06:34:54
我認爲WestLangley被提出的觀點是,試圖動態做到這一點是basicaly剛剛效率低下首先創建一個全新的幾何圖形,所以它的效率並不低。 – 0xor1 2013-02-13 09:11:02
我加入所有點由這行代碼到幾何: linegeometryX.vertices.push(新THREE.Vertex(新THREE.Vector3(X,Y,Z))); 如何隱藏/摺疊不需要的頂點? – Dipak 2013-12-16 12:38:32