Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Kuvan kääntäminen ja pyörittäminen. (C++ SDL)

Touho [23.02.2005 20:23:02]

#

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?

WinC [23.02.2005 21:13:38]

#

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.

Touho [24.02.2005 09:50:27]

#

Sain toimimaan. Kiitos! Löytyykö A-kohdan ratkasijoita?

Gaxx [24.02.2005 10:07:58]

#

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!

Touho [24.02.2005 12:31:00]

#

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.

Vastaus

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

Tietoa sivustosta