Browse Source

Initial commit

Thomas Salm 9 months ago
commit
f9e9e379a5
9 changed files with 653 additions and 0 deletions
  1. 1 0
      README.md
  2. 102 0
      src/pfeil.cpp
  3. 71 0
      src/propeller.cpp
  4. 31 0
      src/propf.cpp
  5. 57 0
      src/spirale.cpp
  6. 57 0
      src/stern.cpp
  7. 179 0
      src/uhr_main.cpp
  8. 66 0
      src/wuerfel.cpp
  9. 89 0
      src/zifferblatt.cpp

+ 1 - 0
README.md

@@ -0,0 +1 @@
+# OpenGL Uhr (GDV 2 Praktikum 2004)

+ 102 - 0
src/pfeil.cpp

@@ -0,0 +1,102 @@
+// Pfeil
+
+#define WINDOWS
+
+#ifdef LINUX
+#include <X11/Xlib.h>
+#include <GL/gl.h>
+#include <GL/glut.h>
+#endif
+
+#ifdef WINDOWS
+#include <windows.h>
+#include <gl\gl.h>
+#include <gl\glut.h>
+#endif
+
+void pfeil()
+{
+	glBegin(GL_TRIANGLES); // Vorderseite
+	glColor4f(1.0f, 0.0f, 0.0f, 1.0);
+	glVertex3f(-1.0f, 0.0f, 0.2f);
+	glVertex3f( 0.0f, 1.0f, 0.2f);
+	glVertex3f( 1.0f, 0.0f, 0.2f);
+	glEnd();
+	glBegin(GL_QUADS);
+	glColor4f(1.0f, 0.0f, 0.0f, 1.0);
+	glVertex3f(-0.5f,  0.0f, 0.2f);
+	glVertex3f( 0.5f,  0.0f, 0.2f);
+	glVertex3f( 0.5f, -1.5f, 0.2f);
+	glVertex3f(-0.5f, -1.5f, 0.2f);
+	glEnd();
+
+	glBegin(GL_POLYGON); // Rueckseite
+	glColor4f(1.0f, 0.0f, 0.0f, 1.0);
+	glVertex3f(-1.0f, 0.0f, -0.2f);
+	glVertex3f( 0.0f, 1.0f, -0.2f);
+	glVertex3f( 1.0f, 0.0f, -0.2f);
+	glEnd();
+	glBegin(GL_POLYGON);
+	glColor4f(1.0f, 0.0f, 0.0f, 1.0);
+	glVertex3f(-0.5f,  0.0f, -0.2f);
+	glVertex3f( 0.5f,  0.0f, -0.2f);
+	glVertex3f( 0.5f, -1.5f, -0.2f);
+	glVertex3f(-0.5f, -1.5f, -0.2f);
+	glEnd();
+
+	glBegin(GL_QUADS); // 
+	glColor4f(1.0f, 1.0f, 0.0f, 1.0f);
+	glVertex3f(-1.0f, 0.0f,  0.2f);
+	glVertex3f(-1.0f, 0.0f, -0.2f);
+	glVertex3f( 0.0f, 1.0f, -0.2f);
+	glVertex3f( 0.0f, 1.0f,  0.2f);
+	glEnd();
+
+	glBegin(GL_QUADS);
+	glColor4f(1.0f, 1.0f, 0.0f, 1.0f);
+	glVertex3f(1.0f, 0.0f,  0.2f);
+	glVertex3f(1.0f, 0.0f, -0.2f);
+	glVertex3f(0.0f, 1.0f, -0.2f);
+	glVertex3f(0.0f, 1.0f,  0.2f);
+	glEnd();
+
+	glBegin(GL_QUADS);
+	glColor4f(1.0f, 1.0f, 0.0f, 1.0f);
+	glVertex3f(-0.5f, 0.0f,  0.2f);
+	glVertex3f(-0.5f, 0.0f, -0.2f);
+	glVertex3f(-1.0f, 0.0f, -0.2f);
+	glVertex3f(-1.0f, 0.0f,  0.2f);
+	glEnd();
+
+	glBegin(GL_QUADS);
+	glColor4f(1.0f, 1.0f, 0.0f, 1.0f);
+	glVertex3f(0.5f, 0.0f,  0.2f);
+	glVertex3f(0.5f, 0.0f, -0.2f);
+	glVertex3f(1.0f, 0.0f, -0.2f);
+	glVertex3f(1.0f, 0.0f,  0.2f);
+	glEnd();
+
+	glBegin(GL_QUADS);
+	glColor4f(1.0f, 1.0f, 0.0f, 1.0f);
+	glVertex3f(-0.5f,  0.0f,  0.2f);
+	glVertex3f(-0.5f,  0.0f, -0.2f);
+	glVertex3f(-0.5f, -1.5f, -0.2f);
+	glVertex3f(-0.5f, -1.5f,  0.2f);
+	glEnd();
+
+	glBegin(GL_QUADS);
+	glColor4f(1.0f, 1.0f, 0.0f, 1.0f);
+	glVertex3f(0.5f,  0.0f,  0.2f);
+	glVertex3f(0.5f,  0.0f, -0.2f);
+	glVertex3f(0.5f, -1.5f, -0.2f);
+	glVertex3f(0.5f, -1.5f,  0.2f);
+	glEnd();
+
+	glBegin(GL_QUADS);
+	glColor4f(1.0f, 1.0f, 0.0f, 1.0f);
+	glVertex3f(-0.5f, -1.5f,  0.2f);
+	glVertex3f(-0.5f, -1.5f, -0.2f);
+	glVertex3f( 0.5f, -1.5f, -0.2f);
+	glVertex3f( 0.5f, -1.5f,  0.2f);
+	glEnd();
+}

+ 71 - 0
src/propeller.cpp

@@ -0,0 +1,71 @@
+// Propeller
+
+#define WINDOWS
+
+#ifdef LINUX
+#include <X11/Xlib.h>
+#include <GL/gl.h>
+#include <GL/glut.h>
+#endif
+
+#ifdef WINDOWS
+#include <windows.h>
+#include <gl\gl.h>
+#include <gl\glut.h>
+#endif
+
+#include <math.h>
+
+void propeller()
+{
+	float xabschnitt[73], zabschnitt[73];
+
+	// Punkte ermitteln, die Kreisbahn beschreiben
+	for(int i=0;i<=72;i++)
+	{
+		xabschnitt[i] = (float) cos(6.28318530718 * i / 72.0);
+		zabschnitt[i] = (float) sin(6.28318530718 * i / 72.0);
+	}
+
+	glBegin(GL_TRIANGLE_FAN); //Oberflaeche
+	glColor4f(1.0f, 1.0f, 0.0f, 1.0f);
+	glVertex3f(0.0f, 0.1f, 0.0f);
+	//glColor4f(0.0f, 0.0f, 1.0f, 1.0f);
+	for(i = 0; i<=72; i++)
+		glVertex3f(0.3f * xabschnitt[i], 0.1f, 0.3f * zabschnitt[i]);
+	glEnd();
+
+	glBegin(GL_TRIANGLE_FAN); //Unterseite
+	glColor4f(1.0f, 1.0f, 0.0f, 1.0f);
+	glVertex3f(0.0f, -0.1f, 0.0f);
+	//glColor4f(0.0f, 0.0f, 1.0f, 1.0f);
+	for(i = 0; i<=72; i++)
+		glVertex3f(0.4f * xabschnitt[i], -0.1f, 0.4f * zabschnitt[i]);
+	glEnd();
+
+	glBegin(GL_QUAD_STRIP); //Seitenflaeche
+	glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
+	for(i=0; i<=72; i++)
+	{
+		glVertex3f(0.3f * xabschnitt[i],  0.1f, 0.3f * zabschnitt[i]);
+		glVertex3f(0.4f * xabschnitt[i], -0.1f, 0.4f * zabschnitt[i]);
+	}
+	glEnd();
+
+	// Anzahl Fluegel [1..12]
+	int fluegel = 5;
+	int abstand = 72 / fluegel;
+
+	for(i = 0;i<fluegel; i++)
+	{
+		int position = abstand * i;
+
+		glBegin(GL_POLYGON);
+		glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
+		glVertex3f(0.3f * xabschnitt[position],      0.1f, 0.3f * zabschnitt[position]);
+		glVertex3f(0.4f * xabschnitt[position + 1], -0.1f, 0.4f * zabschnitt[position + 1]);
+		glVertex3f(1.5f * xabschnitt[position + 1], -0.1f, 1.5f * zabschnitt[position + 1]);
+		glVertex3f(1.5f * xabschnitt[position],      0.5f, 1.5f * zabschnitt[position]);
+		glEnd();
+	}
+}

+ 31 - 0
src/propf.cpp

@@ -0,0 +1,31 @@
+// Pfeil mit Propeller
+
+#define WINDOWS
+
+#ifdef LINUX
+#include <X11/Xlib.h>
+#include <GL/gl.h>
+#include <GL/glut.h>
+#endif
+
+#ifdef WINDOWS
+#include <windows.h>
+#include <gl\gl.h>
+#include <gl\glut.h>
+#endif
+
+extern void pfeil();
+extern void propeller();
+
+void propf(GLfloat move)
+{
+	pfeil();
+
+	// Positionierung des Propellers
+	glTranslatef(0.57f, -1.4f, 0.0f); 
+	glRotatef(90.0f, 0.0f, 0.0f, -1.0f);
+	// Drehung des Propellers
+	glRotatef(move, 0.0f, 1.0f, 0.0f);
+	glScalef(0.5f, 0.5f, 0.5f);
+	propeller();
+}

+ 57 - 0
src/spirale.cpp

@@ -0,0 +1,57 @@
+// Spirale
+
+#define WINDOWS
+
+#ifdef LINUX
+#include <X11/Xlib.h>
+#include <GL/gl.h>
+#include <GL/glut.h>
+#endif
+
+#ifdef WINDOWS
+#include <windows.h>
+#include <gl\gl.h>
+#include <gl\glut.h>
+#endif
+
+extern void wuerfel();
+
+void spirale(int AnzahlSekunden, int AnzahlMillisekunden)
+{
+	float ykoordinate = -1.0f;
+	float drehung = 0.0f;
+
+	int i=0;
+	glPushMatrix();
+
+	int bewegung = 360.0f * AnzahlMillisekunden / 1000.0f;
+
+	for(i; i<AnzahlSekunden; i++)
+	{
+		glPopMatrix();
+		glPushMatrix();
+		drehung += 8.0f;
+
+		glRotatef(bewegung, 0.0f, 1.0f, 0.0f);
+
+		glRotatef(drehung, 0.0f, 1.0f, 0.0f);
+		ykoordinate += 0.15f;
+		glTranslatef(0.0f, -ykoordinate, 0.0f);
+		glScalef(2.0f, 0.1f, 0.1f);
+		wuerfel();
+	}
+
+	for(i; i<60; i++)
+	{
+		glPopMatrix();
+		glPushMatrix();
+		drehung += 8.0f;
+		glRotatef(drehung, 0.0f, 1.0f, 0.0f);
+		ykoordinate += 0.15f;
+		glTranslatef(0.0f, -ykoordinate, 0.0f);
+		glScalef(2.0f, 0.1f, 0.1f);
+		wuerfel();
+	}
+
+	glPopMatrix();
+}

+ 57 - 0
src/stern.cpp

@@ -0,0 +1,57 @@
+// Stern
+
+#define WINDOWS
+
+#ifdef LINUX
+#include <X11/Xlib.h>
+#include <GL/gl.h>
+#include <GL/glut.h>
+#endif
+
+#ifdef WINDOWS
+#include <windows.h>
+#include <gl\gl.h>
+#include <gl\glut.h>
+#endif
+
+#include <math.h>
+
+void stern()
+{
+	float xabs[11], yabs[11];
+
+	// Punkte ermitteln, die Kreisbahn beschreiben
+	for(int i=0;i<=10;i++)
+	{
+		// Achsenvertauschung, damit erster Punkt auf y-Achse
+		// und damit Spitze der Sterns nach oben zeigt
+		yabs[i] = (float) cos(6.28318530718 * i / 10.0);
+		xabs[i] = (float) sin(6.28318530718 * i / 10.0);
+	}
+
+	glBegin(GL_TRIANGLE_FAN);
+	glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
+	glVertex3f(0.0f, 0.0f, 0.5f);
+	glColor4f(1.0f, 1.0f, 0.0f, 1.0f);
+	for(i=0; i<10; i++)
+	{
+		glVertex3f(2.0f * xabs[i], 2.0f * yabs[i], 0.0f);
+		i++;
+		glVertex3f(xabs[i], yabs[i], 0.0f);
+	}
+	glVertex3f(2.0f * xabs[10], 2.0f * yabs[10], 0.0f);
+	glEnd();
+
+	glBegin(GL_TRIANGLE_FAN);
+	glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
+	glVertex3f(0.0f, 0.0f, -0.5f);
+	glColor4f(1.0f, 1.0f, 0.0f, 1.0f);
+	for(i=0; i<10; i++)
+	{
+		glVertex3f(2.0f * xabs[i], 2.0f * yabs[i], 0.0f);
+		i++;
+		glVertex3f(xabs[i], yabs[i], 0.0f);
+	}
+	glVertex3f(2.0f * xabs[10], 2.0f * yabs[10], 0.0f);
+	glEnd();
+}

+ 179 - 0
src/uhr_main.cpp

@@ -0,0 +1,179 @@
+/* -----------------------------------------------------------	*/
+/* gd-Praktikum Sommersemester 2004 Startprogramm				*/
+/* -----------------------------------------------------------	*/
+/* Datei: Nix.cpp												*/
+/*																*/
+/* Autor: W. Kestner											*/
+/* Erstelldatum: 1. April 2003									*/
+/* letzte Aenderung:											*/
+/* -----------------------------------------------------------	*/
+/* Beschreibung:												*/
+/* -Projektfiles:	Nix.cpp,OPENGL32.LIB, GLUT32.LIB			*/
+/*																*/
+/* Wie der Name sagt, tut dieses Programm so gut wie nix		*/
+/* 																*/
+/*																*/
+/* ------------------------------------------------------------ */
+
+#define WINDOWS
+
+#ifdef LINUX
+#include <X11/Xlib.h>
+#include <GL/gl.h>
+#include <GL/glut.h>
+#endif
+
+#ifdef WINDOWS
+#include <windows.h>
+#include <gl\gl.h>
+#include <gl\glut.h>
+#endif
+
+#include <time.h>
+#include <sys/timeb.h>
+#include <iostream.h>
+#include <math.h>
+
+extern void pfeil();
+extern void propeller();
+extern void stern();
+extern void propf(GLfloat);
+extern void zifferblatt(int);
+extern void spirale(int, int);
+
+GLfloat movpropeller = 0.0f;
+struct _timeb tstruct;
+struct tm *jetzt;
+time_t ltime;
+
+int tmp=0;
+float drehung=0.0;
+
+float xachse[60], yachse[60], xreverse[60], yreverse[60];
+
+
+
+void Init()	
+{
+// Hier finden jene Aktionen statt, die zum Programmstart einmalig 
+// durchgeführt werden müssen
+	glClearColor(0.058f, 0.0784f, 0.2941f, 1.0); // Hintergrundfabe definieren
+	glEnable(GL_DEPTH_TEST);
+	glClearDepth(1.0);
+
+	for(int i=0; i<60; i++)
+	{
+		xachse[i] = (float) sin(6.28318530718 * i / 60.0);
+		yachse[i] = (float) cos(6.28318530718 * i / 60.0);
+		xreverse[i] = (float) sin(6.28318530718 * (60-i) / 60.0);
+		yreverse[i] = (float) cos(6.28318530718 * (60-i) / 60.0);
+	}
+}
+
+void RenderScene(void)
+{
+// Hier befindet sich der Code der in jedem frame ausgefuehrt werden muss
+	glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);// Puffer loeschen
+	glLoadIdentity();
+	gluLookAt(2.0, 5.0, 10.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); // Kamera
+
+
+	glPushMatrix();
+
+	glScalef(0.3f, 0.3f, 0.3f);
+	zifferblatt(jetzt->tm_hour);
+
+	glPopMatrix();
+	glPushMatrix();
+	glTranslatef(0.0f, 0.5f, 0.0f);
+	glScalef(0.15f, 0.15f, 0.15f);
+	spirale(jetzt->tm_sec, tstruct.millitm);
+
+	glPopMatrix();
+	glPushMatrix();
+
+	int Minute = jetzt->tm_min;
+
+	if((Minute == tmp) && (drehung == 0))
+	{
+		glTranslatef(1.8f * xachse[Minute], 1.8f * yachse[Minute], 0.0f);
+
+		// Pfeil auf Ziffernblatt zeigen lassen
+		glRotatef(360 * jetzt->tm_min / 60, 0.0f, 0.0f, -1.0f);
+		// Ausgangsposition für Pfeilfestlegen: 12 Uhr
+		glRotatef(180.0f, 0.0f, 0.0f, 1.0f);
+		glScalef(0.25f, 0.25f, 0.25f);
+		propf(0);
+	}
+	else
+	{
+		int slowdown = (float) drehung;
+		int pos = ((slowdown + Minute) % 60);
+
+		glTranslatef(1.8f * xachse[pos], 1.8f * yachse[pos], 0.0f);
+
+		glRotatef(360 * pos / 60, 0.0f, 0.0f, -1.0f);
+		glRotatef(180.0f, 0.0f, 0.0f, 1.0f);
+		glScalef(0.25f, 0.25f, 0.25f);
+		propf(movpropeller);
+
+		drehung += 0.015f;
+
+		if(slowdown == 59)
+			drehung = 0.0;
+	}
+
+	tmp = Minute;
+
+	glPopMatrix();
+
+
+	glutSwapBuffers();
+	glFlush();
+}
+
+void Reshape(int width,int height)
+{
+// Hier finden die Reaktionen auf eine Veränderung der Größe des 
+// Graphikfensters statt
+	glMatrixMode(GL_PROJECTION); // Matrix für Transf. Frustum->vieport
+  glLoadIdentity();
+  glViewport(0, 0, width, height);
+  glOrtho(-2.0, 2.0, -2.0, 2.0, 0.0, +20.0); // Frustum
+  glMatrixMode(GL_MODELVIEW); // Modellierungs/Viewing-Matrix
+}
+
+void Animate ()
+{
+// An dieser Stelle werden Berechnungen durchgeführt, die zu einer
+// Animation der Szene erforderlich sind. Dieser Prozess läuft im Hintergrund.
+
+	if(movpropeller < 360.0f)
+		movpropeller += 0.5f;
+	else
+		movpropeller = 0.0f;
+
+	_ftime( &tstruct );
+	time( &ltime );
+	jetzt = localtime( &ltime );
+
+
+  glutPostRedisplay(); // Bewirkt redraw des Fensters
+}
+
+
+int main(int argc, char **argv)
+{
+	cout<<"Startprogramm fuer das Bachelor gd-Praktikum"<<endl;
+	glutInit ( &argc, argv );
+	glutInitDisplayMode ( GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH );
+	glutInitWindowSize ( 600,600 );
+	glutCreateWindow ("*** Nix zu sehen");
+	glutDisplayFunc ( RenderScene );
+	glutReshapeFunc ( Reshape );
+	glutIdleFunc ( Animate );
+	Init();
+	glutMainLoop ();
+	return 0;
+}
+

+ 66 - 0
src/wuerfel.cpp

@@ -0,0 +1,66 @@
+// Wuerfel
+
+#define WINDOWS
+
+#ifdef LINUX
+#include <X11/Xlib.h>
+#include <GL/gl.h>
+#include <GL/glut.h>
+#endif
+
+#ifdef WINDOWS
+#include <windows.h>
+#include <gl\gl.h>
+#include <gl\glut.h>
+#endif
+
+void wuerfel()
+{
+	glBegin(GL_POLYGON); // vordere Flaeche
+	glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
+	glVertex3f( 1.0f,  1.0f, 1.0f);
+	glVertex3f(-1.0f,  1.0f, 1.0f);
+	glVertex3f(-1.0f, -1.0f, 1.0f);
+	glVertex3f( 1.0f, -1.0f, 1.0f);
+	glEnd();
+
+	glBegin(GL_POLYGON); // rechte Seitenflaeche
+	glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
+	glVertex3f(1.0f,  1.0f,  1.0f);
+	glVertex3f(1.0f,  1.0f, -1.0f);
+	glVertex3f(1.0f, -1.0f, -1.0f);
+	glVertex3f(1.0f, -1.0f,  1.0f);
+	glEnd();
+
+	glBegin(GL_POLYGON); // hintere Flaeche
+	glColor4f(0.f, 1.0f, 0.0f, 1.0f);
+	glVertex3f(-1.0f, -1.0f, -1.0f);
+	glVertex3f(-1.0f,  1.0f, -1.0f);
+	glVertex3f( 1.0f,  1.0f, -1.0f);
+	glVertex3f( 1.0f, -1.0f, -1.0f);
+	glEnd();
+
+	glBegin(GL_POLYGON); // linke Seitenflaeche
+	glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
+	glVertex3f(-1.0f,  1.0f,  1.0f);
+	glVertex3f(-1.0f, -1.0f,  1.0f);
+	glVertex3f(-1.0f, -1.0f, -1.0f);
+	glVertex3f(-1.0f,  1.0f, -1.0f);
+	glEnd();
+
+	glBegin(GL_POLYGON); //untere Flaeche
+	glColor4f(0.0f, 0.0f, 0.1f, 1.0f);
+	glVertex3f(-1.0f, -1.0f,  1.0f);
+	glVertex3f(-1.0f, -1.0f, -1.0f);
+	glVertex3f( 1.0f, -1.0f, -1.0f);
+	glVertex3f( 1.0f, -1.0f,  1.0f);
+	glEnd();
+
+	glBegin(GL_POLYGON); // obere Flaeche
+	glColor4f(1.0f, 1.0f, 0.0f, 1.0f);
+	glVertex3f(-1.0f, 1.0f,  1.0f);
+	glVertex3f(-1.0f, 1.0f, -1.0f);
+	glVertex3f( 1.0f, 1.0f, -1.0f);
+	glVertex3f( 1.0f, 1.0f,  1.0f);
+	glEnd();
+}

+ 89 - 0
src/zifferblatt.cpp

@@ -0,0 +1,89 @@
+// Zifferblatt
+
+#define WINDOWS
+
+#ifdef LINUX
+#include <X11/Xlib.h>
+#include <GL/gl.h>
+#include <GL/glut.h>
+#endif
+
+#ifdef WINDOWS
+#include <windows.h>
+#include <gl\gl.h>
+#include <gl\glut.h>
+#endif
+
+#include <math.h>
+
+extern void stern();
+extern void wuerfel();
+
+void zifferblatt(int hour)
+{
+	glPushMatrix();
+
+	if(hour < 12)
+	{
+
+		glTranslatef(4.0f * sin(0.0), 4.0f * cos(0.0), 0.0f);
+		glScalef(0.5f, 0.5f, 0.5f);
+		wuerfel();
+
+		glPopMatrix();
+		glPushMatrix();
+
+		for(int i=1; i<=hour; i++)
+		{
+			glTranslatef(4.0f * sin(6.28318530718 * i / 12.0), 4.0f * cos(6.28318530718 * i / 12.0), 0.0f);
+			glScalef(0.5f, 0.5f, 0.5f);
+			stern();
+
+			glPopMatrix();
+			glPushMatrix();
+		}
+
+		for(i; i<12; i++)
+		{
+			glTranslatef(4.0f * sin(6.28318530718 * i / 12.0), 4.0f * cos(6.28318530718 * i / 12.0), 0.0f);
+			glScalef(0.5f, 0.5f, 0.5f);
+			wuerfel();
+
+			glPopMatrix();
+			glPushMatrix();
+		}
+	}
+	else
+	{
+		int pm = hour % 12;
+
+		glTranslatef(4.0f * sin(0.0), 4.0f * cos(0.0), 0.0f);
+		glScalef(0.5f, 0.5f, 0.5f);
+		stern();
+
+		glPopMatrix();
+		glPushMatrix();
+
+		for(int i=1; i<=pm; i++)
+		{
+			glTranslatef(4.0f * sin(6.28318530718 * i / 12.0), 4.0f * cos(6.28318530718 * i / 12.0), 0.0f);
+			glScalef(0.5f, 0.5f, 0.5f);
+			wuerfel();
+
+			glPopMatrix();
+			glPushMatrix();
+		}
+
+		for(i; i<12; i++)
+		{
+			glTranslatef(4.0f * sin(6.28318530718 * i / 12.0), 4.0f * cos(6.28318530718 * i / 12.0), 0.0f);
+			glScalef(0.5f, 0.5f, 0.5f);
+			stern();
+
+			glPopMatrix();
+			glPushMatrix();
+		}
+	}
+
+	glPopMatrix();
+}