X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=progs%2Fdemos%2Fshapes%2Fshapes.c;h=271ea04c0ee551751420a102323f73d4b0f8df63;hb=f95379ab42dfd28ea1297aa774fd01c6c50b1a1a;hp=ac0a48ced68438ba14d1e869d1c2d1a1b0d5f7fb;hpb=ec8034e3fa741499f3d6ce3a25905b5fc3588868;p=freeglut
diff --git a/progs/demos/shapes/shapes.c b/progs/demos/shapes/shapes.c
index ac0a48c..271ea04 100644
--- a/progs/demos/shapes/shapes.c
+++ b/progs/demos/shapes/shapes.c
@@ -14,6 +14,7 @@
- q Q Quit
- i I Show info
- p P Toggle perspective or orthographic projection
+ - r R Toggle fixed or animated rotation around model X-axis
- = + Increase \a slices
- - _ Decreate \a slices
- , < Decreate \a stacks
@@ -67,6 +68,7 @@ static double offset[ 3 ] = { 0, 0, 0 };
static GLboolean show_info = GL_TRUE;
static float ar;
static GLboolean persProject = GL_TRUE;
+static GLboolean animateXRot = GL_FALSE;
/*
* These one-liners draw particular objects, fetching appropriate
@@ -87,8 +89,6 @@ static void drawSolidIcosahedron(void) { glutSolidIcosahedron ();
static void drawWireIcosahedron(void) { glutWireIcosahedron (); }
static void drawSolidSierpinskiSponge(void) { glutSolidSierpinskiSponge (depth, offset, orad);} /* orad doubles as size input */
static void drawWireSierpinskiSponge(void) { glutWireSierpinskiSponge (depth, offset, orad); } /* orad doubles as size input */
-static void drawSolidTeapot(void) { glutSolidTeapot(orad); } /* orad doubles as size input */
-static void drawWireTeapot(void) { glutWireTeapot(orad); } /* orad doubles as size input */
static void drawSolidTorus(void) { glutSolidTorus(irad,orad,slices,stacks); }
static void drawWireTorus(void) { glutWireTorus (irad,orad,slices,stacks); }
static void drawSolidSphere(void) { glutSolidSphere(orad,slices,stacks); } /* orad doubles as size input */
@@ -97,6 +97,24 @@ static void drawSolidCone(void) { glutSolidCone(orad,orad,slices,
static void drawWireCone(void) { glutWireCone(orad,orad,slices,stacks); } /* orad doubles as size input */
static void drawSolidCylinder(void) { glutSolidCylinder(orad,orad,slices,stacks); } /* orad doubles as size input */
static void drawWireCylinder(void) { glutWireCylinder(orad,orad,slices,stacks); } /* orad doubles as size input */
+static void drawSolidTeapot(void)
+{
+ /* per Glut manpage, it should be noted that the teapot is rendered
+ * with clockwise winding for front facing polygons...
+ */
+ glFrontFace(GL_CW);
+ glutSolidTeapot(orad); /* orad doubles as size input */
+ glFrontFace(GL_CCW);
+}
+static void drawWireTeapot(void)
+{
+ /* per Glut manpage, it should be noted that the teapot is rendered
+ * with clockwise winding for front facing polygons...
+ */
+ glFrontFace(GL_CW);
+ glutWireTeapot(orad); /* orad doubles as size input */
+ glFrontFace(GL_CCW);
+}
#define RADIUS 1.0f
@@ -236,6 +254,7 @@ static void display(void)
{
const double t = glutGet(GLUT_ELAPSED_TIME) / 1000.0;
const double a = t*90.0;
+ const double b = (animateXRot?t:1)*60.0;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
@@ -254,14 +273,14 @@ static void display(void)
glPushMatrix();
glTranslated(0,1.2,-6);
- glRotated(60,1,0,0);
+ glRotated(b,1,0,0);
glRotated(a,0,0,1);
table [function_index].solid ();
glPopMatrix();
glPushMatrix();
glTranslated(0,-1.2,-6);
- glRotated(60,1,0,0);
+ glRotated(b,1,0,0);
glRotated(a,0,0,1);
table [function_index].wire ();
glPopMatrix();
@@ -317,6 +336,9 @@ key(unsigned char key, int x, int y)
case 'P':
case 'p': persProject=!persProject; break;
+ case 'R':
+ case 'r': animateXRot=!animateXRot; break;
+
default:
break;
}