PDA

Prikaži potpunu verziju : Animacija teksture u OpenGL-u


Andross
8.7.2007, 18:03
Kako da uradim animaciju teksture u OpenGL-u? Ta animacija je za sprajt, ortografijska projekcija je podesena i ostatak, ali me buni kako da uradim animaciju teksture?

EclipsE
8.7.2007, 18:39
Kako bi bilo da pomerash koordinate teksture za vertexe? Npr. imash teksturu 256x256 i na njoj delove od po 32x32 (dajem samo primer) koje hocesh da animirash, tj. da se npr. vojnik krece. Znaci imash 4 vertexa

1------2
| |
| |
| |
3------4

i ne dodelish im koordinatne vrednosti
1 - (0,0)
2 - (1,0)
3 - (0,1)
4 - (1,1)
nego one vrednosti kojim odgovaraju polozaji tih delova, za prvu sliku bilo bi

1 - (0,0)
2 - (0.25,0)
3 - (0,0.25)
4 - (0.25,0.25)
za sledecu
1 - (0.25,0)
2 - (0.5,0)
3 - (0.25,0.25)
4 - (0.5,0.25)

itd... ako si na to mislio :) ako nisi, reci pa da vidimo...

kish
9.7.2007, 14:18
Posto ce ti ovako nesto cesto trebati (animacija, tilesets itd.) mozda bi bilo pametnije prvo uraditi proceduru koja iscrtava zeljeni delic texture. Ovako nesto:


void DrawImage2dPart(Texture * tex, float x, float y, float bx, float by, float width, float height)
{
int w=(*tex).width;
int h=(*tex).height;
glBindTexture(GL_TEXTURE_2D, (*tex).texID);
glBegin(GL_QUADS);
glTexCoord2f(bx/w,1-(by+height)/h); glVertex2f(x,y+height);
glTexCoord2f((bx+width)/w,1-(by+height)/h); Vertex2f(x+width,y+height);
glTexCoord2f((bx+width)/w,1-by/h); glVertex2f(x+width,y);
glTexCoord2f(bx/w,1-by/h); glVertex2f(x,y);
glEnd();
glBindTexture(GL_TEXTURE_2D, 0);
}


Drugi nacin bi bio da se pojedini frejmovi animacije cuvaju u posebnim slikama, pa se posle ucita ceo niz textura, pa je posle mnogo lakse baratati sa indexima nego parametrima texture. Naravno, jedna veca textura se brze ucitava nego vise malih, a i zauzima manje memorije... Izgubis na mostu, dobijes na Cupriji :D

Andross
9.7.2007, 17:21
@kish: Uradio sam ja to josh kad je EclipsE napisao, nego nisam stigo da javim :)

Andross
14.7.2007, 22:33
Da ne pravim novu temu, kako da uradim Pixel-Perfect koliziju u OpenGL-u (2D naravno), posto mi je bounding box previse neprecizan?

EclipsE
15.7.2007, 0:55
Prvo trebash da uzmesh pixele i smestish ih u neki niz( pogledaj ovu funkciju glGetTexImage (get pixels from a texture)), e sad, tekstura neka ti bude crno bela, belo je prazno, crno je puno, i kad imash 2 niza uporedjujesh ih ALI morash da imash i u uvid da se ne uporedjuju samo teksture, posto se sprajtovi mogu nalaziti bilo gde u prostoru... Moj predlog ti je da se manesh toga, posto puno pixela = puno proveravanja = male performanse... Ja bih napravio sistem za deljenje sprajtova u bounding boxeve, znaci jedan sprajt, vise bounding boxeva, i time mozesh sebi da skratish proracune mnooooogo... Isto, da imash recimo glavni bounding box koji obuhvata ceo sprajt, i prvo uporedjujesh veliki sa velikim, ako je doslo do kolizije onda svaki mali posebno. Ako hocesh, odradicu ti primer za BitBlt u VB-u ili XNA, C# :)

Andross
15.7.2007, 13:37
Znam za to proveravanje pixela, al' nisam znao za tu funkciju za dobijanje pixela. Inace svaki sprajt normalno ima jedan BB koji ga obuhvata celog i PP metodu se prvo proverava veliki BB pa tek onda pixel po pixel.

EclipsE
15.7.2007, 13:53
Ali je sasvim nepotrebno! Zamisli dva sprajta 128x128, znaci svaki ima ...... 16 348 piksela... 2 takva ...... 32 768 .... i hocesh da napravish igru a samo za 2 sprajta moracesh da proveravash ne znam ni ja koliko piksela medjusobno! Ako imash bounding box-eve(ili bounding circle-ove) mozesh taj proracun da smanjish na recimo 10-tak proracuna za 2 sprajta! Ali dobro, ako ti tako hocesh, ja ne mogu da te sprecim, samo ti govorim sta je najbolje...