2013-05-29 4 views
7

Potrzebuję selektywnie pokazywać/ukrywać ponad 1000 linii o różnych rozmiarach, pozycjach i kolorach.Modyfikowanie wierzchołków w obiekcie THREE.BufferGeometry

Moja pierwsza próba uczyniła THREE.Geometry z nazwą dla każdego. Aby ukryć/pokazać, powtarzam po scenie i ukrywam/pokazuję na podstawie nazwy i mojej heurystyki. Wydawało się to bardzo powolne - około 50 Hz dla ~ 1000 linii.

Wykonałem test z podobnym podejściem, ale używając tylko jednego TRZECIA.Geometry do przechowywania wszystkich linii. To było znacznie szybsze, ale oczywiście mogę zastosować tylko jeden materiał do wszystkich linii, co nie jest dobre. Udało mi się ustawić odpowiednie flagi i zaktualizować pozycje linii podczas działania aplikacji.

Najlepszym podejściem wydaje się użycie TRZECH.BufferGeometry. Zrobiłem test, który był bardzo szybki i działał zgodnie z oczekiwaniami w początkowej konfiguracji, ale nie byłem w stanie zmienić pozycji/widoczności i koloru każdej linii później. Zrobiłem skrzypce JS, które to ilustrują - http://jsfiddle.net/SSnKk/ - ale wywołanie buffer_geometry.dynamic = true; i buffer_geometry.verticesNeedUpdate = true; nie sprawdziło się.

Odpowiedz

11

Trzeba zadzwonić

buffer_geometry.attributes.position.needsUpdate = true; 
buffer_geometry.attributes.color.needsUpdate = true; 

Aktualizacja skrzypce: jsfiddle.net/hjx3rLmt/1

Three.js r.76

+0

To działało idealnie - dziękuję Zachodni Langley. – speedwell

+0

Po tym - chciałbym, aby linie zaczynały się od początku. Kiedy zmieniam lokalizację początkową, nie widzę tego, czego oczekiwałbym. Czy możliwe jest użycie geometrii bufora z zestawem linii na dowolnych pozycjach? Przykład: http://jsfiddle.net/9nVqU/ – speedwell

+0

Proszę napisać nowy post z nowym pytaniem. – WestLangley