2016-01-28 36 views
9

Jak zrozumiałem using buffer geometries zwiększy wydajność i zmniejszy zużycie pamięci, ponieważ obniża koszt przekazania wszystkich tych danych do GPU.Three.js - Pytania dotyczące (używania) THREE.BufferGeometry

I jak rozumieć from @WestLangley his post tutaj:

THREE.BufferGeometry powoli zastępując THREE.Geometry jak to jest obliczeniowo bardziej wydajne.

Obecnie używam Three.js - R72.
Kiedy narysuję geometrię, tworząc siatki i dodając je do sceny, widzę, że w moich geometrach znajdują się dwie właściwości: __directGeometry i _bufferGeometry.

Tutaj w THREE.BoxGeometry:

enter image description here

tu w THREE.Geometry:

enter image description here

tu w THREE.ShapeGeometry:

enter image description here

Moje pytania:

  1. Co jest THREE.DirectGeometry i co to robi? (Nie mogę znaleźć żadnej dokumentacji na ten temat)
  2. Czy to THREE.BufferGeometry przechowywane w _bufferGeometry jest już automatycznie używane? Jeśli nie, czy mogę po prostu użyć go zamiast mojej geometrii, aby zwiększyć wydajność?
  3. Istnieją metody konwersji: THREE.BufferGeometry ma toGeometry i THREE.Geometry ma toBufferGeometry. Jeśli skonwertuję wszystkie moje normalne geometrie do geometrii buforów za pomocą tej metody, czy da mi to taki sam wzrost wydajności w porównaniu do rysowania ich od początku jako THREE.BufferGeometry?
  4. Jak i kiedy należy użyć THREE.BufferGeometry?
  5. Kiedy program three.js przestanie obsługiwać THREE.Geometry na rzecz THREE.BufferGeometry?

UWAGA: nie mogłem znaleźć szczegółowe informacje o tym, kiedy i jak używać geometrii buforowe lub gdy będzie zastąpienie THREE.Geometry. Ale jeśli ktoś ma dobre źródło lub referencję, zostaw komentarz.

Odpowiedz

7
  1. __directGeometry jest wewnętrzna struktura danych używana do przechodzenia pomiędzy THREE.Geometry i THREE.BufferGeometry. Nie zadzieraj z tym.
  2. THREE.BufferGeometry.toGeometry() i THREE.Geometry.toBufferGeometry() to wygodne metody.Pierwsza z nich jest pomocna, jeśli model ładuje się jako BufferGeometry i czujesz się bardziej komfortowo manipulując Geometry. Jeśli chcesz uzyskać odpowiedzi dotyczące wydajności, musisz wykonać test. Geometria bufora zdecydowanie szybciej się ładuje.
  3. Istnieje wiele przykładów pokazujących użycie BufferGeometry. Byłoby rozsądnie, gdybyś zrozumiał różnicę między "indeksowanymi" i "nieindeksowanymi" BufferGeometry. BufferGeometry z określonym atrybutem index pozwala na współdzielenie wierzchołków. Nieindeksowane BufferGeometry to tak zwana "zupa trójkątna".
  4. THREE.Geometry pozostanie w najbliższej przyszłości.

Three.js r.73

+0

dziękuję za odpowiedź. Czy mógłbyś jeszcze trochę rozwinąć w tej części: * Jeśli skonwertuję wszystkie moje normalne geometrie do geometrii buforów za pomocą tej metody, czy da mi ten sam wzrost wydajności w porównaniu do rysowania ich jako TRZECH.BufferGeometry od początku? * Ponieważ wciąż jestem nie jestem pewien, czy powinienem przerysować moje geometrie jako geometrie buforów, aby uzyskać maksymalną wydajność ... – Wilt

+0

Jeszcze jedna ... Czy istnieje różnica w wydajności między indeksowanymi i niezindeksowanymi geometriami bufora? – Wilt

+2

(1) Tak jak powiedziałem w punkcie 3. powyżej, jeśli chcesz uzyskać odpowiedzi dotyczące wydajności, musisz wykonać test swojej konkretnej aplikacji. (2) Program renderujący konwertuje normalne geometrie do geometrii bufora, więc nie powinno być żadnego powodu, aby wykonać konwersję ręcznie. Może to jednak być dobre doświadczenie edukacyjne. (3) Indeksowane i nieindeksowane "BufferGeometry" mogą, ale nie muszą, mieć znaczące różnice wydajności. To zależy od geometrii. – WestLangley

Powiązane problemy