edit: Bitmask 1.3 pobleme (alt: SDL: Farbe eines Pixels ermitteln)



  • hi...
    viel zu erklären hab ich nicht...der titel sagt alles 😃
    ...und JA..ich hab mir die Dokumentation von SDL angeschaut und hab mich auch stark am beispiel orientiert, aber irgendwie bekomm ich die ganze zeit komisches zeug raus

    Hier mein code

    void CImage::CreateBitmask( Uint8 r, Uint8 g, Uint8 b )
    {
        Uint32 temp, pixel;
        Uint8 red, green, blue;
        int x,y;
    
        mBitmask = bitmask_create( mSurface->w, mSurface->h );
        bitmask_fill( mBitmask );
    
        for ( x=0; x<=mSurface->w; x++ )
        {
            for ( y=0; y<=mSurface->h; y++ )
            {
                SDL_LockSurface( mSurface );
                pixel = *( ( Uint32* )mSurface->pixels+y*mSurface->pitch/4+x );
                SDL_UnlockSurface( mSurface );
    
                //SDL_GetRGB( pixel, mSurface->format, &red, &green, &blue );
    
                // Red
                temp = pixel & mSurface->format->Rmask;
                temp = temp >> mSurface->format->Rshift;
                temp = temp << mSurface->format->Rloss;
                red = ( Uint8 )temp;
    
                // Green
                temp = pixel & mSurface->format->Gmask;
                temp = temp >> mSurface->format->Gshift;
                temp = temp << mSurface->format->Gloss;
                green = ( Uint8 )temp;
    
                // Blue
                temp = pixel & mSurface->format->Bmask;
                temp = temp >> mSurface->format->Bshift;
                temp = temp << mSurface->format->Bloss;
                blue = ( Uint8 )temp;
    
                if ( red == r && green == g && blue == b );
                    bitmask_clearbit( mBitmask, x, y )
            }
        }
    }
    

    Der code dient zum erstellen einer kollisionsmaske nach einer bestimmten farbe wie die meisten von euch sicherlich schon bemerkt haben...mein Problem ist, es kommen nicht die richtigen farbwerte raus denk ich mal...jedenfalls stimmen teile der kollisionsmaske, andere nicht...murks eben...warschinlich hab ich irgendwo ein rechenfehler, aber ich finde ihn nicht.
    An den Kollisionsroutinen selbst liegt es nicht...wenn ich die clearbit() zeile weglass dann hab ich eine wunderschöne voll funktionsfähige Viereck-Viereck Kollisionsabfrage 😞 ich hoff ihr könnt mir helfen...HILFÄ

    thx...cya kolf



  • Wie wärs, den Debugger zu benutzen, oder mal die Kollisionsmaske auszugeben?

    Bye, TGGC (Denken, und gut ist.)



  • maske ausgeben kam ich auch schon drauf, ist so ne sache für sich, da ich noch am anfang des spiels bin und noch keine textausgabe hab, und printf funzt nicht wenn sdl läuft.
    Und zum debugger...ich bin noch nicht so der held was programmieren angeht und noch viel weniger was compiler/debugger/usw. angeht und weis schlicht und einfach noch nicht wie ich den richtig zu bedienen hab.

    cya



  • Na dann werd mal ganz schnell der Held und lerne Compiler/Debugger zu bedienen. Ausgabe kann man auch in ein (Log-)File oder direkt in den Debugger machen.

    Bye, TGGC (Denken, und gut ist.)



  • ok...hat sich erledigt, das mit dem farbwert und der kollisionsmaske...sdl schreibt die sdtout automatisch in eine textdatei...der einzige fehler in dem part code war x und y in den for schleifen vertauscht=>kollisionsmap um 90 grad gedreht+absturz bei nicht quadratischen bildern 😃

    ...und ja, ich hätte mir das nur etwas länger anschauen müssen, mach ich normalerweise auch...aber damit dieses threat nicht völlig umsonst war...das eigentliche problem ist immernoch da, es kommen bei der kollisionsabfrage falsche ergebnisse raus. Daher jetzt meine frage...

    Hat irgendjemand schonmal die Bitmask-1.3 (http://www.ifm.liu.se/~ulfek/projects/2d_Collision_Detection.html) Funktionen von Ulf Ekstrom benutzt und irgendwelche erfahrungen gesammelt/ähnliche probleme gehabt...order lief das ohne probleme??

    thx...cya kolf


Anmelden zum Antworten