Miten voi avata OpenGL:llä yhdestä bmp kuvasta monta animaatiokuvaa?
EDIT: Esim: http://zux.sjr.fi/touho/deep_0.bmp
Muuta tekstuurikoordinaatteja (glTexCoord). Voin kertoa, että ainakin minulla OpenGL:ssä tekstuurin vaihtaminen (glBindTexture) on hidasta. Muista, että tekstuurikoordinaatit ovat "aina" nollan ja ykkösen väliltä, eivät pikselien mukaan.
Et suinkaan itse piirtänyt noita? O_o
En toki. Tuo on Little Fighter 2 pelistä. :)
Siis ensin valitaan koko iso tekstuuri ja sitten kun aletaan piirtämään polygoneja, niin ilmotetaan glTexCoordilla se oikea tekstuuri?
Juuri niin. Jouduthan joka tapauksessa valitsemaan glTexCoordilla ne kulmat, vaikka käyttäisit koko tekstuuria, eikö?
Kiitos. sain nyt toimimaan! :)
EDIT: Ei tätä systeemiä varmaan pelkän sen takia kannata käyttää, että glBindTexture on hidas. sitä joutuu kumminkin käyttämään kaikkien ukkeleiden animaatioiden välissä, koska taustaa pitää piirtää myös.
Ja mulla glBindTexture vie aikaa millisekunnin murto-osan 512*512 kuvassa.
Tekstuurin muodosta riippumatta koordinaatit ovat aina nollan ja ykkösen väliltä. Pikselin keskikohta löytyy käsittääkseni näin:
float x = (pikselin_x + 0.5f) / (float)kuvan_leveys;
Jos leveys on vaikkapa 256, niin kaava antaa luvut 0,5 - 255,5. Vastaavasti myös y:lle. Tämä hankala tapa siksi, että muuten ollaan puoliksi viereisellä pikselillä ja kuvalle tulee huonot reunat.
Teoreettisena optimointina korkeudelle voi jo valmiiksi laskea kääteisluvun ja käyttää kertolaskua jakamisen sijaan. Käytännön merkitys melko pieni, kun piirtäminen on kuitenkin se, mikä kestää.
Edit: Hidas, kun piti ruveta kokeilemaan :D
Minulla tuo glBindTexturen hitaus oli sen verran näkyvä, että esimerkiksi tilejen piirtäminen nopeutui huomattavasti, kun piirsin kaikki samalta tilekartalta löytyvät kerralla enkä vaihtanut joka välissä. Ei tuota nyt yksittäisellä vaihdolla pystykään mittaamaan, mutta kun näytöllä on vaikkapa 200 tileä ja jokaisen välissä vaihdetaan karttaa, niin minulla se jo hidasti. Varmasti tuo on myös näytönohjaimesta kiinni.
Aihe on jo aika vanha, joten et voi enää vastata siihen.