.[ ČeskéHry.cz ].
glSDL a antialiasing
Jdi na stránku 1, 2  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
yaqwsx



Založen: 25. 02. 2008
Příspěvky: 66

PříspěvekZaslal: 4. září 2010, 13:13:20    Předmět: glSDL a antialiasing Odpovědět s citátem

Ve svém programu potřebuju otáčet SDL_Surface. Původně jsem začal s předrotováváním surface pomocí SDL_gfx a ukládáním do vectoru. Program se postupně rozrůstal a nyní je již metoda předrotovávání paměťově neúnosná. Proto jsme sáhl po knihovně glSDl, která nahrazuje volání SDL voláními openGL. Díky tomu mám možnost rotovat real-time.
Při rotování měly sprity zbaté okraje - nebyl zapnutý anti-aliasing. Tak jsem jej zapl pomocí:
kód:
glEnable(GL_POLYGON_SMOOTH);
   glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST);

Nyní již rotované sprity vypadají přesně dle mych představ, jen se objevily "švy"(úhlopříčka v obdélníku) mezi jednotlivými polygony a okraje - viz screenshot.


Nevíte, jak tento jev odstranit?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Ladis



Založen: 18. 09. 2007
Příspěvky: 1537
Bydliště: u Prahy

PříspěvekZaslal: 4. září 2010, 14:22:28    Předmět: Odpovědět s citátem

Hned 2. a 3. odkaz v Googlu po zadání GL_POLYGON_SMOOTH mi řekly, kde je problém. Tato funkce totiž vyhlazuje proti dosavadnímu obsahu v bufferu, takže je problém, když je objekt v jiném objektu. Oficiálním řešením je použít antialiasing - máš k dispozici 11 let staré rozšíření GL_ARB_multisample. Nebo bys musel polygony řadit ručně od nejvzdálenějšího.
_________________
Award-winning game developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
yaqwsx



Založen: 25. 02. 2008
Příspěvky: 66

PříspěvekZaslal: 4. září 2010, 20:56:15    Předmět: Odpovědět s citátem

Díky; jako naschvál na toto jsme přišel 5 minut po odeslání postu. Bohužel se mi nedaří zakombinovat podporu pro multisampling do glSDL. Tutorial na NeHe jsem prokousal, ale nedaří se mi jej použít - konkrétně mám problém se získáním handle okna v glSDL, znovuvytvořením nového okna s podporou multisamplingu a jeho navrácením glSDL. Celé odpoledne si s tím lámu hlavu a nic ? celé OpenGL je pro mě úplně nové.

Předem děkuji za radu.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



Založen: 28. 07. 2007
Příspěvky: 1050

PříspěvekZaslal: 4. září 2010, 22:20:44    Předmět: Odpovědět s citátem

kedze je to SDL tak by malo stacit pred volanim SDL_SetVideoMode() zavolat
kód:

SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);//zapne AA
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 4);//chceme 4xAA

_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
yaqwsx



Založen: 25. 02. 2008
Příspěvky: 66

PříspěvekZaslal: 5. září 2010, 11:09:17    Předmět: Odpovědět s citátem

Právěže nastavování parametrů přes SDL_GL_SetAttribute nefunguje. Proto jsme s emrkl na NeHe a pokusil a zaimplementování tutoriálu do inicializace okna. Jenže ze zdrojového kódu glSDL nejsem moc moudrý...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Ladis



Založen: 18. 09. 2007
Příspěvky: 1537
Bydliště: u Prahy

PříspěvekZaslal: 5. září 2010, 18:12:39    Předmět: Odpovědět s citátem

Jestli nefunguje, tak máš aktuální verzi SDL.dll? A pokud ano, zkusil jsi to v nějaké OpenGL aplikaci? Jestli je to až probém glSDL.
_________________
Award-winning game developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Crypton



Založen: 14. 05. 2009
Příspěvky: 306
Bydliště: The Void

PříspěvekZaslal: 5. září 2010, 18:33:36    Předmět: Odpovědět s citátem

Nevím jak ty, ale mě multisampling ve SDL funguje... možná blbá otázka, ale nezapomněl jsi ho jen zapnout? Laughing

glEnable(GL_MULTISAMPLE_ARB)

PS: jinak by to chtělo větší screenshot, ať si na to nemusím brát mikroskop Razz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
yaqwsx



Založen: 25. 02. 2008
Příspěvky: 66

PříspěvekZaslal: 5. září 2010, 21:17:42    Předmět: Odpovědět s citátem

To Nouma: To Ladis: Ano, v "normálním" SDL multisampling funguje. Problém je až při použití glSDL, které nahrazuje funkci SDL_SetVideoMode vlastní, která vytváří okno jinak.
Kdyžtak přiádám kód, kde se snažím nastavit multisamplig přes SDL:
kód:
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 4); 
okno = SDL_SetVideoMode(800, 600, 24, flag | SDL_OPENGLBLIT);
glEnable(GL_MULTISAMPLE_ARB);


K screenshotu - vybral jsem úmyslně malý výřez - momentálně toho nevykresluji mnoho a chyby se projevovaly hlavně v tom výřezu, tak ať zbyte scény neruší.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Crypton



Založen: 14. 05. 2009
Příspěvky: 306
Bydliště: The Void

PříspěvekZaslal: 5. září 2010, 21:34:14    Předmět: Odpovědět s citátem

Kouknul jsem se na zdrojáky, a glSDL_SetVideoMode volá SDL_SetVideoMode, jen používá vlastní bitovou vlajku pro detekci použití své verze SetVideoMode...

Já sice SDL či glSDL nepoužívám, ale vytvoření okna s multisamplem by ve tvém případě mělo vypadat asi nějak takhle:

kód:
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);

SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24); // třeba chleba
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);

SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 4);

glSDL_SetVideoMode(800, 600, 32, flags | SDL_GLSDL) ;

A pak nezapomenout zapnout:
glEnable(GL_MULTISAMPLE_ARB);


PS: Jak jsi zjistil že ten multisampling opravdu "nefunguje"?Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Ladis



Založen: 18. 09. 2007
Příspěvky: 1537
Bydliště: u Prahy

PříspěvekZaslal: 5. září 2010, 23:38:06    Předmět: Odpovědět s citátem

Pokud je glSDL opensource, tak si ho uprav pro sve potreby, jestli soucasna verze nepodporuje multisampling Wink.
_________________
Award-winning game developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Vilem Otte



Založen: 18. 09. 2007
Příspěvky: 462
Bydliště: Znojmo - Sedlesovice, Kravi Hora

PříspěvekZaslal: 6. září 2010, 10:40:08    Předmět: Odpovědět s citátem

Já bych ti doporučil multisample framebuffers - vyhneš se tím nepříjemnostem s SDL, což je také dobré řešení - jen jsi omezený obvykle na 4x antialiasing.
_________________
Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky
Ladis



Založen: 18. 09. 2007
Příspěvky: 1537
Bydliště: u Prahy

PříspěvekZaslal: 6. září 2010, 12:21:51    Předmět: Odpovědět s citátem

No podle mě je lepší upravit jeden-dva řádky v glSDL než používat něco, co nefunguje všude a má znatelný výkonostní propad (a ve výsledku by znamenalo více řádků kódu).
_________________
Award-winning game developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Vilem Otte



Založen: 18. 09. 2007
Příspěvky: 462
Bydliště: Znojmo - Sedlesovice, Kravi Hora

PříspěvekZaslal: 6. září 2010, 22:42:39    Předmět: Odpovědět s citátem

Něco co nefunguje všude - OpenGL 3 už je stabilní standard, kde na všech kartách které jej podporujou by mělo být rozšíření k dispozici ... pravda někdo může namítat, že GL 3 kartu nemá ... ale dnes ji seženete pod 2 tis. Kč - takže námitka je to celkem hloupá (2 měsíce bez piva a hned je máš, případně nějaká malá prácička pro souseda).

To zpomalení je také zavádějící, 0.9ms není tolik (ano je to zpomalení, ale není až takové ... u GL_ARB_multisample jej budeš mít taky a pokud se chystáš na deferred renderer, tak stejně budeš potřebovat multisample fbo).
_________________
Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky
nou



Založen: 28. 07. 2007
Příspěvky: 1050

PříspěvekZaslal: 7. září 2010, 05:36:06    Předmět: Odpovědět s citátem

to je pravda dnes je uz GL3==DX10 karta dost rozsirena. a stale je vyhoda OpenGL ze to nemusi pouzit hra a teda pojde stale aj bez toho.
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Crypton



Založen: 14. 05. 2009
Příspěvky: 306
Bydliště: The Void

PříspěvekZaslal: 7. září 2010, 06:57:00    Předmět: Odpovědět s citátem

Bavíme se tu o multisample fbo a přitom by zřejmě stačilo jen použít GL_NEAREST jako texture filter... dívali jste se na ten screenshot? Autor se sice ještě nevyjádřil jestli se mu podařilo ty artifakty odstranit, ale řekl bych že to je způsobené bilineárním/trilineárním filtrováním. Před rokem jsem řešil stejný problém (http://www.ceske-hry.cz/forum/viewtopic.php?p=18094&highlight=#18094), a to jak u Direct3D tak i pak OpenGL, a vyřešil jsem to tak že jsem prostě použil defaultní filtrování (takže žádný GL_LINEAR).

Offtopic: Já jsem včera zkoušel ten multisample fbo, a rozdíl oproti klasickému fbo byl asi -20 fps (vím že fps není moc věrohodná jednotka při takovém srovnávání, ale...), takže nic dramatického... A to mám historickou ATI X1650 (OpenGL v2.1), která by to ani nemněla podporovat, takže pohoda jazz Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2  Další
Strana 1 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna