Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Jorns
Založen: 27. 08. 2013 Příspěvky: 14
|
Zaslal: 27. srpen 2013, 22:19:11 Předmět: Tvorba textury stromu v OpenGL |
|
|
Zdravim, hlavne tych skusenejsich. V opengl sa pohybujem uz nejaky ten cas, a narazil som na problem s texturovanim a to konkretne s vytvorenim "stromu". Strom je textura s castou ktorou sa nema zobrazit nacierno. Pokial pouzijem funkciu glBlendFunc(GL_ONE,GL_ONE), tu ciernu cast nezobrazi ale objekt je vykresleny polopriehladne, skoda. Neviete prosim niekto v com je problem ? Alebo upravit alfa kanal v texture (zobrazit 00 (HEX) nezobrazit FF(HEX))??
Apropo pouzivam vlastny parser na loading textur vo formate .dds (a8r8g8b8)
Plus este jedna vec, a to ze mi nechce zobrazit textury vacsie nez 256x256, t.j. pokial pouzijem 512x512 aplikacia padne.
Vdaka za pomoc... |
|
Návrat nahoru |
|
 |
pcmaster

Založen: 28. 07. 2007 Příspěvky: 1827
|
Zaslal: 28. srpen 2013, 10:29:42 Předmět: |
|
|
K tym velkym texturam... nealokujes ich docasne nahodou na stacku? Lebo 512x512x4 je 1 MB a to by uz stack nemusel dat. Ale to je len taky tip.
Neskusis sem dat viac infa? Lebo ak to popises presnejsie, tak si mozno odpovies i sam.
Pri glBlendFunc(GL_ONE, GL_ONE) sa stane to, ze sa nascitaju vsetky zlozky sourcu (aktualneho fragmentu) s tym, co uz v targete (pixeli frame bufferu (render targetu)) bolo. Ak ma prichadzajuci fragment RGBA(0.0, 1.0, 0.0, 1.0) -- plne viditelny zeleny, tak ti "prepise" uplne cokolvek co tam bolo na cistu plnu zelenu a nema sancu byt akokolvek "polopriehladny". Cokolvek, co pride po nom, uz zelenu ani alfu nevyzenie vyssie (ledaze mas float target, co nemas). Ak je prichadzajuci fragment (0,0,0,0), tak sa veselo nascita a vysledok vobec nijako neovplyvni.
Bavime sa samozrejme o pripade, ze fragment prejde cez depth (a stencil) test.
Inak co sa tyka toho alfa kanalu, tak ak je to 0.0, tak ma byt pri tejto (beznej) reprezentacii neviditelny a ak je to 1.0 (0xFF byte alebo 0x3f800000 float32) tak je plne viditelny. _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Naposledy upravil pcmaster dne 28. srpen 2013, 10:37:33, celkově upraveno 1 krát |
|
Návrat nahoru |
|
 |
mar
Založen: 16. 06. 2012 Příspěvky: 610
|
Zaslal: 28. srpen 2013, 10:34:54 Předmět: Re: Tvorba textury stromu v OpenGL |
|
|
Čau, to chceš je určitě alpha a pak buď alphatest nebo alpha blending (GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA).
Co se týká pádu, dost pochybuji, že by to kvůli tomu padalo. I na prastaré Voodoo3, která měla limit 256x256 to nepadalo, ale byl tam fallback do sw režimu (takže to pak běželo zatraceně pomalu). Jinými slovy bych hledal chybu u sebe, to že "něco padá" je dost široký pojem. |
|
Návrat nahoru |
|
 |
Jorns
Založen: 27. 08. 2013 Příspěvky: 14
|
Zaslal: 28. srpen 2013, 16:45:33 Předmět: Re: Tvorba textury stromu v OpenGL |
|
|
mar napsal: |
Čau, to chceš je určitě alpha a pak buď alphatest nebo alpha blending (GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA).
Co se týká pádu, dost pochybuji, že by to kvůli tomu padalo. I na prastaré Voodoo3, která měla limit 256x256 to nepadalo, ale byl tam fallback do sw režimu (takže to pak běželo zatraceně pomalu). Jinými slovy bych hledal chybu u sebe, to že "něco padá" je dost široký pojem. |
Parsing textur je opraveny, chyba bola v mojom parseri, ktory sa spoliehal na velkost suboru ulozenu v headeri obrazku, ale tato hodnota pri 512x512 formate nebola korektna (delena dvoma), takze teraz mi to pocita program osobne, a funguje to perfektne.
A k tej alphe:
Vsak sa pozrite na to a zistite ten problem. Ja som z toho paf.
Este to musim poskusat. Inak mimochodom tie okraje toho "stromu" su cierne... |
|
Návrat nahoru |
|
 |
mar
Založen: 16. 06. 2012 Příspěvky: 610
|
Zaslal: 28. srpen 2013, 16:55:17 Předmět: Re: Tvorba textury stromu v OpenGL |
|
|
Jorns napsal: |
Vsak sa pozrite na to a zistite ten problem. Ja som z toho paf.
Este to musim poskusat. Inak mimochodom tie okraje toho "stromu" su cierne... |
No toto je typicky aditivní blending (proto tam, kde je černá, není žádná změna), jak se snažil popsat pcmaster, ale evidentně jeho zevrubný popis nepadl na úrodnou půdu. Co takhle si to nejdřív přečíst a pak se znovu zeptat?  |
|
Návrat nahoru |
|
 |
mar
Založen: 16. 06. 2012 Příspěvky: 610
|
Zaslal: 28. srpen 2013, 18:58:25 Předmět: Re: Tvorba textury stromu v OpenGL |
|
|
Ok, vyměkl jsem
Nejjednodušší řešení je asi toto:
Načti si texturu (exportuj třeba do png) v nějakém editoru, přidej alfa kanál, označ si černou oblast a u ní nastav alfu na 0.
Exportuj do png s alfou, pak zkonvertuj zpátky do dds.
V enginu místo glBlendFunc(GL_ONE, GL_ONE) použij glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA).
Hotovo. |
|
Návrat nahoru |
|
 |
Jorns
Založen: 27. 08. 2013 Příspěvky: 14
|
Zaslal: 28. srpen 2013, 19:03:07 Předmět: Re: Tvorba textury stromu v OpenGL |
|
|
OK dikes skusim, uz som to KONECNE pochopil
mar napsal: |
V enginu místo glBlendFunc(GL_ONE, GL_ONE) ... |
Od enginu to ma este daleko..., ale co neni moze byt...
Hmm tie HL2 textury to robia velmi realisticke, este musim dat bumpmapping a je to... |
|
Návrat nahoru |
|
 |
perry

Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 28. srpen 2013, 19:17:05 Předmět: |
|
|
OT: Ježiši... až teď mi došlo, že strom je strom jako kytka.. já v tom hledal pořád vizualizaci nějakýho BVSka nebvo QuadTree... hm.. asi už mam dost  _________________ Perry.cz |
|
Návrat nahoru |
|
 |
Dlaha

Založen: 30. 07. 2007 Příspěvky: 598 Bydliště: Olomouc
|
Zaslal: 28. srpen 2013, 20:16:09 Předmět: |
|
|
perry napsal: |
OT: Ježiši... až teď mi došlo, že strom je strom jako kytka.. já v tom hledal pořád vizualizaci nějakýho BVSka nebvo QuadTree... hm.. asi už mam dost  |
To samé u mě. Ale já jsem nikdy 3D engine nepsal, to je deformace tady od vás z fóra  _________________ Other Inside
Greenlitnuto! |
|
Návrat nahoru |
|
 |
Peto

Založen: 01. 08. 2007 Příspěvky: 206 Bydliště: Košice
|
Zaslal: 28. srpen 2013, 22:11:02 Předmět: |
|
|
Jorns> Potom by si sa mal este poobzerat po tom alfa teste (alebo clip() v shadery), blending je pri stromoch naprd, tebe to teraz funguje lebo strom je iba placka, pokial bude zlozeny z viacerych cez seba iducich polygonov, bude ti to robit problemy... _________________ Code or die!
 |
|
Návrat nahoru |
|
 |
Jorns
Založen: 27. 08. 2013 Příspěvky: 14
|
Zaslal: 29. srpen 2013, 00:13:24 Předmět: |
|
|
Peto napsal: |
Jorns> Potom by si sa mal este poobzerat po tom alfa teste (alebo clip() v shadery), blending je pri stromoch naprd, tebe to teraz funguje lebo strom je iba placka, pokial bude zlozeny z viacerych cez seba iducich polygonov, bude ti to robit problemy... |
Problem som vyriesil, doplnenim parseru a tzv. color key a potom pri rendere pouzit alpha test. Pokial ma strom okolitu farbu napr. 192, 68, 90 parser mi to zisti, pomeni vsetky tieto farby - teda alfakanal tychto farieb z FF na 00 a pouzitim alfa testu to funguje ako hodinky a ani netreba photoshop, za predpokladu ze mam hotovu texturu. Takze staci urcita farba ktora je jednotna a je to...
Ale dalsi problem spociva v tom, ze pokial rendrujem strom z troch placiek, teda jedna je 0, dalsia je 45 a dalsia 90 stupnov natocena v ose Y, nejak divne ich zobrazuje, myslim ze ich to prekryva (asi si odpoviem sam ak je problem vyrieseny stencilom, ale to je zlozite a je to len moja domienka). Obrazok poskytnem potom pokial neviete o co ide, ale program pisem zatial na druhom PC, a dokonca je to minibook
Ale kazdopadne vdaka za odbornu pomoc, lebo neviem dokedy by som sa v tom vrtal, avsak zanedlho tu budem zasa otravovat ale s niecim inym, ale dufam ze nie heh. |
|
Návrat nahoru |
|
 |
Peto

Založen: 01. 08. 2007 Příspěvky: 206 Bydliště: Košice
|
Zaslal: 29. srpen 2013, 08:35:49 Předmět: |
|
|
Ak ti robi to prekryvanie to je prave tym chybajucim alfa testom (alebo ze je zle nastaveny). Skus vypnut alfa blending a nechat zapnuty iba alfa testing, aby si videl ci ti ten alfa testing skutocne ide (mal by fungovat aj bez alfa blendingu) _________________ Code or die!
 |
|
Návrat nahoru |
|
 |
Jorns
Založen: 27. 08. 2013 Příspěvky: 14
|
Zaslal: 29. srpen 2013, 16:18:40 Předmět: |
|
|
Peto napsal: |
Ak ti robi to prekryvanie to je prave tym chybajucim alfa testom (alebo ze je zle nastaveny). Skus vypnut alfa blending a nechat zapnuty iba alfa testing, aby si videl ci ti ten alfa testing skutocne ide (mal by fungovat aj bez alfa blendingu) |
Nie nie, alpha test je zapnuty, praveze bez neho by vykreslilo aj to farbne pozadie tej placky, a blending je vypnuty. Ale uvidime... |
|
Návrat nahoru |
|
 |
|