3Dsource.de: Infos rund um 3D-Computergrafik, OpenGL und VRML | |
Telefon-Tarife VDI - Arbeitskreis Fahrzeugtechnik Beschallungsanlagen und Elektroakustik Heise-News |
Bibliotheken, Tools, TippsIch habe hier einige Lösungen aufgelistet, wie man OpenGL unter verschiedenen Systemen oder Compilern zum laufen bekommt. Beispielprogramme findet ihr auf der (nächsten) Seite mit den Quelltexten. Grundsätzliche Techniken werden (auf englisch) im Red Book erläutert, da kann ich sowieso nicht mithalten... Darüber hinaus hat Paul Martz eine offizielle OpenGL FAQ zusammengestellt, die ihr auf meinen Seiten auch in einer deutschen Version findet.
Erste Schritte mit OpenGL und MS Windows:geeignete IDE's und CompilerFür meine OpenGL-Programme habe ich bisher von Borland den Builder(1.0) und BC++ 5.x ausprobiert. Von MS den VC++6.0. Bei den freien Compilern verfüge ich zwar über keine Erfahrungen, aber es gibt ja auch noch andere Seiten im Netz... z.B. die offizielle FAQ. Nach langem Hin und Her bevorzuge ich jetzt doch VC++, trotz anfänglicher Skepsis ;-)
Besonderheiten und typische FehlermeldungenMan braucht immer die passenden *.libs (VC++ und Borland libs sind verschieden !). Also immer die Dateien opengl32.lib, glu32.lib und bei Bedarf glut32.lib hinzufügen. (sonst droht ein undefined __gl* etc.). Ausserdem muss die Datei "windows.h" vor den OpenGL Headern per #include eingefügt werden. Sonst erhält man schnell ein undefined WINGDIAPI. #ifdef _WIN32 #include <windows.h> #endif #include <GL/gl.h> #include <GL/glu.h> #include <GL/glut.h> Dass man auch mit reinen Win32-Befehlen eine brauchbare Oberfläche zusammen bekommt, habe ich mal mit VCC ausprobiert. Meinen -unvollständigen, aber lauffähigen- Versuch will ich euch auch nicht vorenthalten (35 KB). Bevor man aber versucht, Fenster mit den Basisfunktionen von Win32 zu erstellen, oder die überdimensionierte Lösung MFC nutzt, würde ich in jedem Fall erstmal mit GLUT anfangen. Schon alleine wegen der Beispielprogramme... Update der OpenGL VersionUm bei Borland von OpenGL1.0 auf OpenGL1.1 zu wechseln, müssen nur die entsprechenden *.dll, *.lib, *.h ausgetauscht werden. Das sollte bei den hier abgelegten Dateien der Fall sein. Diese müssen nur in die Verzeichnisse (dll - windows/system, lib - BC5/lib, h - BC5/include/GL) kopiert werden. OpenGL mit dem Borland Builder:Da das Setup von OpenGL ein paar Zeilen mehr einnimmt, spar' ich mir hier mal die Ausführungen. Ein einfaches Beispielprojekt und die benötigte Bibliotheken habe ich ins Netz gestellt. GLUT mit Borland C++ 5.x:Da GLUT uns den ganzen Fensterkram abnimmt, kann ich mich hier aufs wesentliche konzentrieren. An der Uni hatten wir allerdings nur die englische Version vom BC... 1. Borland starten, neues Projekt anlegen, 2. Target Type = App[.exe], 3. Platform = Win32, 4. Target Model = Console, 5. Frameworks = Class Lib, Zum Projekt muss noch die Datei glut32.lib hinzugefügt werden. 6. Dein Quelltext: ... Mit diesen Einstellungen kann man eigentlich jedes GLUT-Programm verwenden. GLUT mit dem Borland Builder:Anfangs war ich überzeugt, dass das eigentlich gar nicht geht... Schliesslich öffnet der BCB ja automatisch ein Fenster - und GLUT dann das zweite. Naja, war wohl ein Trugschluss. ;-( Irgendwo unter Optionen kann man zwischen GUI und Textmodus wählen. 1. Text == Konsole ist dabei genau richtig, 2. dann lässt man nur die Datei mit der main-Funktion im Projekt, 3. jetzt löscht man alle Zeilen ausser #include <vcl.h>, 4. nun das Eingeben/Kopieren der normalen GLUT-Beispielprogramme, 5. und die glut32.lib zum Projekt hinzufügen. Die ersten Zeilen im Programm könnten jetzt etwa so aussehen: #include <vcl.h> #pragma hdrstop USELIB("\BCB_Verzeichnis\Lib\glut32.lib"); #include <GL/glut.h> // gl.h und glu.h werden hierdurch auch eingefügt Eigentlich ja recht einfach, oder ? Auf das euch der BCB nicht zu häufig abstürzt... Ein Demo-Projekt gibts natürlich auch. GLUT mit MS Visual C++:Hier nur die wesentlichen Schritte: 1. VC++ starten, neues Win32-Konsolen-Projekt, 2. Projekt->Einstellungen->Linker->Module: opengl32.lib glu32.lib glut32.lib hinzufügen. Der Rest wie gehabt... Beispielprogramme kommen mit der GLUT-Distribution. OpenGL unter Unix:Langsam, langsam, ich sollte den Mund hier mal nicht zu voll nehmen... Meine Erfahrungen mit den verschiedenen uNixen beschränkt sich nämlich nur auf Linux, IRIX, HP-UX und SINIX. Und mit OpenGL hatte ich nur auf den ersten beiden was am Hut. ;-) EinstiegZum Übersetzen hat sich bei mir eine Sammlung entsprechender Makefiles (in jedem Verzeichnis) und eine systemabhängige "rules"-Datei bewährt. Hat mir jemand an der Uni gezeigt. Bei mir heisst diese Datei "make.rules" und wird als Softlink auf die entsprechende Datei (make.rules.linux, make.rules.sgi) z.B. mit "ln -s make.rules.linux make.rules" gesetzt. In diesem (41 KB) Archiv ist zwar die Motif-Version enthalten, für das Prinzip der Makefiles reicht das aber. Ansonsten muss man im Makefile folgende Sektionen/Anweisungen definieren: - include make.rules (die angesprochene "rules"-Datei), - STUFF (welche Unterverzeichnisse werden genutzt), - INCPATH (wo stehen die benötigten Header ?), - OBJS (welche *.o Dateien müssen hinzugelinkt werden ?), - MYLIBS (falls in den Unterverzeichnissen eigene Bibliotheken erzeugt wurden), - LIBS (die benötigten Systembibliotheken), - all:, depend: etc. (was soll das Makefile machen ?), In der Regel heissen die OpenGL-Bibliotheken libGL.so und libGLU.so und sind in einem Standard-Pfad gespeichert. Gelinkt werden diese durch das Kommando "-lGL -lGLU". Am besten, ich nutze gleich mal Linux als Beispiel: LinuxDie make.rules.linux legt die noch unbekannten Grössen fest. - DEPEND (was wird für ein "make depend" - selbständiges Suchen der benötigten Dateien - gebraucht ?), - CC, LD (welcher Compiler/Linker soll genutzt werden ?, - CPUFLAGS, CXXOPTS, LDFLAGS (Optionen für Compiler und Linker), - XINCS (Include-Pfad für die X-Window-Bibliotheken), - XLIBS, GLLIBS, MLIBS (welche Bibliotheken werden gebraucht ?), - .SUFFIXES: (wie sollen bestimmte Dateiendungen behandelt werden ?), Unter Linux habe ich eine zeitlang eine Voodoo2 genutzt, jetzt steht mir allerdings nur noch eine Softwarelösung zur Verfügung... Notebook machts möglich ;-) Die benötigten Dateien habe ich im Verzeichnis des X-Window-Systems untergebracht (*.so => /usr/X11R6/lib, *.h => /usr/X11R6/include/GL). Ausserdem habe ich die Softlinks libGL.so, libGLU.so zu den entsprechenden Mesa-Dateien hergestellt. Seit Mesa3.1-beta3 sind diese bereits dabei ;-)). Für die ersten Schritte ist es wirklich sinnvoll, GLUT zu nutzen. Ich habe zwar auch mit Motif (einem sogenannten Widget-Set für den X-Server unter Unix) gearbeitet, allerdings ist (und gilt) diese API als recht träge und unhandlich. Eine andere, ebenfalls plattformunabhängige Lösung stellt FLTK dar, hier kann man Oberflächen sogar mit der Maus zusammenstellen. OpenGL mit Motif (UNIX):Während meines Studiums hatte ich das Vergnügen, unser Simulationsprogramm ORSIS um eine 3D-Visualisierung zu ergänzen. Dummerweise war die vorhandene Oberfläche mit Motif bereits ziemlich umfangreich... Also musste OpenGL in einem Motif-Fenster unter Linux und IRIX (SGI-Workstation) funktionieren. Andererseits wollte ich den Quelltext auch zu Hause ausprobieren -mit Linux und mit Win32-. Ich habe mein Programm dann so aufgebaut, dass die Oberfläche strikt vom Rest getrennt bleibt und Motif genauso wie der Borland Builder für die Knöpfe etc. genutzt werden kann. Genug Gelaber; den Quelltext findet ihr hier (41 KB). spezielles OpenGL-Fenster für Motif auf SGI's IRIX-Systemen:Ich habe unter anderem auch mit Motif auf Linux- und IRIX-Systemen gearbeitet. Dabei gab's ein paar Probleme auf der älteren SGI-Maschine mit der normalen DrawingArea. Irgendwo habe ich dann etwas über ein spezielles OpenGL-Widget gelesen, das in der libGLw.a enthalten sein sollte. Bloss, die Datei gab's auf der Kiste nicht !! Naja, zum Glück gibt es ja freie Software mit Source... Ich bin dann bei Mesa fündig geworden. Den extrahierten Quellcode mit eigenem Makefile findet ihr hier. GLUT für MS Win32 (dll, lib, h)Die Dateien aus der Version 3.7beta findet ihr hier (69 KB). OpenGL für MS Win32Die dlls von MS (veraltet !) findet ihr hier (350 KB). Falls deine Grafikkarte mit OpenGL-Treibern kommt oder dein System neuer als Windows95B ist, brauchst Du die aber nicht (Stand 03/2003: jedes halbwegs aktuelle System installiert die OpenGL-dlls von alleine). Ansonsten läuft OpenGL auch nur im Software-Modus (was z.B. mit einer alten 2D Hercules Dynamite gar nicht mal so langsam war... ;-) Die dlls von SGI findet ihr hier (562 KB). Sie unterscheiden sich von der MS-Version im Dateinamen (opengl.dll und glu.dll anstatt opengl32.dll, glu32.dll), sind für alle MS Systeme ab Win95, NT4.0 geeignet, nutzen automatisch die vorhandenen *32.dlls (und damit Hardware-Beschleunigung) und werden nur selten benötigt... Mein Tip: falls ihr mit den reinen Win32-Funktionen Fenster programmieren wollt, ladet am besten gleich das komplette SDK (Software Development Kit, Beispiele, Hilfedateien) herunter. Ihr findet es hier (ca. 2 MB). OpenGL für BorlandFast alle *.lib, die man im Netz findet, sind für MS VCC und funktionieren leider nicht mit den Borland Compilern. Zur Lösung dieses Problems kann man zum Beispiel die benötigten libs aus den vorhandenen dlls erzeugen (BC/bin/implib.exe). Allerdings klappt das nicht immer... Ich habe deshalb mal meine Dateien (opengl32.lib, glu32.lib, gl.h, glu.h) hier hinterlegt (33 KB). OpenGL für MS Visual C++ 6.0Falls ihr im Verzeichnis VCC/lib bzw. VCC/include/GL die Dateien (opengl32.lib, glu32.lib, gl.h, glu.h) nicht findet: Hier sind sie (29 KB). OpenGL für LinuxSorry, hier findet ihr nix zum runterladen... Dafür gibt's nämlich viel bessere Seiten :-) Stand 03/2003: Die meisten Distributionen installieren alles für OpenGL automatisch. Die meisten Grafikkarten laufen mit Mesa und DRI hardwarebeschleunigt, nur NVidia nutzt eigene Dateien dafür. OpenGL-Motif DrawingAreaIm Mesa-Paket ist auch ein spezielles Fenster für Motif enthalten. Den extrahierten Quellcode mit eigenem Makefile findet ihr hier. |
|
---|---|
Fragen oder Ideen an: Thomas.Kern@3Dsource.de |
|
(C) Thomas Kern |