Buchempfehlung
Visual Basic 6 Kochbuch
Visual Basic 6 Kochbuch
Viele praktische Tipps zum Programmieren mit Visual Basic 6, die sich oft auch auf FB übertragen lassen. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Tutorial

OpenGL und FreeBASIC - eine kleine Einführung - Teil 1

von MitgliedEastler_dartSeite 2 von 3

OpenGL Init

Wie bei den meisten anderen "Zusätzen", die man wahlweise zu FreeBasic hinzufügen kann, muss das Ganze erst mal gestartet werden.

Wir unterteilen unser Listing dabei gleich noch mit Info-Zeilen in verschiedene Rubriken, sodaß wir uns später im Listing besser zurecht finden.

Weil die DIMs als allererstes im Listing stehen sollten, tragen wir diese Rubrik hier schon mal ein. Für später brauchen wir natürlich auch Variablen, welche per DIM zu deklarierern sind. Wir wollen die Tastatur abfragen und vieles mehr. Dafür brauchen wir unter anderem die Variable Tastendruck als STRING. Darum tragen wir diese als erste DIM-Zeile mit ein.

'-------------------------
'DIMs
'-------------------------
DIM SHARED AS STRING Tastendruck

Als Nächstes müssen wir die sogenannten "Bi-Dateien" (Includes) in unser Listing aufnehmen, damit FreeBasic die ganzen Variablen und Befehle von OpenGL auch kennt.

'-------------------------
'Includes
'-------------------------
#include "fbgfx.bi"
#include once "GL/gl.bi"
#include once "GL/glu.bi"
'-------------------------
'Declarationen
'-------------------------

Achten Sie dabei darauf, dass diese Programmzeile ganz links im Listing steht, das Doppelkreuz (#) muss das erste Zeichen der Programmzeile sein.

Das war's schon. Durch das Einlesen dieser beiden Dateien "erlernt" FreeBasic die ganzen Befehle und Variablen von OpenGL.

Wie bei jedem anderen FreeBasic-Programm, bei dem wir mit Grafik arbeiten wollen, müssen wir ein Fenster öffnen, welches auch mit der programmierten Grafik umgehen kann. Hier ist das Besondere, dass wir FreeBasic dabei sagen müssen, dass dieses Fenster ausschließlich von OpenGL-Befehlen aus gesteuert wird. (Ja, Sie lesen richtig, ein Anzeigen mit FreeBasic-Befehlen wie z.B. Print, Line oder ähnlichem ist nicht möglich.)

'-------------------------
' das Fenster öffnen
'-------------------------
screen 19, 16, , 2

Wie man sieht, mit dem "gewohnten" Befehlsreferenzeintragscreen-Befehl von FreeBasic wird das gemacht. Die erste Zahl gibt die Auflösung an, wir wollen mit 800x600 Bildpunkten arbeiten, deshalb nehmen wir den Screen Typ 19. Mit der 16 dahinter sagen wir FreeBasic, dass wir in einer Farbtiefe von 16bit arbeiten wollen. Mehrere Bildschirmseiten brauchen wir nicht, also bleibt der 3.Parameter erst mal leer (2 Kommas). Die 2 ganz hinten ist das Wichtigste. Mit dieser 2 (ein sog. Flag) sagen wir FreeBasic, dass der Screen von OpenGL gesteuert wird.

Jetzt müssen wir OpenGL ein paar Anfangseinstellungen mitgeben, um das Ganze ins Laufen zu bringen. Mit den Bedeutungen der einzelnen Befehle wollen wir uns nicht lange aufhalten, eine kurze Erläuterung dahinter soll erst mal reichen:

'-------------------------
' Open-GL Init
'-------------------------
glViewport 0, 0, 800, 600                      ' den Current Viewport auf eine Ausgangsposition setzen
glMatrixMode GL_PROJECTION                     ' Den Matrix-Modus Projection wählen
glLoadIdentity                                 ' Diesen Modus auf Anfangswerte setzen
gluPerspective 45.0, 800.0/600.0, 0.1, 100.0   ' Grundeinstellungen des Anezeigefensters festlegen
glMatrixMode GL_MODELVIEW                      ' Auf den Matrix-Modus Modelview schalten
glLoadIdentity                                 ' und auch diesen auf Anfangswerte setzen
glClearColor 0.5, 0.5, 0.50, 0.0               ' Setze Farbe für löschen auf Mittelgrau
glClearDepth 1.0                               ' Depth-Buffer Löschen erlauben
glEnable GL_DEPTH_TEST                         ' den Tiefentest GL_DEPTH_TEST einschalten
glClear GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT  'Tiefen- und Farbpufferbits löschen

OpenGL läuft grundsätzlich und immer in einer Schleife, immer und immer wieder werden die OpenGL-Befehle durchlaufen, bis der Anwender per Tastendruck das Programm abbricht oder ein anderer Einfluss zum Programmende führt.

Also eröffnen wir eine Schleife mit BefehlsreferenzeintragDo...Loop, die durch das Drücken der Esc-Taste beendet werden kann, was dann zum Programmende führen soll. Für OpenGL muss gleich noch am Ende der Schleife der Befehl flip eingefügt werden.

   '---------------------------
'HAUPTTEIL
'---------------------------

DO UNTIL Tastendruck = CHR(27) :'die Schleife solange immer wiederholen, bis in der Variablen Tastendruck die Esc-Taste (chr(27) steht
   '---------------------------
   'ProgrammSchleife
   '---------------------------
   Tastendruck = INKEY   'Jeder Tastendruck wird sofort in die Variable Tastendruck gespeichert

   flip                  'liebes OpenGL, zeig alles, was in der Schleife für dich vornedran steht, auf Monitor an
   '---------------------------
   'Ende der Schleife
   '---------------------------
LOOP

Und am Ende dieser Schleife dann das Programmende

END

Wenn Sie das nun compilieren und die Exe ausführen, erhalten Sie das berühmte leere Fenster, Sie haben viele Programmzeilen erstellt, zu sehen ist jedoch nichts.

Aber das lässt sich nicht ändern, um mit OpenGL zu arbeiten, müssen einfach einige Dinge erst mal angegeben werden, damit OpenGL auf einer annehmbaren Grundeinstellung steht. Ohne das geht's nicht und nur diese Grundeinstellungszeilen hier alleine ergeben halt kein Anzeige, also ein leeres Fenster.

Zur Übersichtlichkeit hier noch einmal das komplette Listing, die Zusammenstellung aller oben aufgeführten notwendigen Programmzeilen:

'-------------------------
'DIMs
'-------------------------
DIM SHARED AS STRING Tastendruck

'-------------------------
'Includes
'-------------------------
#include "fbgfx.bi"
#include once "GL/gl.bi"
#include once "GL/glu.bi"

'-------------------------
'Declarationen
'-------------------------

'-------------------------
' das Fenster öffnen
'-------------------------
screen 19, 16, , 2

'-------------------------
' Open-GL Init
'-------------------------
glViewport 0, 0, 800, 600                      ' den Current Viewport auf eine Ausgangsposition setzen
glMatrixMode GL_PROJECTION                     ' Den Matrix-Modus Projection wählen
glLoadIdentity                                 ' Diesen Modus auf Anfangswerte setzen
gluPerspective 45.0, 800.0/600.0, 0.1, 100.0   ' Grundeinstellungen des Anezeigefensters festlegen
glMatrixMode GL_MODELVIEW                      ' Auf den Matrix-Modus Modelview schalten
glLoadIdentity                                 ' und auch diesen auf Anfangswerte setzen
glClearColor 0.5, 0.5, 0.50, 0.0               ' Setze Farbe für löschen auf Mittelgrau
glClearDepth 1.0                               ' Depth-Buffer Löschen erlauben
glEnable GL_DEPTH_TEST                         ' den Tiefentest GL_DEPTH_TEST einschalten
glClear GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT  'Tiefen- und Farbpufferbits löschen
'---------------------------
'HAUPTTEIL
'---------------------------

DO UNTIL Tastendruck = CHR(27) :'die Schleife solange immer wiederholen, bis in der Variablen Tastendruck die Esc-Taste (chr(27) steht
   '---------------------------
   'ProgrammSchleife
   '---------------------------
   Tastendruck = INKEY   'Jeder Tastendruck wird sofort in die Variable Tastendruck gespeichert

   flip                  'liebes OpenGL, zeig alles, was in der Schleife für dich vornedran steht, auf Monitor an
   '---------------------------
   'Ende der Schleife
   '---------------------------
LOOP

END

 

Gehe zu Seite Gehe zu Seite  1  2  3  
Zusätzliche Informationen und Funktionen
  • Das Tutorial wurde am 18.07.2008 von MitgliedEastler_dart angelegt.
  • Die aktuellste Version wurde am 05.08.2008 von MitgliedEastler_dart gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen