Animationsblending realisieren?



  • Hallo zusammen,ich würde gerne bei einem kleinen 3rd person game projekt die Animationen zwischen z.B gehen und idle mit Blending etwas realistischer aussehen lassen.

    Jetzt hab ich das große Glück ,dass ich in der Engine den Blend Faktor von 0 - 1.0 eingeben kann.
    Jedoch weiß ich garnicht wie man das machen soll,dass wenn man z.b die sequenc(einfache int sequenc) ändere,sich der Blendfaktor einmal bis ca 0 geht,die anderte Sequenc setzt und wieder auf 1.0 hochfährt.

    Das Problemm ist,dass die Welt bei mir in einer while Schleife geupdated wird,und sich der Blendfaktor also jeden Durchgang irgendwie ändern soll.

    Ich hoffe das konnte man jetzt halbwegs gut verstehen und hoffe auf Hilfe.
    Danke 🙂



  • Häää???



  • Ich kenn mich zwar mit der Graphikprogrammierung nicht so gut aus aber mit c++ schon her 🙂
    Du könntest entweder die while durch eine for schleife ersetzen, da du da vor beginn der variable einen wert zuweisen kannst, oder du löscht schlicht und einfach mit

    cin.sync();
    cin.clear();
    

    Den Puffer und evtl. gesetzte Fehlerflags an geeigneter stelle.
    In C konnte mna mit

    fflush(stdin);
    

    Alle Werte der Variablen löschen( auf 0 setzen).
    Dann einfach neu den wert am beginn der Schleife zuweisen.
    Hoffe das hilft dir.



  • Ok danke erstmal ,aber ich meinte glaub ich was anderes.

    Ich hab 2 Animationssequenzen als einen int Wert.Bei sequenc = 1 setzte ich framebegin und frameend auf z.b 0 und 10 und bei sequenc = 2 auf 11 und 20.

    jetzt hab ich in der engine bei dem animationsbefehl noch eine variable blend.Die kann man von 0.0 - 1.0 einstellen.Die Sequencen ändern sich auf den WASD Tasten zu den jewaligen Anmationen(vorne gehen,nach hinten.....) und wenn man nichts drückt ist die Idle Animation an.

    So ich will jetzt ,dass wenn man z.B gerade in der Idle Animation ist und auf die Taste W drückt,also die Sequenc ändert,dass sich der blendfaktor jeden durchgang der whileschleife um 0.01 oder so runtergeht ,bis er 0 ist ,sich die andere nach vorne gehen Sequenc angeht und der Blendfaktor wieder jeden Durchgang der Schleife um 0.01 bis 1 ansteigt.Dadurch hat man einen weichen übergang zwischen den sequencen.

    Ich hoffe man konnte das etwas besser verstehen.
    Danke für Hilfe 😉



  • for
    

    schleife ?

    sehr theoritisch

    for (Key.W){blend+0.01; blend++;}
    

    Was für einen engine benutzt du denn ? Zeig mal deinen code ! Zeig mal die blend funktion des engines!



  • Ja das mit der for Schleife geht ja nicht,da die ja in einem Durchgang den Blendfaktor verändert.Da hätte man nichts von.

    Bei der Engine gibts niht viel zu sagen.Da gibt es eine Funktion Animate mit den Parametern Mesh,frame,blend,sequenc,recursive .Dabei sollte man sequenc nicht beachten,da diese nur gebraucht wird wenn man ein animiertes Skelet lädt und es zum mesh hinzufügen will.

    Hab mir ein paar Gedanken gemacht:

    floaz blend = 1.0;
    float blend_faktor=0.0;
    bool blending = false;
    int sequenc = 1;
    int newsequenc = sequenc;
    if(Key.W) BlendingAnim(2//die neue seuqnc);
    
    while(1)
    {
    ......Rendern,Update....
    
    blend +=blend_faktor;
    
    if(blending == true)
    {
       blend faktor -0.05 bis es 0 ist 
       dan sequenc = newsequenc setzt.
       blendfaktor 0.05 bis blend 1.0 ist.
       newsequenc = sequenc;
       blending = false;
    }
    
    } // while zuende
    
    void BlendingAnim(int sequencneu)
    {
    blending = true;
    newsequenc = sequencneu;
    }
    

    Ja ich weiß jetzt nicht wie ich weiter gehen soll.


Log in to reply