objekte drehen



  • ok du hast recht. wenn man sowieso nur 4 richtungen hat ( W A S D), brauch man eig garnet mir cos/sin anfangen das geht auch ohne. ich hab nur gedacht es wär für später dann man hilfreich wenn die figur sich immer in die richtung der mausposition drehen soll (wie in cs 2d 😉 ) aber ich glaub das dauert vll noch en bissle.
    mein problem war/ist, dass ich ein mensch laufen lassen wollt, den man von einer halbdraufsicht anguckt.



  • du hast mich voellig missverstanden.
    es kann dir niemand helfen solang du nicht wenigstens mal schilderst wie sich dein fehler aeussert.
    es ist wahrscheinlich sehr hilfreich den richtungsvektor einfach mal mit anzuzeigen.



  • ok:

    ich hab den code von euch bei mir übernommen sodass mein mensch eigentlich mit A und D sich drehen kann und mit W und S vor/rückläuft.

    in wirklichkeit läuft er aber anders:
    deswegen hab ich ja ma die exe hochgeladen
    es ist von dem drehwinkel abhängig wohin er läuft wenn W gedrückt wurde.
    in der ausgangsposition (mensch guckt zu kamera) macht er sitesteps nach links (von sich aus). dreht man ihn um 180grad läuft er sitesteps nach rechts(logsch). aber wenn man in nur um 90 grad dreht sollte er eigentlich auf die kamera sitesteps machen aber er läuft davon weg. bei 270 grad sollte er weglaufen, läuft aber drauf zu (sidesteps zur kamera)



  • Ich weiß nich, was du da für ne Anwendung hochgeladen hast, aber die Figur kann gar nich bewegen mit WASD. Die wackelt nur so hin und her



  • ja hat mein freund auch gemeint. ich hab noch kein timebased movements drin vll liegs daran.



  • Alter *g*

    Du hast doch beschrieben, wie sich die Figur bewegt. Hast du dir das ausgedacht oder wo siehst du das? 😃 Lad doch mal die Anwendung hoch, wo man auhc den Fehler sieht.



  • ich sehe zwar ein, dass man in dem alter gewisse verstaendnisschwierigkeiten mit der linearen algebra hat, aber hier sind ueberhaupt keine anzeichen von eigenstaendiger bemuehung oder selbststaendigen denkens zu erkennen...



  • ja ich weiss wie scheisse des is wenn einer sich in nem forum alles in den arsch pumpen lässt

    bei mir kann man mit dem mensch so rumlaufen ich hab ma das projekt ubgeloadet
    un auf wunsch könnte ich auch noch meine gesamte festplatte uploaden ;)^^
    (MSVC++)

    http://popofachmann.po.funpic.de/

    verzeichniss: modeluse
    datei in der es stinkt: ms3dobj.cpp

    ausschnitt:

    void Human::makeFmove(GLfloat speed)
    {
    	GLfloat radians;
    
    	radians = angle * (PI/180.0);
    
    	pos.x+=cos(radians)*speed;
    	pos.z+=sin(radians)*speed;
    }
    
    void Human::makeBmove(GLfloat speed)
    {
    	GLfloat radians;
    
    	radians = angle * (PI/180.0) +180.0;
    
    	pos.x+=cos(radians)*speed;
    	pos.z+=sin(radians)*speed;
    }
    
    void Human::makeRturn(GLfloat paangle)
    {
    	angle+=paangle;
    }
    
    void Human::makeLturn(GLfloat paangle)
    {
    	angle-=paangle;
    }
    
    void Human::render()
    {
    	glPushMatrix();
    	glTranslatef(pos.x,pos.y,pos.z);
    	glRotatef(angle,0.0f,1.0f,0.0f);
    	draw();
    	glPopMatrix();
    }
    

    so müsste der mensch doch gesund rumlaufen



  • radians = angle * (PI/180.0);
    pos.x+=cos(radians)*speed;
    pos.z+=sin(radians)*speed;
    

    deine figur schaut initial (angle=0) entlang der z-achse (0,0,1), als richtungsvektor ergibt sich aber (1,0,0) - die figur muss also inital nach rechts schauen; macht also einen defizit von 90 grad bei der rotation:

    glRotatef(angle+90,0.0f,1.0f,0.0f);
    
    radians = angle * (PI/180.0) +180.0;
    pos.x+=cos(radians)*speed;
    pos.z+=sin(radians)*speed;
    

    na da wolltest du wohl besonders clever sein, wa? 😉
    wenn der vektor in die andere richtung zeigen soll wird er negiert.
    180 grad weiter drehen ginge auch. 180 rad macht ueberhaupt keinen sinn...



  • hellihjb schrieb:

    radians = angle * (PI/180.0) +180.0;
    pos.x+=cos(radians)*speed;
    pos.z+=sin(radians)*speed;
    

    na da wolltest du wohl besonders clever sein, wa? 😉
    wenn der vektor in die andere richtung zeigen soll wird er negiert.
    180 grad weiter drehen ginge auch. 180 rad macht ueberhaupt keinen sinn...

    Gemeint ist, dass du die 180° auf den Winkel im Gradmaß addieren musst und nicht Radians.

    radians = (angle+180) * (PI/180.0)

    Achtung: Punkt vor Strich :p



  • ja da wollt ich so halbstark clever sein;)

    ich hab mich schon gewundert was diesmal rauskommt aber es ergibt langsam sinn!
    also ich bedank mich dann mal <3lich 😉
    dass es 100% klappt bekomm ich jetz auch hin, das schieb ich mir zurecht^^

    zum glück hatte ich mein "jungheitsbonus" bei euch sonst wär mir garnicht zu helfen ^^

    also dann bis auf ein neues! (bis zur nächsten "spannenden, aufregenden" frage von mir 😋) ...schlechter scherz...


Anmelden zum Antworten