Autor Wątek: [c++] Opengl opakowany w obiekty, czy warto?  (Przeczytany 39872 razy)

Offline Q

  • Użytkownik

# Czerwiec 18, 2014, 11:02:44
Walczę teraz z obiektami czyli z mesh. Rozumiem że przyjeta praktyka jest jeden VAO na obiekt.
Chciałbym by VAO było tablicą tak jak VBO.   
Nie rozumiem tylko dlaczego kompilator nie chce puścić mi tego:

GLuint vao[100]; // tablica VAO mieszczaca 100 objektów
glGenVertexArrays(100, &vao);
Jak Wy rozwiązujecie ten problem bo w końcu macie chyba wiecej VAO niż jeden w programie?

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline DezerteR

  • Użytkownik

  • +1
# Czerwiec 18, 2014, 11:15:50
glGenVertexArrays(100, vao);

Offline Rokuzo

  • Użytkownik
    • Masz na sprzedaż klucze do cs go?

  • +4
# Czerwiec 18, 2014, 14:08:16
Nie chce Tobie tego puścić, bo nie znasz podstaw języka C i zapewne C++.
Dziwi mnie, że się wypowiadasz jeszcze do tego na temat obiektów itd.
Już więcej do tego tematu wole nie zaglądać, bo mnie chyba krew zaleje :D
« Ostatnia zmiana: Czerwiec 18, 2014, 14:10:47 wysłana przez Rokuzo »

Offline ArekBal

  • Użytkownik

# Czerwiec 18, 2014, 16:23:01
Cytuj
Rozumiem że przyjeta praktyka jest jeden VAO na obiekt
Ja mam dzielone(shared) vao - w innej nomenklaturze zwane vertex deklaracjami.
« Ostatnia zmiana: Czerwiec 29, 2014, 13:45:59 wysłana przez ArekBal »

Offline Q

  • Użytkownik

# Czerwiec 19, 2014, 08:22:48
glGenVertexArrays(100, vao);Myślałem że ta funkcja przyjmuje jako 2 argument tylko referencje.
Po zmianie faktycznie wszystko działa, dziękuje.
Tak sobie myślę czy 18000 VAO to nie przegięcie?
Bo z moich wyliczeń to tyle bym potrzebował. webgl ciął się przy około 1600 VAO.
Cytuj
Nie chce Tobie tego puścić, bo nie znasz podstaw języka C i zapewne C++.
Dziwi mnie, że się wypowiadasz jeszcze do tego na temat obiektów itd.
No tak, zapomniałem że Ty urodziłeś się z całą wiedzą i nie musiałeś się niczego uczyć.

Offline DezerteR

  • Użytkownik

# Czerwiec 19, 2014, 09:08:58
Przyjmuje wskaźnik nie referencję.
18k buforów? Tak to przesada, co ty chcesz w nich trzymać?

Offline Q

  • Użytkownik

# Czerwiec 19, 2014, 09:46:39
Cytuj
co ty chcesz w nich trzymać?
Wyliczyłem że będe potrzebował mniej więcej tyle obiektów.
Przy ilu zauważę spadek wydajności? Webgl dostawał zadyszki przy ~1500 ale kompilowany powinien być przynajmniej 2-4 razy szybszy. czyli około 6k ale to tylko moje domysły.

Offline DezerteR

  • Użytkownik

# Czerwiec 19, 2014, 10:08:07
o_O? A wiesz ze możesz wyrenderować jeden obiekt kilka razy?

Offline Q

  • Użytkownik

# Czerwiec 19, 2014, 10:20:26
glDrawArraysInstanced(GL_TRIANGLE_STRIP, 0, 4, 3);Wiem.
Ale potrzebuje umieścić te obiekty w odpowiednich miejscach, musiałbym wysłać w uniformie dane o lokalizacji.
A z tego co czytałem tablice wysłane jako uniformy mają ograniczenie do 256. a nawet jeśli nie to wysłanie np 250k (bo tyle bym musiał wysłać jakbym na tym oparł swój silnik) danych o lokalizacji na jeden VAO jest chyba dość ekstremalnym posunięciem.

Offline DezerteR

  • Użytkownik

# Czerwiec 19, 2014, 10:55:20
Możesz wrzucić do VBO pozycje i ustawić divisor na 1, wtedy będziesz mieć pozycję per instancja.
Ale co Ty chcesz w ogóle osiągnąć? Bo to mnie najbardziej ciekawi.
 

Offline Q

  • Użytkownik

# Czerwiec 19, 2014, 12:23:23
Cytuj
Możesz wrzucić do VBO pozycje i ustawić divisor na 1, wtedy będziesz mieć pozycję per instancja.
Chodzi Ci o to: http://ogldev.atspace.co.uk/www/tutorial33/tutorial33.html ?
Cytuj
Ale co Ty chcesz w ogóle osiągnąć? Bo to mnie najbardziej ciekawi.
:D
Chce móc wyświetlać jak najwięcej powtarzających się obiektów.
 Wcześniej nie wiedziałem że istnieje możliwość przeskakiwania po buforze per instancja.
Wyczytałem że za pomocą glDrawArraysInstanced można wyświetlić nawet 4 mln. obiektów. 
To w zasadzie rozwiązywało by mój problem, tylko teraz muszę wymyślić jak to ubrać w obiektowy kod.
tak by łatwo było z całego tego dobrodziejstwa korzystać.

Offline flexi

  • Użytkownik

# Czerwiec 19, 2014, 15:05:09
Chodzi Ci o to: http://ogldev.atspace.co.uk/www/tutorial33/tutorial33.html ?:D
Chce móc wyświetlać jak najwięcej powtarzających się obiektów.
 Wcześniej nie wiedziałem że istnieje możliwość przeskakiwania po buforze per instancja.
Wyczytałem że za pomocą glDrawArraysInstanced można wyświetlić nawet 4 mln. obiektów. 
To w zasadzie rozwiązywało by mój problem, tylko teraz muszę wymyślić jak to ubrać w obiektowy kod.
tak by łatwo było z całego tego dobrodziejstwa korzystać.

Najpierw zrozum o co chodzi z obiektowoscia :)

Offline DezerteR

  • Użytkownik

# Czerwiec 19, 2014, 17:07:48
Ale paskudny layout.

Na poważnie, to jak wyobrażasz sobie tą obiektowość i jej użycie? Jak ma Ci ułatwić pracę?
Bo jak dla mnie to ty się do tego zabierasz od d... strony. Obiektowość powinna być tak jakby "naturalna", jeśli musisz na siłę upychać to w obiekty to nie tak.

A poza tym to działa ci coś? Najpierw wyświetl te 4kk obiektów jak bóg przykazał, a dopiero potem zacznij kombinowanie.

Offline lethern

  • Użytkownik

  • +1
# Czerwiec 19, 2014, 22:19:35
to jest "thinking in java"
it can't be helped

Offline ArekBal

  • Użytkownik

# Czerwiec 22, 2014, 18:15:44
30 100 vao to juz przegięcie, a ty piszesz o 18 k... widocznie ich nie rozumiesz... poczytaj o nich jeszcze raz.
« Ostatnia zmiana: Czerwiec 29, 2014, 13:46:17 wysłana przez ArekBal »