OpenGL.org 3Dsource.de: Infos rund um 3D-Computergrafik, OpenGL und VRML
space Telefon-Tarife space VDI - Arbeitskreis Fahrzeugtechnik space Beschallungsanlagen und Elektroakustik space Heise-News space

7 Zugriff auf das Window-System und Eingabegeräte

7.010 Wie kann ich die Breite und Höhe des aktiven Fensters bzw. die maximale Auflösung des Bildschirms ermitteln ?

Um die Fenstergrösse unter Win32 zu ermitteln, kann folgender Code genutzt werden:

    RECT rect;
    HWND hwnd;
    GetClientRect(hwnd, &rect);
    /* rect.top und rect.left sind immer 0, 0.
       Das heisst, die Breite bzw. Höhe findet sich in rect.right und rect.bottom. */

Die Bildschirmgrösse in Pixel:

    int width  = GetSystemMetrics(SM_CXSCREEN);
    int height = GetSystemMetrics(SM_CYSCREEN);

bzw. mit GLUT:

int screenWidth, screenHeight, windowWidth, windowHeight;

    screenWidth  = glutGet(GLUT_SCREEN_WIDTH);
    screenHeight = glutGet(GLUT_SCREEN_HEIGHT);
    windowWidth  = glutGet(GLUT_WINDOW_WIDTH);
    windowHeight = glutGet(GLUT_WINDOW_HEIGHT);

7.020 Welche Benutzeroberfläche sollte ich nutzen ?

Die meisten Benutzeroberflächen wie z.B. Motif werden nur unter wenigen Betriebssystemen unterstützt. GLUT ist für verschiedenste Plattformen verfügbar und kann über hierarchische Menüs mit dem Anwender interagieren.

GLUI setzt auf den Funktionen von GLUT auf und ergänzt diese um Knöpfe, Checkboxen, Radio Buttons und einiges mehr. Es ist ebenfalls plattformunabhängig.

Eine weitere Option stellt FLTK dar, hier kann man Oberflächen sogar grafisch zusammenstellen. Es ist ebenfalls auf mehreren Plattformen verfügbar.

7.030 Wie kann ich mehrere Monitore mit OpenGL nutzen ?

Viele OpenGL-Implementationen unterstützen den gleichzeitigen Betrieb von mehr als einem Monitor. Werden die Monitore als Clone genutzt (d.h. zeigen immer das gleiche an), gibt es im Regelfall keine Besonderheiten zu beachten. Im folgenden ist beim Betrieb mehrerer Monitore im Regelfall die übergreifende Darstellung gemeint, d.h. wenn jeder Monitor nur einen bestimmten Bereich des Desktops anzeigt (Multi-Head-Betrieb).
Folgende Varianten sind denkbar:

  • Ein Display ist hardwarebeschleunigt, die anderen laufen im Software-Modus.
  • Alle Displays sind hardwarebeschleunigt, solange kein OpenGL-Fenster die Bildschirmgrenzen überragt.
  • Alle Displays sind hardwarebeschleunigt, auch bei Desktop-Darstellung über mehrere Displays.
  • Alle bisherigen Varianten mit zusätzlichem Stereo-Support.
  • Alle bisherigen Varianten auch für Grafikkarten unterschiedlicher Hersteller.

Einige Macintosh-Konfigurationen, wie z.B. die ATI Rage 128 Mobility, erlauben zwei Displays. Die Harwarebeschleunigung wird aber deaktiviert, wenn das OpenGL-Fenster auf beiden Displays dargestellt wird. Liegt das Fenster vollständig in einem der beiden Displays, ist die volle 3D-Beschleunigung verfügbar.

Microsoft's Betriebssysteme erlauben 2 OpenGL-Geräte, allerdings ist nur das erste Gerät hardwarebeschleunigt. Um diese Einschränkung zu umgehen, haben verschiedene Hersteller eigene Lösungen für den Mehrfach-Monitor-Betrieb entwickelt, die dann auch auf beiden Displays eine 3D-Beschleunigung bietet.

3Dlabs unterstützt den Multi-Head-Betrieb für die GVX1, GVX210 und GVX420. Die beiden letztgenannten Karten sind AGP-Karten für den Einzelbetrieb mit zwei Monitor-Ausgängen. Dagegen ist die GVX1-Karte für eine mehrfache Installation als AGP- oder PCI-Version geeignet und hat nur einen Monitor-Ausgang, so dass für jeden Monitor eine eigene Karte benötigt wird.

HP'sVisualize Center und Visualize Workgroup erlauben den Multi-Head-Betrieb unter HP-UX (HP's Unix). Das Visualize Center kann einen grossen Desktop nahtlos über mehrere Displays darstellen. Der Stereo-Modus wird auch unterstützt, so dass eine nahezu perfekte räumliche Darstellung möglich ist.

Matrox unterstützt unter Linux und MS-Systemen mit einen Dual-Head-Betrieb, digitale Flachbildschirme und TV-Ausgang mit der G400, Dual-Head-Betrieb mit der G450 und den Betrieb mehrerer Monitore mit der G200. Der MS-Treiber unterstützt auch den Dual-Head-Betrieb.

NVIDIA's Quadro2 MXR und GeForce2 GTS (und bestimmte Geforce 3/4-Modelle, aber dazu sagt die originale FAQ noch nichts) haben 2 Monitor-Ausgänge. Unter MS-Systemen lassen sich diese über TwinView (ein Modul des Treibers) konfigurieren. Im vertikalen Modus wird der Desktop über beide Monitore dargestellt, so dass ein Fenster im Vollbild-Modus automatisch auf beide Monitore aufgeteilt wird. Für Linux wird die 3D-Beschleunigung nur im Single-Betrieb unterstützt, aktuellere Informationen hierzu sollten bei NVIDIA zu finden sein.

Sun's OpenGL kann auf SPARC-Maschinen unter Solaris 8 und mit OpenGL 1.2.1 die Ausgabe auch auf mehreren Monitoren beschleunigen. Die aktuelle Version der Sun-OpenGL gibt es hier.

Seite durchsuchen nach:

Fragen oder Ideen an:
Thomas.Kern@3Dsource.de
Linux-Counter
(C) Thomas Kern