sources:


website:
more info here


screenshot:
studies/grafik2/Computergrafik-Code3/Aufgabe8/cgapplication.h
download file

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