Czy muszę używać jednego bufora wierzchołków na siatkę lub czy mogę przechowywać wiele oczek w jednym buforze wierzchołków? Jeśli tak, czy powinienem to zrobić i jak to zrobić?Wiele siatek w jednym buforze wierzchołków?
Odpowiedz
Można przechowywać wiele oczek w jednym buforze wierzchołków. Możesz uzyskać pewną wydajność, umieszczając kilka małych oczek w jednym buforze. W przypadku naprawdę dużych oczek należy używać oddzielnych buforów. SetStreamSource
pozwala określić przesunięcie bufora wierzchołków dla bieżącej siatki.
pRawDevice->SetStreamSource(0, m_VertexBuffer->GetBuffer(), m_VertexBuffer->GetOffset(), m_VertexBuffer->GetStride());
Z OpenGL można użyć glVertexPointer()
, aby rozpocząć rysowanie od pewnego przesunięcia wewnątrz VBO. nie jestem pewien co do D3D.
TBH Powodem umieszczenia ich wszystkich w jednym dużym buforze jest zaoszczędzić na połączeniach ciągnienia. Koszt przełączania bufora wierzchołków jest dość minimalny. Jeśli możesz połączyć je wszystkie w jeden bufor wierzchołków i wyrenderować 10 obiektów w 1 losowaniu, to masz dużą wygraną.
Zwykle w celu ich scalenia wystarczy utworzyć 1 duży bufor wierzchołków z wszystkimi danymi werteksów, które już zostały przekształcone w świat, jeden po drugim. Następnie ustawiasz bufor indeksu, który renderuje je jeden po drugim. Następnie masz wszystko, co rysuje się przy minimalnym remisie. Oczywiście, jeśli przeniesiesz jedną rzecz wymagającą aktualizacji części bufora wierzchołków, dlatego jest to idealna sytuacja dla geometrii statycznej.
Jeśli wszystkie obiekty są takie same, użyjesz tylko jednego bufora wierzchołków (z definicją 1 obiektu) i 1 bufora indeksowego tak czy inaczej? Matryce przesuwają lub ożywiają obiekt ...
Jeśli wszystkie obiekty są różne i poruszają się/animują, to po prostu przykleiłbym się do poszczególnych VB. Wątpię, byś zauważył jakąkolwiek różnicę, łącząc je wszystkie razem.
Cóż, moje doświadczenie jest takie, że nie ma tak wielkiej różnicy, o ile twoje bufory nie są naprawdę małe lub naprawdę ogromne. Podejrzewam, że wszelkie nieefektywności w przełączaniu buforów byłyby powiązane ze wzrostem wydajności, dając kierowcy więcej możliwości zarządzania pamięcią z mniejszymi buforami.
- 1. Wiele logicznych buforów w jednym rzeczywistym buforze ramek
- 2. Orientacja czworościanu dla siatek trójkątów
- 3. Przenieś punkt w jednym buforze do tego samego numeru wiersza co punkt w innym buforze
- 4. Tworzenie siatek Three.js w WebWorker
- 5. Rozmiar siatek WPF
- 6. Wiele UICollectionView w jednym kontrolerze
- 7. Wiele SELECT w jednym zapytaniu
- 8. Wiele kolumn w jednym StaggeredGridView?
- 9. Wiele PickerViews w jednym widoku?
- 10. Wiele repozytoriów w jednym katalogu
- 11. OK, aby wielokrotnie wywoływać MPI_Isend na jednym buforze?
- 12. Wiele stylów w jednym widoku w Drupal
- 13. Wiele konstruktorów z jednym parametrem
- 14. Wiele kontrolerów z jednym modelem
- 15. Wiele suwaków z jednym oddzwanianiem
- 16. Wiele UITableViews na jednym UIView
- 17. Obiekty wierzchołków wierzchołków - Zamieszanie dotyczące dokładnie informacji o stanie zapisanych na temat aktualnie powiązanego bufora wierzchołków
- 18. Używanie wielu buforów wierzchołków w DX10/DX11
- 19. Wiele różnych UITableViewCells w jednym Tableview
- 20. Jak uruchomić wiele poleceń w jednym wierszu?
- 21. wykreślając wiele obiektów Xts w jednym oknie
- 22. Wiele listview w jednym układzie android
- 23. Wiele grup przycisków opcji w jednym formularzu
- 24. document.querySelector wiele atrybuty danych w jednym elemencie
- 25. Wiele klas wyrażeń w jednym pliku Java
- 26. D3: Wiele układów sił w jednym SVG?
- 27. Doctrine2 - Wiele wstawek w jednym ujęciu
- 28. Siatka, jak mieć wiele kolumn w jednym
- 29. Wiele klas w jednym pliku .cpp
- 30. TinyIoC: Zarejestruj wiele interfejsów w jednym wystąpieniu.