SDL_rotozoom.h:lla oon käännelly kuvaa asteittain z-akselin suuntaisesti.
a)
Miten voi kääntää kuvaa muuten, kuin z-akselin suuntaisesti? Esimerkiksi sillälailla, että näyttäisi siltä, että joku kuva "käännetään pöydällä toisin päin" eli x tai y -akselin suuntaisesti.
b)
Demonstraatio:
while(1){ i++; // piirrän kuvan, joka on käännetty i astetta. DrawIMG(rotozoomSurface(kuva, i, 1, 1), x, y); )
Tässä esimerkissä kuva pyörii ruudulla, mutta ei sillälailla, että kuvan keskipiste pysyisi paikallaan. Miten saisi pyörimisliikkeelle määriteltyä keskipisteen?
Kokeile B kohtaan jotain seuraavan laista...
int x_rotated, y_rotated; // Näihin tulee pyöritetyn kuvan keskipiste int x_original, y_original; // Näihin tulee alkuperäisen pyörittämättömän kuvan keskipiste //haetaan alkuperäisen kuvan keskipiste x_original = KuvaJotaPyoritetaan->w>>1; y_original = KuvaJotaPyoritetaan->h>>1; //luodaan pyöritetty kuva PyoritettyKuva = rotozoomSurface(KuvaJotaPyoritetaan, 45, 1, 1); //haetaan pyöritetyn kuvan keskipiste x_rotated = (PyoritettyKuva->w >> 1) ; y_rotated = (PyoritettyKuva->h >> 1) ; //lasketaan kohta johon pyöritetty kuva piirretään location.y -= (x_rotated - x_original); location.x -= (y_rotated - y_original);
Eli piirrät kuvan x,y kohtaan (location.x location.y) ja >> 1 on sama kuin jako kahdella.
EDIT: Muistathan alustaan location.x:n ja location.y:n arvoilla, jossa haluat kuvan pyörivän.
Sain toimimaan. Kiitos! Löytyykö A-kohdan ratkasijoita?
Jos nyt ymmärsin tuon a-kohdan kysymyksen oikein niin, SDL_gfx:n documentaatioista löytyy funktioita, jotka sopivat tarkoitukseen:
SDL_Surface * rotozoomSurfaceXY (SDL_Surface *src, double angle, double zoomx, double zoomy, int smooth); SDL_Surface * zoomSurface (SDL_Surface *src, double zoomx, double zoomy, int smooth);
Lue lisää linkin takaa!
Noilla funktioilla ei saa kuvan peilikuvaa. Jos katsot peiliin, kuvasi kääntyy y-akselin suuntaisesti 180°. Tätä ei saa antamillasi funktioilla.(eikä muilla linkin funktioilla) Noilla Funktioilla voi käännellä vain z-akselin suuntaisesti sekä zoomx:n ja zoomy:n avulla x ja y -akseleiden suuntaisesti korkeintaan 90°, koska negatiivinen zoomaus ei onnistunut. :)
90° x-akselin suuntaisesti saadaan esimerkiksi laittamalla double zoomy:n arvoksi 0, jolloin kuvaa ei näy. 45° saadaan arvolla 0.5.
Aihe on jo aika vanha, joten et voi enää vastata siihen.