From efb92f27a82b28bcadd1e1b60365667a4440c85a Mon Sep 17 00:00:00 2001 From: rkrolib Date: Tue, 25 Nov 2003 14:10:35 +0000 Subject: [PATCH] Added a new demo (from Nigel) showing some of the basic GLUT geometry shapes. "shapes" is the name of the demo. git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@365 7f0cb862-5218-0410-a997-914c9d46530a --- .gitattributes | 2 + freeglut/freeglut/configure.in | 1 + freeglut/freeglut/progs/demos/Makefile.am | 2 +- .../freeglut/progs/demos/shapes/Makefile.am | 5 + freeglut/freeglut/progs/demos/shapes/shapes.c | 164 ++++++++++++++++++ 5 files changed, 173 insertions(+), 1 deletion(-) create mode 100644 freeglut/freeglut/progs/demos/shapes/Makefile.am create mode 100644 freeglut/freeglut/progs/demos/shapes/shapes.c diff --git a/.gitattributes b/.gitattributes index da2cabc..1303593 100644 --- a/.gitattributes +++ b/.gitattributes @@ -53,6 +53,8 @@ freeglut/freeglut/progs/demos/One/Makefile.am svn_keywords=Author+Date+Id+Revisi freeglut/freeglut/progs/demos/One/one.c svn_keywords=Author+Date+Id+Revision freeglut/freeglut/progs/demos/One/one.dsp svn_keywords=Author+Date+Id+Revision freeglut/freeglut/progs/demos/demos.dsw svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/progs/demos/shapes/Makefile.am svn_keywords=Author+Date+Id+Revision +freeglut/freeglut/progs/demos/shapes/shapes.c svn_keywords=Author+Date+Id+Revision freeglut/freeglut/src/Makefile.am svn_keywords=Author+Date+Id+Revision freeglut/freeglut/src/freeglut_callbacks.c svn_keywords=Author+Date+Id+Revision freeglut/freeglut/src/freeglut_cursor.c svn_keywords=Author+Date+Id+Revision diff --git a/freeglut/freeglut/configure.in b/freeglut/freeglut/configure.in index f23725e..88eef9a 100644 --- a/freeglut/freeglut/configure.in +++ b/freeglut/freeglut/configure.in @@ -60,6 +60,7 @@ AC_OUTPUT(\ progs/demos/Fractals_random/Makefile \ progs/demos/Lorenz/Makefile \ progs/demos/One/Makefile \ + progs/demos/shapes/Makefile \ src/Makefile \ include/Makefile \ include/GL/Makefile \ diff --git a/freeglut/freeglut/progs/demos/Makefile.am b/freeglut/freeglut/progs/demos/Makefile.am index 3a501d4..0cb3f88 100644 --- a/freeglut/freeglut/progs/demos/Makefile.am +++ b/freeglut/freeglut/progs/demos/Makefile.am @@ -1,2 +1,2 @@ EXTRA_DIST = demos.dsw -SUBDIRS = CallbackMaker Fractals Fractals_random Lorenz One +SUBDIRS = CallbackMaker Fractals Fractals_random Lorenz One shapes diff --git a/freeglut/freeglut/progs/demos/shapes/Makefile.am b/freeglut/freeglut/progs/demos/shapes/Makefile.am new file mode 100644 index 0000000..db85de8 --- /dev/null +++ b/freeglut/freeglut/progs/demos/shapes/Makefile.am @@ -0,0 +1,5 @@ +EXTRA_DIST = shapes.c +noinst_PROGRAMS = shapes +shapes_SOURCES = shapes.c +shapes_LDFLAGS = -export-dynamic ../../../src/lib@LIBRARY@.la +shapes_CFLAGS = -I$(top_srcdir)/include $(X_CFLAGS) diff --git a/freeglut/freeglut/progs/demos/shapes/shapes.c b/freeglut/freeglut/progs/demos/shapes/shapes.c new file mode 100644 index 0000000..bf1ad22 --- /dev/null +++ b/freeglut/freeglut/progs/demos/shapes/shapes.c @@ -0,0 +1,164 @@ +#include + +#include +#include +#include + +static int slices = 16; +static int stacks = 16; + +static void +reshape(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() ; +} + +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(); +} + + +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(); +} + +void +idle() +{ + 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 }; + +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 }; + +int +main(int argc, char *argv[]) +{ + glutInit(&argc, argv); + glutInitWindowSize(640,480); + glutInitWindowPosition (40,40); + glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); + + glutCreateWindow("FreeGLUT Shapes"); + + glutReshapeFunc(reshape); + glutDisplayFunc(display); + glutKeyboardFunc(key); + glutIdleFunc(idle); + + glClearColor(1,1,1,1); + glEnable(GL_CULL_FACE); + glCullFace(GL_BACK); + + glEnable(GL_DEPTH_TEST); + glDepthFunc(GL_LESS); + + glEnable(GL_LIGHT0); + glEnable(GL_NORMALIZE); + glEnable(GL_COLOR_MATERIAL); + glEnable(GL_LIGHTING); + + glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); + glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); + glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); + glLightfv(GL_LIGHT0, GL_POSITION, light_position); + + glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); + glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); + glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); + glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess); + + glutMainLoop(); + + return EXIT_SUCCESS; +}