OpenGL +kameraposition



  • Die Kameraposition befindet sich ja initial in (0,0,0). Durch die Befehle glTranslate, glRotate, etc. veränderst du ja die Kameraposition, also könntest du ja diese immer "selbst" berechnen.



  • OpenGL ist eine Low Level API - wenn du dich nicht um die Details kümmern willst nutze einen Bibliothek wie Ogre3D oder z. B. den Nvidia Scene Graph



  • AlexXXx schrieb:

    Hi,
    Ich habe auf einer diversen Website gelesen, das man im OpenGL
    die "Kameraposition" selbst errechnen muss, in dem man die inverse ModelView matrix mit dem Nullpunkt [0 0 0 1] multipliziert.
    Gibt es da echt keinen anderen Weg oder eine fertige Funktion dafür ??
    Gruß

    Schau mal hier: http://www.opengl.org/resources/faq/technical/viewing.htm



  • megaweber schrieb:

    Die Kameraposition befindet sich ja initial in (0,0,0). Durch die Befehle glTranslate, glRotate, etc. veränderst du ja die Kameraposition, also könntest du ja diese immer "selbst" berechnen.

    Hä komisch, wenn ich das so in mein Programm eingebe, kommen da so komische Errors und so.



  • So danke fuers verschieben hier her, jetzt habe ich mich anmeldenmüssen *ggg*

    Öhm die kameraposition an sich zu berechnen it kein Problem.
    Ich finde meine Vorgehensweise nur etwas umständlich.

    Ich berechne die determinante, (Länge des Vektors skalieren)
    Und dann nich die adjungierte, aber eben die Elemente, welche bei der Multiplikation mit
    [0 0 0 1] nicht null werden.

    Mir ist dann noch aufgefallen dass die ModelView Matrix ja transponiert im speicher liegt. Hmmmmmmm

    Im Grunde müsste ja auch genügen:
    Modelview wie sie im Speicher liegt also M[16]
    M[5] entspricht f

    |a b c d|
    |e f g h|
    |i j k l|
    |m n o p|
    
    V=|m n o|=Kameraposition
    
      V
    ------
    ||V||[t]Euklid[/t]=UnitVektorKameraposition
    

    Aber kann ich die Kameraposition micht immer irgendwie bei meinen Modelview Operationen mitführen ohne dass ich ne euklidische Norm berechnen muss oder
    eine Matrix teilweise invertieren.???
    Ich meine ist ja nicht schlimm vom Zeitaufwand, da di Matrix eine feste größe hat, und das ganze ziemlich flott gemacht werden kann.
    Ist aber trotzdem irgendwie unschön.
    @Kóyaánasqatsi
    ^^ Du mußt ja auch eine Programmiersprache benutzen ^^



  • @David_pb
    Danke, hätte erst lesen, dann schreiben sollen :xmas1:



  • Kóyaánasqatsi schrieb:

    megaweber schrieb:

    Die Kameraposition befindet sich ja initial in (0,0,0). Durch die Befehle glTranslate, glRotate, etc. veränderst du ja die Kameraposition, also könntest du ja diese immer "selbst" berechnen.

    Hä komisch, wenn ich das so in mein Programm eingebe, kommen da so komische Errors und so.

    .. versteh ich nich ...



  • Hmmm Also kurtz, kannman sagen dass die ModelView Matrix in ihrer
    4-ten (letzten) Zeile die Kameraposition enthält ??
    Mein erstes schreiben hat Feher, wills aber nicht verbessern, damit man den Fortschritt sieht, und eure antworten nicht ihren Sinn verlieren *g*

    Gruß



  • ^^Okay der Vektor V hat die kameraposition aber im falschen kkoordinatensystem. Die können ja nicht nur verschoben zueinander sein, sondern auch skaliert und rotiert. habe mich immer gefragt, wiso bei dier invertierung dann plötzlich andere Werte (Also auch die der linken oderen 3:3 untermatrix) berücksichtig werden, wenn rotiert wird. (Beim berechnen durch inverse matrix)

    Ich habs ^^.
    Die inversion muss man also machen
    Gruß



  • Alexander_Kiebler_m82 schrieb:

    Ich habs ^^.
    Die inversion muss man also machen
    Gruß

    Nicht unbedingt. Rotationsmatrizen lassen sich recht einfach invertieren (Transponieren). Und Translationsmatrizen auch. Wenn du also weißt, was du tust, kannst du auch einfach die einzelnen Matrizen invertieren und in umgekehrter Reihenfolge zusammen multiplizieren.

    Oder du benutzt einfach die gluLookAt funktion, wie hier auch schon erwähnt.


Anmelden zum Antworten