Two from Nigel:
[freeglut] / progs / demos / shapes / shapes.c
index bf1ad22..8d08462 100644 (file)
+/*
+ * FreeGLUT Shapes Demo
+ *
+ * Written by Nigel Stewart November 2003
+ *
+ * This program is test harness for the sphere, cone 
+ * and torus shapes in FreeGLUT.
+ *
+ * Spinning wireframe and smooth shaded shapes are
+ * displayed until the ESC or q key is pressed.  The
+ * number of geometry stacks and slices can be adjusted
+ * using the + and - keys.
+ */
+
 #include <GL/freeglut.h>
 
-#include <stdio.h>
 #include <stdlib.h>
-#include <math.h>
 
 static int slices = 16;
 static int stacks = 16;
 
+/* GLUT callback Handlers */
+
 static void 
-reshape(int width, int height)
+resize(int width, int height)
 {
-       float ar;
-       
-       glViewport( 0, 0, width, height);
-       glMatrixMode(GL_PROJECTION);
-       glLoadIdentity();
-       ar = (float) width / (float) height;
-       glFrustum ( -ar, ar, -1.0, 1.0, 2.0, 100.0);
-       
-       glMatrixMode(GL_MODELVIEW) ;
-       glLoadIdentity() ;
+    const float ar = (float) width / (float) height;
+    
+    glViewport(0, 0, width, height);
+    glMatrixMode(GL_PROJECTION);
+    glLoadIdentity();
+    glFrustum(-ar, ar, -1.0, 1.0, 2.0, 100.0);
+    
+    glMatrixMode(GL_MODELVIEW);
+    glLoadIdentity() ;
 }
 
 static void 
 display(void)
 {
-       float t = glutGet(GLUT_ELAPSED_TIME) / 1000.0;
-       float a = t*90.0;
-
-       glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
-       glPushMatrix();
-               glTranslatef(-2.4,1.2,-6);
-               glRotatef(60,1,0,0);
-               glRotatef(a,0,0,1);
-               glColor3f(1,0,0);
-               glutSolidSphere(1,slices,stacks);
-       glPopMatrix();
-
-       glPushMatrix();
-               glTranslatef(0,1.2,-6);
-               glRotatef(60,1,0,0);
-               glRotatef(a,0,0,1);
-               glColor3f(1,0,0);
-               glutSolidCone(1,1,slices,stacks);
-       glPopMatrix();
-
-       glPushMatrix();
-               glTranslatef(2.4,1.2,-6);
-               glRotatef(60,1,0,0);
-               glRotatef(a,0,0,1);
-               glColor3f(1,0,0);
-               glutSolidTorus(0.2,0.8,slices,stacks);
-       glPopMatrix();
-
-       glPushMatrix();
-               glTranslatef(-2.4,-1.2,-6);
-               glRotatef(60,1,0,0);
-               glRotatef(a,0,0,1);
-               glColor3f(1,0,0);
-               glutWireSphere(1,slices,stacks);
-       glPopMatrix();
-
-       glPushMatrix();
-               glTranslatef(0,-1.2,-6);
-               glRotatef(60,1,0,0);
-               glRotatef(a,0,0,1);
-               glColor3f(1,0,0);
-               glutWireCone(1,1,slices,stacks);
-       glPopMatrix();
-
-       glPushMatrix();
-               glTranslatef(2.4,-1.2,-6);
-               glRotatef(60,1,0,0);
-               glRotatef(a,0,0,1);
-               glColor3f(1,0,0);
-               glutWireTorus(0.2,0.8,slices,stacks);
-       glPopMatrix();
-
-       glutSwapBuffers();
+    const double t = glutGet(GLUT_ELAPSED_TIME) / 1000.0;
+    const double a = t*90.0;
+
+    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+    glColor3d(1,0,0);
+
+    glPushMatrix();
+        glTranslated(-2.4,1.2,-6);
+        glRotated(60,1,0,0);
+        glRotated(a,0,0,1);
+        glutSolidSphere(1,slices,stacks);
+    glPopMatrix();
+
+    glPushMatrix();
+        glTranslated(0,1.2,-6);
+        glRotated(60,1,0,0);
+        glRotated(a,0,0,1);
+        glutSolidCone(1,1,slices,stacks);
+    glPopMatrix();
+
+    glPushMatrix();
+        glTranslated(2.4,1.2,-6);
+        glRotated(60,1,0,0);
+        glRotated(a,0,0,1);
+        glutSolidTorus(0.2,0.8,slices,stacks);
+    glPopMatrix();
+
+    glPushMatrix();
+        glTranslated(-2.4,-1.2,-6);
+        glRotated(60,1,0,0);
+        glRotated(a,0,0,1);
+        glutWireSphere(1,slices,stacks);
+    glPopMatrix();
+
+    glPushMatrix();
+        glTranslated(0,-1.2,-6);
+        glRotated(60,1,0,0);
+        glRotated(a,0,0,1);
+        glutWireCone(1,1,slices,stacks);
+    glPopMatrix();
+
+    glPushMatrix();
+        glTranslated(2.4,-1.2,-6);
+        glRotated(60,1,0,0);
+        glRotated(a,0,0,1);
+        glutWireTorus(0.2,0.8,slices,stacks);
+    glPopMatrix();
+
+    glutSwapBuffers();
 }
 
 
 static void 
 key(unsigned char key, int x, int y)
 {
-       switch (key) {
-               case 27 : 
-               case 'q':
-               exit(0);
-               break;
-
-        case '+':
-               slices++;
-               stacks++;
-               break;
-               
-        case '-':
-               slices--;
-               stacks--;
-               break;
-       }
-       
-       glutPostRedisplay();
+    switch (key) 
+    {
+        case 27 : 
+        case 'q':
+            exit(0);
+            break;
+
+        case '+':
+            slices++;
+            stacks++;
+            break;
+
+        case '-':
+            if (slices>3 && stacks>3)
+            {
+                slices--;
+                stacks--;
+            }
+            break;
+    }
+
+    glutPostRedisplay();
 }
 
-void 
-idle()
+static void 
+idle(void)
 {
-       glutPostRedisplay();
+    glutPostRedisplay();
 }
 
-GLfloat light_ambient[]  = { 0.0, 0.0, 0.0, 1.0 };
-GLfloat light_diffuse[]  = { 1.0, 1.0, 1.0, 1.0 };
-GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 };
-GLfloat light_position[] = { 2.0, 5.0, 5.0, 0.0 };
+const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f };
+const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f };
+const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
+const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };
 
-GLfloat mat_ambient[]    = { 0.7, 0.7, 0.7, 1.0 };
-GLfloat mat_diffuse[]    = { 0.8, 0.8, 0.8, 1.0 };
-GLfloat mat_specular[]   = { 1.0, 1.0, 1.0, 1.0 };
-GLfloat high_shininess[] = { 100.0 };
+const GLfloat mat_ambient[]    = { 0.7f, 0.7f, 0.7f, 1.0f };
+const GLfloat mat_diffuse[]    = { 0.8f, 0.8f, 0.8f, 1.0f };
+const GLfloat mat_specular[]   = { 1.0f, 1.0f, 1.0f, 1.0f };
+const GLfloat high_shininess[] = { 100.0f };
+
+/* Program entry point */
 
 int 
 main(int argc, char *argv[])
 {
-       glutInit(&argc, argv);
-       glutInitWindowSize(640,480);
-       glutInitWindowPosition (40,40);
-       glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
+    glutInit(&argc, argv);
+    glutInitWindowSize(640,480);
+    glutInitWindowPosition (40,40);
+    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
 
-       glutCreateWindow("FreeGLUT Shapes");
+    glutCreateWindow("FreeGLUT Shapes");
 
-       glutReshapeFunc(reshape);
-       glutDisplayFunc(display);
-       glutKeyboardFunc(key);
-       glutIdleFunc(idle);
+    glutReshapeFunc(resize);
+    glutDisplayFunc(display);
+    glutKeyboardFunc(key);
+    glutIdleFunc(idle);
 
-       glClearColor(1,1,1,1);
-       glEnable(GL_CULL_FACE);
+    glClearColor(1,1,1,1);
+    glEnable(GL_CULL_FACE);
     glCullFace(GL_BACK);
 
     glEnable(GL_DEPTH_TEST);
@@ -146,7 +160,7 @@ main(int argc, char *argv[])
     glEnable(GL_LIGHT0);
     glEnable(GL_NORMALIZE);
     glEnable(GL_COLOR_MATERIAL);
-       glEnable(GL_LIGHTING);
+    glEnable(GL_LIGHTING);
 
     glLightfv(GL_LIGHT0, GL_AMBIENT,  light_ambient);
     glLightfv(GL_LIGHT0, GL_DIFFUSE,  light_diffuse);
@@ -158,7 +172,8 @@ main(int argc, char *argv[])
     glMaterialfv(GL_FRONT, GL_SPECULAR,  mat_specular);
     glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);
 
-       glutMainLoop();
+    glutMainLoop();
 
-       return EXIT_SUCCESS;
+    return EXIT_SUCCESS;
 }
+