OpenGL Matrix
-
Hey,
Ich habe mich mal etwas mit den Matritzen in OpenGL beschäftigt aber ganz ehrlich: Wie die Werte sich darin zusammensetzen verstehe ich nicht wirklich. Es gibt zwar Tutorial darüber aber nunja
Da ich nun aber vor einem kleinen Problem stehe und das eigentlich nur mithilfe der Modelview Matrix (denke ich mal) lösen kann, wollte ich hier mal um Hilfe fragen.
Mir geht es um folgendes Prinzip: Ich möchte eine Kugel rendern, die immer 10 Meter zentral vor mir fliegt! Drehe ich meine Sicht nach rechts, dann dreht sich die Kugel auch nach rechts, gucke ich nach oben geht die Kugel auch nach oben.
Mir geht es halt darum, wie ich mithilfe der Matrix aus OpenGL die 3 Koordinaten für die Kugel berechne. Hoffe mir kann das jemand erklären!MfG
-
Verwend einfach nur eine Translation um 10 Einheiten in z-Richtung als ModelViewMatrix.
-
Klingt zwar garnicht so verkehrt aber wie ich das nun genau umsetzen soll weiss ich ehrlich gesagt nicht? Gehts auch mit einem kleinen Codebeispiel?!
-
kugel.setPosition(kamera.getPosition() + kamera.getForwardVector() * 10.f);
Mal ernsthaft, wenn du uns nicht sagst wo und wie du deine Kameraposition/Rotation etc. speicherst, kann man dir auch nicht wirklich helfen.
Zudem: Arbeitest du mit altem OpenGL? Denn das "neue" kennt von Haus aus eigentlich keine Matrizen, das musst du selbst regeln.
-
Also ich denke doch auch, dass auch das "neue" OpenGL eine Modelview Matrix hat oder eine Perspective Matrix.
Und ahja, der Forward Vektor! Also Wert Nummer 2, 6 und 10 aus der Matrix => Klappt! Danke für die Hilfe
-
Chris Benoit! schrieb:
Also ich denke doch auch, dass auch das "neue" OpenGL eine Modelview Matrix hat oder eine Perspective Matrix.
Nope. Im Code schon mal gar nicht, und in den Shadern: http://www.opengl.org/sdk/docs/manglsl/
Du machst alles selbst.Aber schön dass ich mit Code helfen konnte, der dich eigentlich nur dazu bringen sollte mehr Infos rauszurücken.
-
Hm okay wieder was gelernt
Mir war ja durchaus bewusst, dass es in der Matrix Vektoren gibt aber ich wusste erst nicht wirklich wie und welchen ich nehmen muss. Aber es hat dann halt klick gemacht
-
Ich schieb das Thema hier nochmal hoch.
Und zwar nochmal 2 Fragen:
Mit dem Forward Vektor kann ich ja ein Beliebiges Objekt n-Einheiten vor mir platzieren und es auch meiner Ansicht folgt aber müsste es nicht auch einen Vektor geben, der die Rotation speichert? Damit ich z.B. mit glRotate ein Objekt immer in die Richtung rotieren kann in der ich auch schaue? Mit dem Forward Vektor bewege ich ja nur das ganze Objekt auf x, y und z achse aber eben keine Rotation
(Name des Vektor reicht bestimmt)
@cooky451: Woher weiss ich denn dann aber welche OpenGL Version ich nutze? Ich hatte zumindestens immer die neusten Header mit drin... oder bzw. wie könnte ich auf das neuere "umstellen" ?
-
Chris Benoit! schrieb:
@cooky451: Woher weiss ich denn dann aber welche OpenGL Version ich nutze? Ich hatte zumindestens immer die neusten Header mit drin... oder bzw. wie könnte ich auf das neuere "umstellen" ?
Im Code leider nicht. Du kannst vielleicht einen modernen Kontext erstellen, aber wenn du z.B. SFML dafür nutzt hast du keinen Einluss darauf. Der einfachste Weg ist also: In den Shadern nur das nutzen was da steht, und im Code nur Dinge nutzen die hier aufgeführt sind:
http://www.opengl.org/sdk/docs/man4/@Rotation
Du hast in der Matrix 3 Vektoren, up, right, front. Du kannst um jeden Vektor um x Grad rotieren, so wie du es halt möchtest. Aber wie gesagt, das ist alles altes OpenGL, mach das lieber gleich mit Shadern.
http://www.arcsynthesis.org/gltut/
-
Okay alles klar!
Dann nochmal zur Rotation, habe noch schnell ein Bild in Paint gemalt
http://www.abload.de/img/glbvjsp.jpgLinks ist quasi das Ausgangsbild und rechts der neue Zustand. Das Problem ist, dass der Pfeil wie links auf dem Bild nicht von mir weg zeigt sondern nun auf mich! Allerdings müsste der Pfeil um 180° rotieren und wieder von mir weg/links zeigen.