OpenGl Kamera für Anfänger
Übersicht

Boris1993Betreff: OpenGl Kamera für Anfänger |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo Liebe Community
Hier eine einfache OpenGl Kamera von mir in BMax geschrieben Dieser Code soll Anfängern mit BlitzMax und OpenGL helfen. Da ich selbst noch ein Anfänger bin sind auch Verbesserungsvorschläge erwünscht ![]() Code: [AUSKLAPPEN] Strict '-----Variablen----- Const b:Int = 800 'Breite des Fensters Const h:Int = 600 'Höhe des Fensters Global mxs:Float 'MausXGeschwindigkeit Global mys:Float 'MausYGeschwindigkeit '-----Initialisierung----- GLGraphics b, h 'OpenGL Grafikfenster glEnable GL_DEPTH_TEST 'Ermöglicht Tiefentest glMatrixMode GL_PROJECTION 'Wählt Projektionsmatrix glLoadIdentity() 'Setzt Projektionsmatrix zurück gluPerspective 45.0, b/h, 0.1, 1000 'Setzt Perspektive in der Matrix glMatrixMode GL_MODELVIEW 'Wählt Modellansicht Matrix glLoadIdentity() 'Setzt Modellansicht Matrix zurück HideMouse() 'Versteckt den Mauszeiger '-----Types----- Type KameraT Field x:Float 'X-Koordinate der Kamera Field y:Float 'Y-Koordinate der Kamera Field z:Float 'Z-Koordinate der Kamera Field pitch:Float 'Drehwinkel der Kamera auf der X-Achse Field yaw:Float 'Drehwinkel der Kamera auf der Y-Achse Field roll:Float 'Drehwinkel der Kamera auf der Z-Achse 'Funktion zur Steuerung der Kamera Method Steuerung() yaw:+mxs/10 'Mausbewegung wird auf den Kamerawinkel übertragen If yaw< 0 yaw:+360 'Zurücksetzen des Wertes 0 Grad unterschritten wird If yaw >360 yaw:-360 'Zurücksetzen des Wertes wenn 360 Grad überschritten wird pitch:+mys/10 If pitch< 0 pitch:+360 If pitch >360 pitch:-360 If KeyDown(KEY_W) Then x:+Cos(yaw+90)/6 'Berechnung der Bewegungsrichtung anhand des Yaw Winkels z:+Sin(yaw+90)/6 End If If KeyDown(KEY_S) Then x:-Cos(yaw+90)/6 z:-Sin(yaw+90)/6 End If If KeyDown(KEY_D) Then x:-Cos(yaw)/6 z:-Sin(yaw)/6 EndIf If KeyDown(KEY_A) Then x:+Cos(yaw)/6 z:+Sin(yaw)/6 End If EndMethod 'Funktion zum updaten der Kameramatrix Method update() glloadidentity glrotatef cam.pitch, 1.0, 0.0, 0.0 'Rotation wird auf die Perspektivmatrix übertragen glrotatef cam.yaw, 0.0, 1.0, 0.0 glrotatef cam.roll, 0.0, 0.0, 1.0 gltranslatef cam.x, cam.y, cam.z 'Bewegung wird auf die Perspektivmatrix übertragen End Method End Type Global cam:KameraT = New KameraT '-----Hauptschleife----- While Not KeyHit(KEY_ESCAPE) glClear GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT 'Löscht Farb- und Tiefenbuffer cam.Steuerung() cam.update() 'Würfel wird erstellt und um 10 Einheiten vor die Kamera verschoben gltranslatef 0, 0,-10 glBegin GL_QUADS 'Vorderseite glColor3f 1.0, 0.0, 0.0 'Farbe des Quads wird Festgelegt glVertex3f -1.0, 1.0, 1.0 'Quad Vertices werden erstellt glVertex3f 1.0, 1.0, 1.0 glVertex3f 1.0,-1.0, 1.0 glVertex3f -1.0,-1.0, 1.0 'Rückseite glColor3f 0.0, 1.0, 0.0 glVertex3f -1.0, 1.0,-1.0 glVertex3f 1.0, 1.0,-1.0 glVertex3f 1.0,-1.0,-1.0 glVertex3f -1.0,-1.0,-1.0 'Oberseite glColor3f 0.0, 0.0, 1.0 glVertex3f -1.0, 1.0,-1.0 glVertex3f 1.0, 1.0,-1.0 glVertex3f 1.0, 1.0, 1.0 glVertex3f -1.0, 1.0, 1.0 'Unterseite glColor3f 1.0, 1.0, 0.0 glVertex3f -1.0,-1.0,-1.0 glVertex3f 1.0,-1.0,-1.0 glVertex3f 1.0,-1.0, 1.0 glVertex3f -1.0,-1.0, 1.0 'Rechte Seite glColor3f 1.0, 0.0, 1.0 glVertex3f 1.0, 1.0,-1.0 glVertex3f 1.0, 1.0, 1.0 glVertex3f 1.0,-1.0, 1.0 glVertex3f 1.0,-1.0,-1.0 'Linke Seite glColor3f 0.0, 1.0, 1.0 glVertex3f -1.0, 1.0,-1.0 glVertex3f -1.0, 1.0, 1.0 glVertex3f -1.0,-1.0, 1.0 glVertex3f -1.0,-1.0,-1.0 glEnd 'Mausgeschwindigkeit der x- und y-Achse wird an Variablen übergeben 'und der Mauszeiger in die Mitte des Bildschirms gerückt mxs = MouseXSpeed() mys = MouseYSpeed() MoveMouse 400,300 MouseXSpeed() 'damit durch Movemouse der Wert nicht verschluckt wird MouseYSpeed() 'Textausgabe im Fenster der Die Kameraposition und Drehung anzeigt glcolor3f 1.0, 1.0, 1.0 GLDrawText "X: "+cam.x+", Y: "+cam.y+", Z: "+cam.z, 20, 20 GLDrawText "Pitch: "+cam.pitch+", Yaw: "+cam.yaw+", Roll: "+cam.roll, 20, 36 GLDrawText "Steuerung mit Maus und WASD", 20, 68 Flip Wend End LG und viel Spaß mit dem Code ![]() |
||
Shaman |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
sieht für mich sehr ordentlich und in Ordnung aus.
Vielleicht kannst du noch Methoden hinzufügen, mit denen du die Kamera direkt drehen/bewegen kannst. |
||
Boris1993 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
was meinst du mit direkt drehen/bewegen shaman? | ||
Shaman |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
In der Methode "Steuerung" bewegst/drehst du die Kamera durch direkten Zugriff auf die Variablen.
Eine Möglichkeit währe es, nicht auf die Variablen direkt zuzugreifen, sondern über Methoden, wie rotate(pitch, yaw, roll), move(x,y,z), ... . Damit könnte man die Kamera dann z.B. auch per Skript steuern. Dadurch könnte es ein guter Ausgangspunkt für OpenGL Spiele/Engines werden, die sich selbst die von grund auf bauen wollen |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group