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