sources:


website:
more info here


screenshot:
studies/grafik/Computergrafik-Code4/Aufgabe9/cgapplication.h
download file

  1 // Computergraphik I
  2 // Prof. Dr. Juergen Doellner
  3 // Sommersemester 2001
  4 //
  5 // Rahmenprogramm fuer Aufgabenzettel 3
  6
  7 #ifndef CG_APPLICATION_H
  8 #define CG_APPLICATION_H
  9
 10 #include <GL/glut.h>
 11
 12 // einige haeufig verwendete Header-Dateien
 13 #include <assert.h>
 14 #include <iostream.h>
 15 #include <math.h>
 16 #include <stdlib.h>
 17
 18 class CGApplication {
 19 public:
 20
 21     // Die Klasse "CGApplication" stellt ein Rahmenprogramm bereit,
 22     // mit dem sie ihre Aufgaben loesen koennen. Dazu muessen sie
 23     // eine Klasse hiervon ableiten, und eine oder mehrere der
 24     // weiter unten deklarierten on*()-Methoden ueberschreiben.
 25     // Diese Klasse ist ein sogenanntes "Singleton", d.h.: Es kann
 26     // immer nur eine einzige Instanz von dieser (oder einer
 27     // abgeleiteten) Klasse erzeugt werden!
 28     CGApplication();
 29     virtual ~CGApplication();
 30
 31     // Definiere die moeglichen Buffer, die von OpenGL angefordert
 32     // werden koennen:
 33     enum Buffer { ColorBuffer = 1, DoubleBuffer = 2 };
 34
 35     // Startet die Anwendung und muss im Hauptprogramm aufgerufen werden.
 36     // buffers: fordere diese Buffer von OpenGL an
 37     void start(int argc, char* argv[],
 38                const char* windowTitle = "CGApplication",
 39                unsigned int buffers = ColorBuffer | DoubleBuffer,
 40                unsigned long windowWidth = 400,
 41                unsigned long windowHeight = 400)
;
 42
 43     // Diese Methode wird nur einmal beim Start der Anwendung aufgerufen
 44     // und dient zur Initialisierung von OpenGL (hier kann z.B. die
 45     // Hintergrundfarbe fuer das Anwendungsfenster definiert werden). Sie
 46     // kann von einer abgeleiteten Klasse ueberschrieben werden.
 47     virtual void onInit();
 48
 49     // Jedesmal wenn der Fensterinhalt neu gezeichnet werden muss,
 50     // wird diese Methode aufgerufen. Sie muss von einer abgeleiteten
 51     // Klasse ueberschrieben werden!
 52     virtual void onDraw() = 0;
 53
 54     // Jedesmal wenn sich die Fenstergroesse geaendert hat, wird diese
 55     // Methode aufgerufen (die Methode onDraw() wird im Anschluss
 56     // automatisch aufgerufen). Sie muss von einer abgeleiteten Klasse
 57     // ueberschrieben werden!
 58     virtual void onSize(unsigned int newWidth, unsigned int newHeight) = 0;
 59
 60     // Spezifiziert die beiden Konstanten "LeftMouseButton" und
 61     // "RightMouseButton".
 62     enum MouseButton { LeftMouseButton, RightMouseButton };
 63
 64     // Spezifiziert die beiden Konstanten "MouseButtonDown" und
 65     // "MouseButtonUp".
 66     enum MouseButtonEvent { MouseButtonDown, MouseButtonUp };
 67
 68     // Jedesmal wenn eine Maustaste im Fenster gedrueckt wird, wird diese
 69     // Methode mit der entsprechenden Taste ("LeftMouseButton" oder
 70     // "RightMouseButton") und den zugehoerigen Koordinaten (x und y)
 71     // aufgerufen. Die Koordinaten werden als Pixel uebergeben, wobei der
 72     // Koordinaten-Ursprung die linke untere Fensterecke ist. Diese
 73     // Methode kann von einer abgeleiteten Klasse ueberschrieben werden.
 74     virtual void onButton(MouseButton button, MouseButtonEvent event,
 75                           int x, int y)
;
 76
 77     // Jedesmal wenn die Maus mit gedrueckter Maustaste ueber das Fenster
 78     // bewegt wird, wird diese Methode mit den entsprechenden Koordinaten
 79     // aufgerufen (siehe auch Methode onButton()). Diese Methode kann von
 80     // einer abgeleiteten Klasse ueberschrieben werden.
 81     virtual void onMove(MouseButton button, int x, int y);
 82
 83     // Jedesmal wenn eine Taste gedrueckt wird, wird diese Methode
 84     // aufgerufen.
 85     virtual void onKey(unsigned char key);
 86
 87     // Diese Methode sollte nach Beendigung aller Zeichenoperationen fuer
 88     // ein Bild (normaler Weise am Ende der Methode onDraw()) aufgerufen
 89     // werden, um den Front- mit dem Back-Buffer zu tauschen! Wird dieser
 90     // Aufruf ausgelassen, so werden die Zeichenoperationen nicht sichtbar!!!
 91     void swapBuffers();
 92
 93 private:
 94     // Verbiete den Copy-Konstruktor und den Zuweisungsoperator, da
 95     // diese Klasse ein Singleton ist und somit nicht kopiert werden
 96     // darf!
 97     CGApplication(const CGApplication&);
 98     CGApplication& operator=(const CGApplication&);
 99 };
100
101 #endif // CG_APPLICATION_H
102