sources:


website:
more info here


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

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