HTML

Az élet kódjai

Csináld maga. Senki nem csinálja meg helyetted.

Friss topikok

A textúra glitch nyomában

2023.01.16. 09:15 Travis.CG

Mint már említettem, az Experience-re szánt demó nem egészen úgy nézett ki, ahogy szerettem volna. Ezt egy kicsit kifejtem. A textúrázott elemek nagy része jól mutatott, de a modellek bizonyos részei csíkosak maradtak, mintha a GL_CLAMP lett volna beállítva a textúra paraméternek.

Az egyetlen probléma, hogy én ezt a paramétert nem állítottam be. Vagyis egy újabb bugot kell megtalálnom.

Először arra tippeltem, hogy biztos rossz méretet foglaltam le a memóriában a textúra koordináták tárolására, ezért kimászok a rendelkezésre álló memóriából. Azért gondoltam erre, mert a úgy tűnt a glitch modell azon részén jelenik meg, amelyek az utolsó textúra koordinátákat kapják meg.

Hamar kiderült, hogy erről szó sincs.

Jobb híján betöltöttem csak egy textúrázott kockát, és azt kezdtem szemügyre venni. Elsőre úgy tűnt, csak két háromszöget érint a hiba, de nem tudtam melyik kettőt. Fogtam magam, és az összes háromszögnek ugyan azt a textúra koordinátát adtam. Minden háromszög egyforma lett, kivéve a két hibásat, amelyek továbbra is hibásak maradt.

Blenderben a textúrára számokat rajzoltam, hogy lássam, melyik háromszög melyik textúra részletet kapja. És ekkor jött a meglepetés. Eddig azt hittem, csupán két háromszög kap hibás textúra koordinátákat, de a számok szinte mindenhol rosszul jelentek meg. Ez furcsa volt, mert a demóban van egy rész, ahol egy henger belső palástjára rakok textúrát, és az csak a széleken volt hibás.

Akkor arra tippeltem, hogy az OBJ formátum betöltésénél lesz a probléma. Erre korábban azért nem gyanakodtam, mert már régebben is készítettem demót annak a kódnak a felhasználásával, mégsem volt semmi gond.

A printf függvény, mint debug eszköz segítségével megállapítottam, hogy a formátum betöltésével nem is volt baj, még a memória sem szivárgott.

Az adatok beolvasása tehát jó, de amikor átadom az OpenGL-nek, akkor elkövetek valami hibát, ami miatt ott rosszul jelenik meg. Ezzel sikerült a hibás részt két metódusra szűkíteni. Ezt kezdtem el tüzetesebben végignézni.

Legtöbbször amikor nézek egy kódot, akkor általában azt látom, hogy ennek jónak kell lennie, és nem értem miért nem működik. Most viszont nem tudtam megmondani, miért, de úgy éreztem, hogy a kód rossz. Nem tudtam megmondani, miért rossz, de abban biztos voltam, hogy itt a hiba.

Mivel nem jutottam közelebb a megoldáshoz, lekapcsoltam a gépet, és elképzeltem, hogyan is próbálja az OpenGL beállítani a textúra koordinátákat. Azután fürdés előtt beugrott. Hát persze! Amikor betöltöm a modellt, a vertex koordináták megkapják textúra koordinátákat is. Csakhogy én indexeket használok, hogy ne kelljen többször felhasználni a vertex koordinátát. De egy vertex több textúra koordinátát is kaphat, attól függően, hogy melyik síkidomra illesztem a textúrát.

A hengernél nem is láttam hibát, mert ott egy vertex egyetlen textúra koordinátát kap, kivéve ott, ahol a henger záródik. A kockánál viszont minden csúcspont több síkidomnak is része, tehát felülírtam a textúra koordinátákat.

Átírtam a kódot, hogy minden vertex többször forduljon elő, ha több textúra koordinátát is kap, és voilá! A glitch eltűnt.

Szólj hozzá!

Címkék: programozás demoscene opengl

A bejegyzés trackback címe:

https://cybernetic.blog.hu/api/trackback/id/tr3718023908

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása