[ SashaM @ 02.12.2004. 00:09 ] @
Pozdrav svima

Imam naizgled jednostavan problem: s obzirom da radim 2D igru treba da postavim pozadinsku sliku ali kada je postavim kao texturu (razvucem poligon od jedne do druge ivice ekrana i nalepim texturu na njega) pozadina se znatno zamuti i postane jako losa. Probao sam razne parametre kreiranja tekstura ali nista ne daje zadovoljavajuce rezultate. Postoji li neki drugi nacin isrtavanja slika na ekran sem poligon+tekstura metode?

Sasa
[ Nothingman @ 03.12.2004. 02:35 ] @
Prvo da te pitam da li si zaboravio da postavis ortogonalnu projekciju?
Ali u svakom slucaju odgovor na tvoje pitanje je: da, postoje i drugi nacini da se uradi to sto zelis.
Moras da postavis trenutnu poziciju rastera pomocu glRasterPos*() funkcije. Ta pozicija je u principu mesto gde zelis da crtas (donji levi ugao tvoje slike). Zatim mozes da sliku koju imas u memoriji iscrtas na tu poziciju pomocu funkcije glDrawPixels().
Nemoj da zaboravis da pre svega ovoga podesis ortogonalnu projekciju kako bi koordinate koje zadajes bile u screen space-u.
Za sve detalje pogledaj u OpenGL redbook, jer ih se ja bas i ne secam zato sto to do sada nisam koristio.
Nisam 100% siguran ali ja mislim da ce rezultat koji ces dobiti koristeci glDrawPixels() biti isti kao kad koristis teksturu jer bi i tekstura morala da ti da savrsenu sliku s obzirom da je poligon na koji si je zalepio paralelan viewplane-u a projekcija ortogonalna. Sve mi se cini da si ti verovatno zaboravio da podesis pravu projekciju.

p.s. Filtering nemoj da koristis jer ti on sigurno nece pomoci da 2D slika postane cistija ;)
[ SashaM @ 06.12.2004. 00:09 ] @
Nasao sam drugi nacin pa sam potpuno zaboravio na ovaj post...
Uspeo sam da iskombinujem DirectDraw sa Direct3D-om tako da mi draw sluzi za crtanje pozadine a D3D sa efekte.

Ipak hvala na odgovoru

P.S. nisam bio zaboravio da podesim ortogonalnu projekciju
[ Nothingman @ 06.12.2004. 16:44 ] @
Citat:
SashaM
P.S. nisam bio zaboravio da podesim ortogonalnu projekciju


Sada mene interesuje u cemu je problem :)
Jedino sto mi sad jos pada na pamet je da te pitam da li su ti
width i height velicine u teksturi stepeni dvojke?
Koliko se secam OpenGL zahteva da taj uslov bude zadovoljen.
Ajde ako procitas ovaj post i ako te ne mrzi iseci u nekom programu sliku koju koristis kao teksturu da bude recimo 512*512 i onda probaj da je nalepis na poligon velicine 512*512 u ortogonalnoj projekciji bez filtriranja. Ili mi posalji sliku i program pa cu ja da proverim.
[ SashaM @ 06.12.2004. 22:38 ] @
Koristio sam 800x600 sliku koju sam preko gluBuild2DMipmaps funkcije preveo u teksturu, medjutim s obrzirom da OpenGL zahteva da teksture budu u stepenu dvojke ta f-ja ju je sama pretvorila u potrebne dimenzije i najverovatnije je tu nastao problem zamucivanja slike. Da sam koristio 512x512 mozda ne bi bilo problema ali mi je bilo suvise komplikovano da sliku "seckam" na kompatibilne delove i lepim na poligon...
[ CimBac @ 07.12.2004. 00:29 ] @
koliko se ja razumem gluBuild2DMipmaps moze da radi sa proizvoljnim dimenzijama teksture, pitanje je samo na koji poligon to lepis,tj odnos stranica poligona i teksture mora biti jednak.Toliko od mene.
[ SashaM @ 08.12.2004. 00:13 ] @
Citat:
CimBac: koliko se ja razumem gluBuild2DMipmaps moze da radi sa proizvoljnim dimenzijama teksture, pitanje je samo na koji poligon to lepis,tj odnos stranica poligona i teksture mora biti jednak.Toliko od mene.


Koliko se meni cini gluBuild2DMipmaps f-ja prihvata proizvoljne teksture ali im menja velicinu na stepen dvojke jel OGL radi samo sa takvim teksturama (isto kao i DirectX) pa tu dolazi do opadanja kvaliteta. Postavio sam odnos poligona i teksture 1:1 ali je ova i dalje bila zamucena.
[ Srki_82 @ 08.12.2004. 07:37 ] @
Resenja se uvek lakse nace kada se uradi review koda. Zasto ne napravis programcic sa minimum koda u kojem se vidi taj problem i postujes ga ovde?
[ SashaM @ 08.12.2004. 09:46 ] @
U principu me resenje vise ne zanima jel sam nasao drugo. A svako moze da uradi isto pa neka proba: napravi sliku velicine 800x600x24bpp, podesi ordogonalnu projekciju, ucitaj sliku kao teksturu i prikazi je na ekran (u 800x600 rezoluciji, fullscreen). Ako iko dodje do zadovoljavajucih rezultata (bez pada kvaliteta slike) neka ostavi odgovor.
[ yooyo @ 13.12.2004. 13:56 ] @
gluBuild2Dmipmaps ce konvertovati texturu u 2^n oblik. Cuo sam da gluBuild2dmipmaps ima gresku kada se primenjuje na ovaj nacin pa je moguce da si nabasao na nju.

U OpenGL-u je moguce koristiti i rect texture. Procitaj specifikaciju GL_NV_texture_rectangle ili GL_EXT_texture_rectangle.

btw.. izbegavaj glDrawPixels. Prilicno je glupo da u svakom frejmu saljes kompletnu pozadinu iz sistemske memorije u video memoriju kroz jadni AGP bus. Bolje je da pozadinu jedanput ubacis u video memoriju kao texturu. Ja sam za TV broadcast player na TV Metropolis-u uploadovao svaki frejm videa kao texturu u OpenGL-u.

yooyo