Bilder horizontal spiegeln


Beltar

Member
Joined
Feb 13, 2007
Messages
214
Age
34
Location
Stein (nähe St. Pölten(A))
ICQ
232357654
LOCATION
Stein (nähe St. Pölten(A))
Hi
Ich hab jetzt ein Bild von meinem Char gezeichnet und lese es ein mit:
Code:
<i>
</i>//imageBuffer[slot] = SDL_Surface

void imageLoadSdl(int slot,char *path)
{
    imageBuffer[slot] = IMG_Load(path);
    if(!imageBuffer[slot])
    {
        // image failed to load
        printf("IMG_Load: %s\n", IMG_GetError());
        SDL_Quit();
    }
}
void imageDrawSdl(int slot,int sx,int sy,int w,int h,int tx,int ty,int alpha,int transColor)
{
    SDL_Rect s_dest, t_dest;
    s_dest.x = sx;
    t_dest.x = tx;

    s_dest.y = sy;
    t_dest.y = ty;

    if(w != 0)
        s_dest.w = w;    
    else
        s_dest.w = imageBuffer[slot]->w;
    
    t_dest.w = s_dest.w;


    if(h != 0)
        s_dest.h = h;
    else
        s_dest.h = imageBuffer[slot]->h;
        
    t_dest.h = s_dest.h;
    
    SDL_SetAlpha(imageBuffer[slot], SDL_SRCALPHA | SDL_RLEACCEL, alpha);
    if(transColor != -1)
    {
        setColorSdl(transColor);
        SDL_SetColorKey(imageBuffer[slot],SDL_SRCCOLORKEY,SDL_MapRGB(imageBuffer[slot]->format, re, gr, bl));
    }
    SDL_BlitSurface(imageBuffer[slot], &s_dest, screen, &t_dest);
}

Da ich aber mit dem Char in 2 Richtungen gehen will, brauch ich das ganze 2x.
Gibt es eine Möglichkeit so ein Bild einfach horizontal gespiegelt auszugeben, oder ist es sinnvoller (schneller) es einfach 2x zu laden?

mfg
Beltar
 
eigentlich ist es egal ob du es intern einfach nur spiegelst oder eine zusätzliche graphik dafür benutzt, intern ist es meiner meinung nach eh nötig jeden zustand bereits vor gerendert zu haben um schnell rendern zu können oder anders gesagt, ich selbst lade immer charakter graphiken wie die vom rpg maker.
 
im 2D bereich brauchst du auf jeden fall zwei mal dein Bild im speicher, also kannst du es auch genau so gut zweimal laden, verwendest du jedoch eine 3D schnittstelle, wie OpenGL, kannst du die spiegelung genau wie alle Rotationen scalierungen und verschiebungen in die Projektionsmatrix reinpacken. Wenn du noch keine matrizen kennst, es reicht aus zu wissen, dass die Projektionsmatrix alle rotationen scalierungen spiegelungen etc (alle linearen Abbildungen) direkt in einem schritt zusammengefasst ausrechnen kann.

So genug Anfänger eingeschüchtert.
Am einfachsten du lädst das Bild zweimal. Das spielgeln kann selbst paint.

Du kannst natürlich auch die Pixel von deinem bild von hand umsortieren, aber das würde ich jetzt nicht unbedingt empfehlen.

Mein erstes spiel was ich programmierte enthier ein objekt in vier richtungen gedreht und animiert, bis ich dann die funktion rotate in meiner Library gefunden hatte ;)
 
Krux said:
im 2D bereich brauchst du auf jeden fall zwei mal dein Bild im speicher, also kannst du es auch genau so gut zweimal laden, verwendest du jedoch eine 3D schnittstelle, wie OpenGL, kannst du die spiegelung genau wie alle Rotationen scalierungen und verschiebungen in die Projektionsmatrix reinpacken. Wenn du noch keine matrizen kennst, es reicht aus zu wissen, dass die Projektionsmatrix alle rotationen scalierungen spiegelungen etc (alle linearen Abbildungen) direkt in einem schritt zusammengefasst ausrechnen kann.

Hab mir sowas schon fast gedacht.
Krux said:
So genug Anfänger eingeschüchtert.
Am einfachsten du lädst das Bild zweimal. Das spiegeln kann selbst paint.
Naja, als Anfänger würd ich mich nach 6 Jahren C/C++ und 5 Jahren SDL nicht mehr bezeichnen :D.

Jetzt benutz ich ein größeres Bild im Speicher und gib hat immer nur den richtigen bereich aus.

mfg
Beltar
 
Back
Top