lings- rechtsbewegen in openGL



  • mmh da muss ich jetz ma überlegen
    wenn man fragt ob man eine frage stellen darf, ist die frage dann die frage ob man noch eine frage stellen darf?
    oder ist die frage dann eine neue frei wählbare frage?



  • Alter frag einfach 😃



  • ah mein plan ging auf.

    nun gut es geht ums hochgucken.

    wenn die direction gleich (0.0f/0.0f/-1.0f) ist dann kann man im prinzip die direction für hoch und runter gucken so berechnen:
    dir.y = sin(rad);
    dir.z = -cos(rad);

    wenn allerdings der directionsvektor != 0.0f,0.0f,-1.0f ist dann kann man das wie ich erarbeitet hat nicht machen.
    meiner arbeit nach geht nur
    dir.y = sin(rad);

    der dir.z ist irgentwie abhängig von dem winkel der guckrichtung (links-rechts) aber wie (wenn überhaupt) ?



  • beeinflusst die blickrichtung auch die bewegungsrichtung oder willst du dich nach wie vor nur in der ebene bewegen?

    grundsaetzlich gilt: da dein richtungsvektor nicht mehr parallel zur grundflaeche steht (die deine rotationsachse definiert hat), ist diese nicht mehr explizit gegeben und muss zusaetzlich spezifiziert werden.
    vereinfacht gesagt: du kannst einem richtungsvektor eines unbekannten koordinatensystems nicht ansehen wo oben und unten ist.
    genau das macht aber gluLookAt (in verbindung mit dem up-vektor) - warum willst du diese funktion nicht nutzen?


  • Mod

    Fachmann schrieb:

    mmh da muss ich jetz ma überlegen
    wenn man fragt ob man eine frage stellen darf, ist die frage dann die frage ob man noch eine frage stellen darf?
    oder ist die frage dann eine neue frei wählbare frage?

    Du hast glück dass ich zu lazy bin hier die neusten Treiber für MS-remote-Folter zu installieren 🙂

    Aber nächstes mal, einfach fragen, du kannst bei neuen Fragen auch gerne einen neuen thread aufmachen, heir hat nicht jeder seinen eigenen thread der ihn sein lebenlang begleitet.



  • "MS-remote-Folter" ...was soll ich dazu noch sagen^^
    naja ich hab mir gedacht die frage gehört ja in die selbe gruppe die hier angesprochen wird deswegen hab ichs nochma hier reingemacht
    wenn das gelöst ist bin ich für monate bedient;)

    @hellijib

    dh wenn der richtungsvektor anfängt, sich in der 3. dimension zu bewegen, muss er expliziert spezifiziert werden?
    deshalb soll man den upvektor manipulieren?

    seite:
    up
    |
    |
    |_____direction

    wenn der upvektor immer im winkel von 90grad zur direktion steht dann könnte man einen neuen winkel names UpDownAngle erstellen sowie ein vektor UpDownVector. letzterer wird beim auf und up bewegen wiefolg manipuliert:
    (dieser vektor wird auch als parameter vom Upvector parameter bei glulookAt angegeben)

    updown.y = sin(rad);
    updown.z = -cos(rad);

    also wenn man nach oben gucken will muss man nur den upvektor nach hinten drehen (center of mass) un somit wird auch die direction nach oben gekippt?
    wie wenn die obige zeichnung ein festes stück ist un ich es um den beliebigen winkel nach links/rechts kipp (center of mass)?
    (warscheinlich net 😞 )

    soo und nochma editiert:
    wenn ich das so umsetz dreht sich mein objekt (also die komplette weld) um die z achse wenn ich hoch oder runter guck(en will).



  • was du effektiv willst, ist ja 'ne rotationsmatrix.
    die besteht aus 3 vektoren die, wie beim kartesischen koordinatensystem, alle senkrecht aufeinander stehen.
    bei deinen bisherigen bemuehungen war das leicht zu realisieren:
    dein richtungsvektor war zweidimensional in x und z und der up-vektor dadurch eindeutig definiert durch (0,1,0) (implizit durch glRotate).
    den allgemeinen fall loest gluLookAt - den up-vektor muss man dabei nicht besonders genau nehmen:
    die funktion berechnet zunaechst den vektor zur seite (steht senkrecht auf "vorne" und "up") und daraus wiederum den tatsaechlichen "up" als senkrecht auf "vorne" und "seite" - es muss also nur die grobe richtung passen.
    wenn man davon ausgehen kann, dass man immer "auf dem boden" steht und lediglich nach oben und unten gucken koennen soll, bleibt der upvektor (0,1,0).
    willst du beliebig im raum herumtrudeln, wuerde ich dir quaternionen nahelegen.
    deren mathematische hintergruende sind fuer dich wahrscheinlich unmoeglich nachzuvollziehen, die anwendung jedoch relativ simpel.



  • Die Anwendung ist simpel aber für mich noch nicht wirklich einfach weil mir da warscheinlich noch ein bisschen Basiswissen fehlt^^
    Ich werde mich auch ma durchgooglen was man unter einer Quaternion versteht, weil mir die "Kurzbeschreibung" da nicht weiter hilft. Was das genau ist werde ich die nächsten 5 Jahre nicht verstehen also bleibt mir nichts übrig als die Anwendung zu verstehen ohne zu wissen, was genau ein Quaterion ist. (ich freu mich schon drauf 👍 )
    wie gesagt - ich versuchs mit der anwendung und meld mich bei problemen evtl. .
    warscheinlich muss ich das mit updown-bewegen erstmal pausieren und nach meinem abitur (falls es soweit kommt) nochmal drauf eingehen. Aber ich bedanke mich erstmal recht herzlich!



  • Fachmann schrieb:

    also bleibt mir nichts übrig als die Anwendung zu verstehen ohne zu wissen, was genau ein Quaterion ist

    Hier haste ein sehr schönes Tutorial: http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=Quaternion_Camera_Class

    Hier auch nochmal auf deutsch:
    http://translate.google.com/translate?u=http%3A%2F%2Fnehe.gamedev.net%2Fdata%2Flessons%2Flesson.asp%3Flesson%3DQuaternion_Camera_Class&langpair=en|de&hl=de&ie=UTF-8&oe=UTF-8&prev=%2Flanguage_tools
    Aber nimms nur zum Nachgucken wenn du en Wort nich verstehst, die Übersetzung is übel 😃 vorallem im code... *g*



  • auf deutsch is das belustigend^^

    leeres CheckKeys (Lücke) {wenn (Schlüssel [VK_UP])

    naja danke! ich bin jeden tag bei NEHE aber das hab ich iwie ausser acht gelassen


Anmelden zum Antworten