sources:
cgapplication.cpp (3.6k)
cgapplication.h (4.1k)
cgmidpoint.cpp (4.0k)
cgmidpoint.h (1024 bytes)
cgraster.cpp (2.2k)
cgraster.h (713 bytes)


website:
more info here


screenshot:
studies/grafik/Computergrafik-Code3/cgraster.cpp
download file

  1 // Computergraphik I
  2 // Prof. Dr. Juergen Doellner
  3 // Sommersemester 2001
  4 //
  5 // Rahmenprogramm fuer Aufgabenzettel 3
  6
  7 // Stephan Brumme, 702544
  8 // last changes: May 12, 2001
  9
 10 #include "cgraster.h"
 11 #include <memory.h>
 12 #include "gl/gl.h"
 13
 14
 15 CGRaster::CGRaster(int width, int height) {
 16     // speichern von width und height
 17     // in Objektvariablen
 18
 19     // überprüfen, ob Ausmaße vernünftig sind
 20     if (width  <= 0 || width  > MAXWIDTH)
 21         width  = MAXWIDTH;
 22     if (height <= 0 || height > MAXHEIGHT)
 23         height = MAXHEIGHT;
 24
 25     m_nWidth = width;
 26     m_nHeight = height;
 27
 28     // anlegen des bool-Arrays
 29     m_arBuffer = new bool[m_nWidth*m_nHeight];
 30    
 31     // loeschen des Arrays
 32     clear();
 33 }
 34
 35
 36 CGRaster::~CGRaster()
 37     // Rasterspeicher freigeben
 38     delete [] m_arBuffer;
 39 }
 40
 41
 42 int CGRaster::width() const {   
 43     return m_nWidth;
 44 }
 45
 46
 47 int CGRaster::height() const {   
 48     return m_nHeight;
 49 }
 50
 51
 52 void CGRaster::clear() {
 53     // setzten aller Werte des bool-Arrays auf false
 54     memset(m_arBuffer, false, sizeof(bool)*m_nWidth*m_nHeight);
 55 }
 56
 57
 58 bool CGRaster::getPixel(int x, int y) const {
 59     // liegen Koordinaten innerhalb des Rasters ?
 60     if (x<0 || x>=m_nWidth ||
 61         y<0 || y>=m_nHeight)

 62         return false;
 63
 64     // Punkt zurückgeben
 65     return m_arBuffer[x+y*m_nWidth];
 66 }
 67
 68
 69 void CGRaster::setPixel(int x, int y) {   
 70     // liegen Koordinaten innerhalb des Rasters ?
 71     if (x<0 || x>=m_nWidth ||
 72         y<0 || y>=m_nHeight)

 73         return;
 74
 75     // Punkt setzen
 76     m_arBuffer[x+y*m_nWidth] = true;
 77 }
 78
 79
 80 void CGRaster::draw() const {
 81     // zeichnen aller Pixel, die gesetzt sind
 82
 83     // Umgebung sichern
 84     glPushAttrib(GL_CURRENT_BIT);
 85
 86     // schwarz
 87     glColor3f(0.0, 0.0, 0.0);
 88
 89     // alle Punkte des Rasters durchlaufen
 90     int x,y;
 91     for (x=0; x<m_nWidth; x++)
 92         for (y=0; y<m_nHeight; y++)
 93             // ggf. Rechteck mit Seitenlänge 1 zeichnen, im Zentrum liegt (x,y)
 94             if (getPixel(x,y))
 95                 glRectf(x-0.5, y-0.5, x+0.5, y+0.5);
 96
 97
 98     // zeichnen der Raster-Linien
 99     glColor3f(0.7, 0.7, 0.7);
100     glBegin(GL_LINES);
101     // vertikal
102     for (x=0; x<m_nWidth; x++)
103     {
104         glVertex2f(x+0.5, 0);
105         glVertex2f(x+0.5, m_nWidth);
106     }
107
108     // horizontal
109     for (y=0; y<m_nHeight; y++)
110     {
111         glVertex2f(0, y+0.5);
112         glVertex2f(m_nHeight, y+0.5);
113     }
114     glEnd();
115
116     glPopMatrix();
117 }
118