Eli yritän tässä tutustua openGL kirjastoon. Olen nyt luonut yksinkertaisen objektin lataus- ja piirtofunktiot jolla saan polygoneja ruudulle tekstitiedostoa muokkaamalla. Seuraavaksi meinasin laittaa tekstuurit mutta en oikein tajua miten nuo UV koordinaatit pitäisi funtsia. Tekstuurit kyllä näkyvät jos saan UV koordinaatit oikein mutta en ole saanut kuin yhden sivun kuutiosta näkyviin oikein. Toisessa näkyy puolet sekaisena kuvamössönä.
Onko tuossa joku helpompikin tapa ratkoa oikeat u ja v arvot kuin kokeilemalla? Kai tässä voisi jokaisen 256 kombinaatiota kokeilla mutta tuntuu aika urakalta 6:lle sivulle(6x256=1536 eri kokeilua pahimmillaan).
Taitaa olla teoria vähän hakusessa? :D UV-koordinaatit (u, v) tarkoittavat koordinaatteja tekstuurissa. Tekstuurin kulmat ovat aina (0, 0), (1, 0), (1, 1) ja (0, 1). Tähän ei liity minkäänlaista arvaamista.
Jos jokaisella kuution kärjellä on vain yhdet UV-koordinaatit, et saa tekstuuria järkevästi kuin neljälle sivulle. Voit todeta tämän askartelemalla paperista kuution ja kuusi sivun kokoista, identtistä kuvaa ja asettamalla kuvat sivuille niin, että kuution kussakin kärjessä on kiinni vain joka kuvan sama kulma. Ei onnistu. Saat kuitenkin teksturoitua näin neliskanttisen, päistään avoimen putken.
Tarvitset siis ylimääräisen kopion vertekseistä, jotta saat osalle sivuista erilliset UV-koordinaatit.
lainaus:
Jos jokaisella kuution kärjellä on vain yhdet UV-koordinaatit,
Siis tällä hetkellä kuutiolla on 6 sivua joista kukin on määritelty neljällä verteksillä joilla kullakin on oma UV koordinaattinsa. Tällä hetkellä kuutio siis koostuu 24:stä verteksistä joilla jokaisella on oma UV koordinaattinsa(joo ei taida olla paras ratkaisu. Meinaan laittaa UV koordinaatit omaan taulukkoonsa polygonikohtaisesti jotta kuutio voi jakaa verteksejä. Kyllä mie senverran älysin ettei samoja UV arvoja voi käyttää jokaisen kulmassa ;-).
Mutta ongelma on keksiä noille 24:lle UV koordinaatille oikeat arvot. Erillaisia vaihtoehtoja kun on aivan sairaasti enkä ole oikein hoksannu millä logiikalla niitä oikein pistetään sinne.
Esimerkin vuoksi kaksi sivua kuutiosta(joku voinee bongata mitä käytin esimerkkinä lataajana):
#first face (tämä siis näkyy oikein. Hurah!)
v -1.00000000 -1.00000000 1.00000000 0.0 1.0
v -1.00000000 1.00000000 1.00000000 0.0 0.0
v 1.00000000 1.00000000 1.00000000 1.0 0.0
v 1.00000000 -1.00000000 1.00000000 1.0 1.0
# second face(rivit järjestyksessä katsojaan nähden, tämän ollessa kuution alaosa, vasen taka, oikea taka, oikea etu ja vasen etu)
v -1.00000000 -1.000000 -1.00000000 0.0 1.0
v 1.00000000 -1.00000000 -1.00000000 1.0 1.0
v 1.00000000 -1.00000000 1.00000000 1.0 0.0
v -1.00000000 -1.00000000 1.00000000 1.0 1.0
p 4 1 4 3 2
p 4 5 6 7 8
Esmes tässä vertexit 1 ja 8 omaavat saman koordinaatin kuten myös 4 ja 7.
Laita niin, että jokaisella sivulla on kaikki neljä koordinaattia järjestyksessä myötä- tai vastapäivään.
(0, 1) (1, 1) (0, 0) (1, 0)
Siinäkään ei ole mitään arpomista, vaan pitää vain ymmärtää, missä kohti kärjet ovat avaruudessa. Jos hahmottaminen tuntuu hankalalta, voit heittää kärjille satunnaiset värit ja katsoa, missä järjestyksessä nuo värit näkyvät mistäkin suunnasta katsottuna.
Edelleenkin suosittelen oikean kuution hankkimista, jotta voit askarrella tekstuurit paperista. Kyllä siinä huomaa, ettei lopputulos ole kovin mielekäs, kun yrittää vetää tekstuuripaperista saman kulman kiinni useampaan kärkeen, kuten tuossa mallissasi nyt on. :)
Edit. Kun kerran kuutiosi koordinaatit ovat ykkösiä, voit käyttää seuraavaa menetelmää: Joka sivulla yksi koordinaateista pysyy vakiona, joten jätetään se huomiotta. Tehdään tekstuurikoordinaatit kahden muun mukaan niin, että -1 => 0 ja 1 => 1. Esimerkki, jossa z on vakio:
x, y, (z,) u, v -1, -1, (1,) 0, 0 1, -1, (1,) 1, 0 1, 1, (1,) 1, 1 -1, 1, (1,) 0, 1
No ny löytyi jonkinsortin arvot. Ongelmana että siitä näkyy vain puolet ellen sitten katsojan etuvasemmalla olevaa kulmaa laske pikkuisen alas. Haittaako nuo ylimmääräiset vertexit vai miksi puolet kuvasta katoaa? Jos sitä tosiaan laskee(XYZ koordinaatit esmes -1, -1.1, 1) niin kuva näkyy oikein.
Eivät haittaa, kyllä sinulla nyt vain on jossain bugi. Ei tuosta voi oikein mitään sanoa ilman koodia.
Kiitokset avusta. Tiedä sitten oliko siinä bugi mutta kun korjasin UV koordinaatit polygoineihin niin ettei extra verteksejä ole ongelma katosi ja homma pelittää oikein. Hiphei!
Tarkistuksena viellä että ymmärsin idean jos nyt teen neliön jonka keskelle(tasan) laittaisin viidennen vertexin joka menisi ylös(karkea vuori tasangolla esmes) olisi viidennen vertexin UV arvot 0.5 0.5?
No esimerkiksi.
Mitenhän mahdoit selvitä tuosta ilman lisäverteksejä? Siis onko nyt kuutiossasi kahdeksan kärkeä ja kuusi teksturoitua sivua ja vain kahdeksan verteksiä?
lainaus:
Mitenhän mahdoit selvitä tuosta ilman lisäverteksejä? Siis onko nyt kuutiossasi kahdeksan kärkeä ja kuusi teksturoitua sivua ja vain kahdeksan verteksiä?
Joo. Pistin jokaiselle polygonille talteen sen polygonin vertexien UV-mapit tähän tyyliin:
v -1.00000000 -1.00000000 1.00000000
v -1.00000000 1.00000000 1.00000000
v 1.00000000 1.00000000 1.00000000
v 1.00000000 -1.00000000 1.00000000
v -1.00000000 -1.00000000 -1.00000000
v -1.00000000 1.00000000 -1.00000000
v 1.00000000 1.00000000 -1.00000000
v 1.00000000 -1.00000000 -1.00000000
p 4 1 4 3 2 0.0 0.0 1.0 0.0 1.0 1.0 0.0 1.0
p 4 1 5 8 4 1.0 1.0 0.0 1.0 0.0 0.0 1.0 0.0
p 4 2 6 5 1 1.0 1.0 0.0 1.0 0.0 0.0 1.0 0.0
p 4 3 7 6 2 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0
p 4 4 8 7 3 1.0 1.0 0.0 1.0 0.0 0.0 1.0 0.0
p 4 6 7 8 5 0.0 0.0 1.0 0.0 1.0 1.0 0.0 1.0
Eli ensin vertexit X Y Z muodossa, sitten polygonit muodossa:
p <vertexcount> vertex1...vertexn vertex1U vertex1V...vertexNU vertexNV
En tiedä sitten kumpi on oikeasti parempi mutta tuntui että tämä olisi vähemmän muistia syövä ratkaisu. Suoritusnopeudessa ei kai ole mitään eroa?
Huonona puolena polygonirivi meni pirun hankalasti luettavaksi. Uhhhuh. Noh minkä voittaa jossain häviää toisessa :D
Tuo on esimerkiksi animoinnin kannalta fiksumpi ratkaisu, kun ei tarvitse siirtää jokaista identtistä verteksiä erikseen. En vain tiennyt malliformaattisi mahdollisuuksia.
lainaus:
Tuo on esimerkiksi animoinnin kannalta fiksumpi ratkaisu, kun ei tarvitse siirtää jokaista identtistä verteksiä erikseen. En vain tiennyt malliformaattisi mahdollisuuksia.
Noh hyvä tietää että siitä on jotain hyötyä ja animointikin olisi tarkoitus lisätä myöhemmin joten hyötyä tuosta siis tulee.
Ja formaatin nyt enemmän tai vähemmän häpeilemättä pöllin täältä koodivinkissä löytyneestä mallin lataus ja piirrosta. UV data nyt tuli lisättyä itse siihen mutta muuten muoto on identtinen. Kiitos kraylle artikkelistaan!
Aihe on jo aika vanha, joten et voi enää vastata siihen.