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/shape.cpp
download file

  1 // Computergraphik I
  2 // Prof. Dr. Juergen Doellner
  3 // Sommersemester 2001
  4 //
  5 // Rahmenprogramm fuer Aufgabenzettel 8
  6
  7 #include "shape.h"
  8
  9 #include <iostream.h>
 10 #include <GL/glut.h>
 11
 12 //
 13 // Hilfsfunktionen
 14 //
 15
 16 static inline double min(double a, double b) {
 17     return((a < b) ? a : b);
 18 }
 19
 20 static inline double max(double a, double b) {
 21     return((a > b) ? a : b);
 22 }
 23
 24 // Berechnet die Normale zum Dreieck. Die Dreieckseckpunkte muessen
 25 // dazu im Gegenuhrzeigersinn angegeben werden.
 26 static inline Vector normal(const Vector& p0, const Vector& p1, const Vector& p2) {
 27     // Verwende die ueberladenen Operatoren von Vector
 28     return((p1 - p0) * (p0 - p2));
 29 }
 30
 31 //
 32 // Triangle
 33 //
 34
 35 Triangle::Triangle(const Vector& p0, const Vector& p1, const Vector& p2) {
 36     points_[0] = p0;
 37     points_[1] = p1;
 38     points_[2] = p2;
 39 }
 40
 41 void Triangle::render() {
 42     glBegin(GL_TRIANGLES);
 43     glNormal3dv(normal(points_[0], points_[1], points_[2]).rep());
 44     glVertex3dv(points_[0].rep());
 45     glVertex3dv(points_[1].rep());
 46     glVertex3dv(points_[2].rep());
 47     glEnd();
 48 }
 49
 50 //
 51 // Box
 52 //
 53
 54 Box::Box(const Vector& llf, const Vector& urb) {
 55     lowerLeftFront_ = Vector(min(llf[0], urb[0]),
 56                               min(llf[1], urb[1]),
 57                               min(llf[2], urb[2]))
;
 58
 59     upperRightBack_ = Vector(max(llf[0], urb[0]),
 60                               max(llf[1], urb[1]),
 61                               max(llf[2], urb[2]))
;
 62 }
 63
 64 void Box::render() {
 65     // damit das Tippen leichter fällt ...
 66 #define l lowerLeftFront_
 67 #define r upperRightBack_
 68
 69     // oben
 70     Triangle oben1(Vector(l[0], r[1], l[2]),
 71                    Vector(r[0], r[1], l[2]),
 72                    Vector(r[0], r[1], r[2]))
;
 73     Triangle oben2(Vector(l[0], r[1], l[2]),
 74                    Vector(r[0], r[1], r[2]),
 75                    Vector(l[0], r[1], r[2]))
;
 76     oben1.render();
 77     oben2.render();
 78
 79     // unten
 80     Triangle unten1(Vector(l[0], l[1], l[2]),
 81                     Vector(r[0], l[1], l[2]),
 82                     Vector(r[0], l[1], r[2]))
;
 83     Triangle unten2(Vector(l[0], l[1], l[2]),
 84                     Vector(r[0], l[1], r[2]),
 85                     Vector(l[0], l[1], r[2]))
;
 86     unten1.render();
 87     unten2.render();
 88
 89     // hinten
 90     Triangle hinten1(Vector(l[0], l[1], r[2]),
 91                      Vector(r[0], l[1], r[2]),
 92                      Vector(r[0], r[1], r[2]))
;
 93     Triangle hinten2(Vector(l[0], l[1], r[2]),
 94                         Vector(r[0], r[1], r[2]),
 95                       Vector(l[0], r[1], r[2]))
;
 96     hinten1.render();
 97     hinten2.render();
 98
 99     // vorn
100     Triangle vorn1(Vector(l[0], l[1], l[2]),
101                    Vector(r[0], l[1], l[2]),
102                    Vector(r[0], r[1], l[2]))
;
103     Triangle vorn2(Vector(l[0], l[1], l[2]),
104                       Vector(r[0], r[1], l[2]),
105                     Vector(l[0], r[1], l[2]))
;
106     vorn1.render();
107     vorn2.render();
108
109     // links
110     Triangle links1(Vector(l[0], l[1], l[2]),
111                     Vector(l[0], r[1], r[2]),
112                     Vector(l[0], l[1], r[2]))
;
113     Triangle links2(Vector(l[0], l[1], l[2]),
114                     Vector(l[0], r[1], l[2]),
115                     Vector(l[0], r[1], r[2]))
;
116     links1.render();
117     links2.render();
118
119     // rechts
120     Triangle rechts1(Vector(r[0], l[1], l[2]),
121                      Vector(r[0], r[1], r[2]),
122                      Vector(r[0], l[1], r[2]))
;
123     Triangle rechts2(Vector(r[0], l[1], l[2]),
124                      Vector(r[0], r[1], l[2]),
125                      Vector(r[0], r[1], r[2]))
;
126     rechts1.render();
127     rechts2.render();
128 #undef l
129 #undef r
130 }
131
132