Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: OpenGL: UV mappauksesta

Sivun loppuun

tneva82 [09.02.2009 14:56:33]

#

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).

Metabolix [09.02.2009 15:06:39]

#

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.

tneva82 [09.02.2009 15:11:11]

#

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.

Metabolix [09.02.2009 15:15:55]

#

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

tneva82 [09.02.2009 15:24:53]

#

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.

Metabolix [09.02.2009 15:27:34]

#

Eivät haittaa, kyllä sinulla nyt vain on jossain bugi. Ei tuosta voi oikein mitään sanoa ilman koodia.

tneva82 [09.02.2009 16:52:13]

#

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?

Metabolix [09.02.2009 17:04:48]

#

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ä?

tneva82 [09.02.2009 17:13:33]

#

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

Metabolix [09.02.2009 17:17:51]

#

Tuo on esimerkiksi animoinnin kannalta fiksumpi ratkaisu, kun ei tarvitse siirtää jokaista identtistä verteksiä erikseen. En vain tiennyt malliformaattisi mahdollisuuksia.

tneva82 [09.02.2009 17:20:55]

#

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!


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta