Bewegung



  • Also, ich möchte eine Steuerung wie in einem EGo-shooter programmieren(Maus drehen, Tatatur laufen)
    Eigneltich funktioniert es auch gut, aber wenn ich nah am PUnkt 0,0,0 bin, dann dreht sich alles ganz schnell und ich kann mich nicht mehr richtig bewegen.
    So sieht mein Code dazu aus:

    if(g_DIState[TB_KEY_UP])
    {
      m_CamPos.x += sinf(m_YRot) * fPassedSecs;
      m_CamPos.z += (cosf(m_YRot) + cosf(m_XRot)) * fPassedSecs;
      m_CamPos.y += sinf(m_XRot) * fPassedSecs;
    }
    if(g_DIState[TB_KEY_DOWN])
    {
      m_CamPos.x -= sinf(m_YRot) * fPassedSecs;
      m_CamPos.z -= (cosf(m_YRot) + cosf(m_XRot)) * fPassedSecs;
      m_CamPos.y -= sinf(m_XRot) * fPassedSecs;
    }
    
    if(g_DIState[TB_MOUSE_X_NEG])  // TB_MUSE_NEG gibt Maus-Bewegung in x nach links wieder
      m_YRot -= g_DIState[TB_MOUSE_X_NEG];
    if(g_DIState[TB_MOUSE_X_POS])
      m_YRot += g_DIState[TB_MOUSE_X_POS];  // TB_MOUSE_POS agibt Bewegung in x richtu grechts wieder
    
    if(g_DIState[TB_MOUSE_Y_NEG])
      m_XRot += g_DIState[TB_MOUSE_Y_NEG];
    if(g_DIState[TB_MOUSE_Y_POS])
      m_XRot -= g_DIState[TB_MOUSE_Y_POS];
    
    m_CamView = m_CamPos + tbVector3(sinf(m_YRot), sinf(m_XRot), cosf(m_XRot)+cosf(m_YRot));
    

    Was ist daran denn jetzt falsch?
    Gruß, mAxi



  • ich denke bei den Rotationen muss auch noch ein Faktor fPassedSecs dazu.
    (Ich nehme mal an das ist der Zeitschritt).
    Dann stellt sich die Frage, ob m_CamView der absolute Vektor in Richtung des Blickpunktes ist,
    oder ob der nicht als Einheitsvektor relativ zur Kamera definiert ist??
    (Also mal ohne den Summand m_CamPos versuchen)



  • also, danke erstaml für die antwort.
    ABer der Blcikpunkt ist abbsolut und das mit fPassedSecs hat auch nmciht geholfen.



  • dieses problem tritt auch beim spiel counterstrike auf. obwohl ich aber nicht weiss ob das von der optischen maus kommt oder das auch so ähnlich programmiert wurde 😉



  • kann mir keiner helfen? Ich sitz immer noch davor und krieg es nicht raus...



  • Original erstellt von Maxi:
    kann mir keiner helfen? Ich sitz immer noch davor und krieg es nicht raus...

    Tritt das wirklich nur beim Punkt 0,0,0 auf!?!?



  • frag doch im forum von www.scherfgen-software.net 🙄



  • Also zumindest a obigen Code kanns nicht legen, denn da geht die Cameraposition in keine der Rotationsbewegungen ein.



  • doch. da ist ein fehler in der formel.
    wurde ihm aber auch schon im scherfgen-software Forum gesagt!
    er könnte ja Zumindest mal hier Bescheid sagen daß das Problem gelöst wurde 🙄



  • OK, das Problem wurde gelöst, mit Hilfe dem Buch von David Scherfgen und ihm persönlcih, danke dafür nochmal.

    Hier der richtige code:

    m_CamView = tbVector3(sinf(m_YRot)*cosf(m_XRot), sinf(m_XRot), cosf(m_XRot)*cosf(m_YRot));
    
            if(g_DIState[TB_KEY_W])
            {
                m_CamPos += m_CamView * fPassedSecs * 2.0f;
            }
            if(g_DIState[TB_KEY_S])
            {
                m_CamPos -= m_CamView * fPassedSecs * 2.0f;
            }
    
            if(g_DIState[TB_MOUSE_X_NEG])
                m_YRot -= g_DIState[TB_MOUSE_X_NEG];
            if(g_DIState[TB_MOUSE_X_POS]) 
                m_YRot += g_DIState[TB_MOUSE_X_POS];
            if(g_DIState[TB_MOUSE_Y_NEG])
                m_XRot += g_DIState[TB_MOUSE_Y_NEG];
            if(g_DIState[TB_MOUSE_Y_POS])
                m_XRot -= g_DIState[TB_MOUSE_Y_POS];
    
            if(g_DIState[TB_KEY_Y])                                 m_YRot = 0;
            if(g_DIState[TB_KEY_X])
                m_XRot = 0;
            m_CamView += m_CamPos;
    

Anmelden zum Antworten