Autor Wątek: Generowanie quada w OpenGL.  (Przeczytany 1283 razy)

Vipa

  • Gość
# Październik 28, 2009, 22:25:16
Moje rysowanie glquad polega na tym co zwykle zwykło się używać:
glPushMatrix();
glTranslate(..);
glRotate(...);
glBegin(GL_QUADS);
{
   texcoords; glVertex.. i tak 4 razy
}
glEnd();
glPopMatrix();

Wszystko jest cool, dopóki nie natrafi się na zmienny rotate. W sumie listy nie są już wspierane i nie ma bata, ale tworzenie np. takich chmur, (nawet przy uwzględnieniu ich widoczności,) spowalnia.
Są jakieś możliwości przyspieszenia? W Tej chwili to wygląda u mnie, iż robię to samo co powyżej w pętli ok. 10000. Innej możliwości przyspieszenia po za ograniczeniem ich ilości nie widzę. Ale moje umiejętności są takie jakie są i takie pozostaną :D.

Nie oczekuję kodu ani linków, ale rzeczowego przedstawienia w chłopskim pojęciu, co można by z tym zrobić. Kod napisze sobie sam, ale być może nie znam zasad. Często trafiam na rozwiązania, które są oczywiste z poziomu OpenGL.

Offline Mr. Spam

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

Offline Dab

  • Redaktor
    • blog

# Październik 28, 2009, 22:27:42
Twój kod spowalniają głównie wbudowane operacje na macierzach. Najszybsze co możesz zrobić to spakować wszystkie informacje o chmurach do bufora wierzchołków, przesłać je jako punkty i wygenerować na ich podstawie quady (2x tri) w geometry shaderze.

Vipa

  • Gość
# Październik 28, 2009, 22:29:01
Właśnie w tym tkwi problem. Shadery u mnie to jak dla innych makra w Excellu :D.
Istnieje coś takiego... Ale co to jest?! :D

Offline Avaj

  • Użytkownik

# Październik 28, 2009, 22:29:23
zależy w jaki sprzęt celujesz, to co Dab ci napisal to uzywa geometry shadera czyli od razu shader model 4.0. Na pewno wzrost wydajności dałoby przejście na VBO (Vertex Buffer Object).

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Październik 28, 2009, 22:31:33
Przede wszystkim to zapomnij o glBegin/glEnd i przerzuć się przynajmniej na Vertex Array. Quady wystarczy, że będziesz obracał na CPU (w końcu to jeden sinus, cosinus i parę mnożeń). :)

Offline Angru

  • Użytkownik

# Październik 28, 2009, 22:31:45
http://www.lighthouse3d.com/opengl/glsl/
Wystarczy, że poświęcisz jeden wieczór na przeczytanie i zakodowanie czegoś dla testu.

@Krzysiek
Chyba chodzi o to, że Vipa chce te quady transformować niezależnie. Jeden sinus, cosinus i parę mnożeń na CPU dla 100 tysiaków quadów można dodać do warsztatowej wiki jako definicję brute force ;).
« Ostatnia zmiana: Październik 28, 2009, 22:35:07 wysłana przez Angru »

Vipa

  • Gość
# Październik 28, 2009, 22:42:15
Nie czytałem jeszcze, aczkolwiek zajrzę na 100%.
Geometry shader to także dla mnie pojęcie zbyt abstrakcyjne jak na dwa tygodnie na grę (nie, nie komercja). Proszę jednakże o informację, czy te rozwiązania mają zastosowanie dla wierzchołków generowanych dynamicznie.

Odnośnie sin i cos, to jestem programistą starej daty, a tworzenie tablicy rozwiązań dla każdej możliwości sin i cos mija się z celem. Kiedyś coś takiego potrafiło przejść na 8bit, ale teraz poziom grafiki zmusza mnie do generowania wielkiej ilości quadów i tylko tyle.

Rozumiem, iż istnieją rozwiązania oparte na inne metody, będące dość luźno powiązane z czystym OpenGL bez rozszerzeń, ale w sumie na tym bazuję.

Offline Dab

  • Redaktor
    • blog

# Październik 28, 2009, 22:49:01
Moje rozwiązanie jak najbardziej bazuje na czystym OpenGL 3.2 bez rozszerzeń. ;) Ale tak czy inaczej, przy dużej ilości billboardów bez co najmniej vertex shadera się nie obędzie.

Vipa

  • Gość
# Październik 28, 2009, 23:00:51
Aha, czyli to czego używam jest pod pojęciem programisty początkującego (a za takiego od parunastu lat się uważam) pozytywne?

Mogę zawsze pogrzebać we wzorach, przynajmniej na tym się znam :D.

PS: moje rozwiązania muszą bazować na hipermarketowym, absolutnym minimum.

Vipa

  • Gość
# Październik 29, 2009, 09:18:10
PS: moje rozwiązania muszą bazować na hipermarketowym, absolutnym minimum.
To pisz tak jak piszesz. Hipermarketowe minimum w najlepszym wypadku wspiera OpenGL 1.1 w hardware (bo wiesz mogą jeszcze tak zrobić że w software będziesz rysował) :D. Raczej o wydajności nie można mówić... na takim sprzęcie. A i nie przejumuj się Dab'em - on siedzi w najogólniej mówiąc czymś czego hipermarketowe minimum nie wspiera. ;)

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Październik 29, 2009, 11:14:59
Cytuj
Hipermarketowe minimum w najlepszym wypadku wspiera OpenGL 1.1 w hardware
Wiesz co? Przestań kupować komputery w Biedronce. ;) Co prawda nie doszukałem się na stronie MediaMarktu (bo tam nie idzie sortować po cenach), ale najtańszy laptop jaki znalazłem na komputronik.pl jako grafikę miał Intel X4500, a na tym bez problemu DirectX 10 chodzi. Wydajność to inna kwestia, ale tu też nie jest najgorzej - w Doom'a 3 pograsz bez problemu, a i mój najnowszy silnik w niskiej rozdzielczości mimo wszystko śmiga całkiem sensownie. :)


Niech mi ktoś znajdzie w jakimś hipermarkecie cokolwiek, co nie wspiera shaderów (nie licząc netbooków, rzecz jasna). :)

Offline Charibo

  • Redaktor

# Październik 29, 2009, 16:54:29
Chyba chodzi o to, że Vipa chce te quady transformować niezależnie. Jeden sinus, cosinus i parę mnożeń na CPU dla 100 tysiaków quadów można dodać do warsztatowej wiki jako definicję brute force ;).
Dla 100k tak. Ale dla 5000 quadów, to po prostu "sensowne, szybkie rozwiązanie", które dodatkowo da się napisać w 20 liniach kodu z komentarzami. :)

Offline Sos

  • Użytkownik

# Październik 29, 2009, 17:56:03

Wszystko jest cool, dopóki nie natrafi się na zmienny rotate.

ponieważ ewidentnie brakuje tu glLoadIdentity

Offline rm-f

  • Użytkownik
    • Tu trolluje

# Październik 29, 2009, 18:07:50
Wiesz co? Przestań kupować komputery w Biedronce. ;) Co prawda nie doszukałem się na stronie MediaMarktu (bo tam nie idzie sortować po cenach), ale najtańszy laptop jaki znalazłem na komputronik.pl jako grafikę miał Intel X4500, a na tym bez problemu DirectX 10 chodzi.
No ja sobie wypraszam w biedronce kupiłem lapka z X3100 (Dx10,GL2.0,SM4.0) i jestem zadowolony.

Vipa

  • Gość
# Październik 29, 2009, 18:23:10
Ogólnie założenie jest takie, że musi to pójść na każdym możliwym, w miarę normalnym piecu. Być może faktycznie przesadzam z tym minimum, ale z reguły jak tylko zacznę szaleć z czymkolwiek to okazuje się, że na jakichś lapkach gra nie idzie za diabła.

Można co prawda badać czy sprzęt obsłuży to i to, a jak nie to forsować software.

Postaram się przygotować dla testu jakąś mała gierkę i poproszę was o sprawdzenie. Być może ja przesadzam i rysowanie 10K quadów zwyczajną, najprostszą metodą będzie bez znaczenia dla szybkości. W końcu znam gry sprzed lat gdzie jeden model składał się z większej ilości poly.
Na poniedziałek postaram się tę gierkę skonstruować.