sources:
attribute.cpp (1.1k)
attribute.h (1.5k)
cgapplication.cpp (4.1k)
cgapplication.h (4.8k)
cgrobot.cpp (7.9k)
cgrobot.h (716 bytes)
node.cpp (2.4k)
node.h (2.3k)
shape.cpp (3.2k)
shape.h (966 bytes)
transformation.cpp (2.9k)
transformation.h (2.4k)
vector.cpp (1.4k)
vector.h (5.3k)


website:
more info here


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

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