~ubuntu-branches/ubuntu/oneiric/mesa-demos/oneiric

« back to all changes in this revision

Viewing changes to src/redbook/quadric.c

  • Committer: Bazaar Package Importer
  • Author(s): Christopher James Halse Rogers
  • Date: 2010-09-27 16:18:27 UTC
  • Revision ID: james.westby@ubuntu.com-20100927161827-1yfgolc1oy9sjhi8
Tags: upstream-8.0.1
ImportĀ upstreamĀ versionĀ 8.0.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (c) 1993-1997, Silicon Graphics, Inc.
 
3
 * ALL RIGHTS RESERVED 
 
4
 * Permission to use, copy, modify, and distribute this software for 
 
5
 * any purpose and without fee is hereby granted, provided that the above
 
6
 * copyright notice appear in all copies and that both the copyright notice
 
7
 * and this permission notice appear in supporting documentation, and that 
 
8
 * the name of Silicon Graphics, Inc. not be used in advertising
 
9
 * or publicity pertaining to distribution of the software without specific,
 
10
 * written prior permission. 
 
11
 *
 
12
 * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
 
13
 * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
 
14
 * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
 
15
 * FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL SILICON
 
16
 * GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
 
17
 * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
 
18
 * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
 
19
 * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
 
20
 * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC.  HAS BEEN
 
21
 * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
 
22
 * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
 
23
 * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
 
24
 * 
 
25
 * US Government Users Restricted Rights 
 
26
 * Use, duplication, or disclosure by the Government is subject to
 
27
 * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
 
28
 * (c)(1)(ii) of the Rights in Technical Data and Computer Software
 
29
 * clause at DFARS 252.227-7013 and/or in similar or successor
 
30
 * clauses in the FAR or the DOD or NASA FAR Supplement.
 
31
 * Unpublished-- rights reserved under the copyright laws of the
 
32
 * United States.  Contractor/manufacturer is Silicon Graphics,
 
33
 * Inc., 2011 N.  Shoreline Blvd., Mountain View, CA 94039-7311.
 
34
 *
 
35
 * OpenGL(R) is a registered trademark of Silicon Graphics, Inc.
 
36
 */
 
37
 
 
38
/*
 
39
 *  quadric.c
 
40
 *  This program demonstrates the use of some of the gluQuadric*
 
41
 *  routines. Quadric objects are created with some quadric
 
42
 *  properties and the callback routine to handle errors.
 
43
 *  Note that the cylinder has no top or bottom and the circle
 
44
 *  has a hole in it.
 
45
 */
 
46
#include <GL/glut.h>
 
47
#include <stdio.h>
 
48
#include <stdlib.h>
 
49
 
 
50
/* Win32 calling conventions. */
 
51
#ifndef CALLBACK
 
52
#define CALLBACK
 
53
#endif
 
54
 
 
55
GLuint startList;
 
56
 
 
57
static void CALLBACK errorCallback(GLenum errorCode)
 
58
{
 
59
   const GLubyte *estring;
 
60
 
 
61
   estring = gluErrorString(errorCode);
 
62
   fprintf(stderr, "Quadric Error: %s\n", estring);
 
63
   exit(0);
 
64
}
 
65
 
 
66
static void init(void) 
 
67
{
 
68
   GLUquadricObj *qobj;
 
69
   GLfloat mat_ambient[] = { 0.5, 0.5, 0.5, 1.0 };
 
70
   GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };
 
71
   GLfloat mat_shininess[] = { 50.0 };
 
72
   GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 };
 
73
   GLfloat model_ambient[] = { 0.5, 0.5, 0.5, 1.0 };
 
74
 
 
75
   glClearColor(0.0, 0.0, 0.0, 0.0);
 
76
 
 
77
   glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
 
78
   glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
 
79
   glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
 
80
   glLightfv(GL_LIGHT0, GL_POSITION, light_position);
 
81
   glLightModelfv(GL_LIGHT_MODEL_AMBIENT, model_ambient);
 
82
 
 
83
   glEnable(GL_LIGHTING);
 
84
   glEnable(GL_LIGHT0);
 
85
   glEnable(GL_DEPTH_TEST);
 
86
 
 
87
/*  Create 4 display lists, each with a different quadric object.
 
88
 *  Different drawing styles and surface normal specifications
 
89
 *  are demonstrated.
 
90
 */
 
91
   startList = glGenLists(4);
 
92
   qobj = gluNewQuadric();
 
93
   gluQuadricCallback(qobj, GLU_ERROR, 
 
94
                      (GLvoid (CALLBACK*) ()) errorCallback);
 
95
 
 
96
   gluQuadricDrawStyle(qobj, GLU_FILL); /* smooth shaded */
 
97
   gluQuadricNormals(qobj, GLU_SMOOTH);
 
98
   glNewList(startList, GL_COMPILE);
 
99
      gluSphere(qobj, 0.75, 15, 10);
 
100
   glEndList();
 
101
 
 
102
   gluQuadricDrawStyle(qobj, GLU_FILL); /* flat shaded */
 
103
   gluQuadricNormals(qobj, GLU_FLAT);
 
104
   glNewList(startList+1, GL_COMPILE);
 
105
      gluCylinder(qobj, 0.5, 0.3, 1.0, 15, 5);
 
106
   glEndList();
 
107
 
 
108
   gluQuadricDrawStyle(qobj, GLU_LINE); /* all polygons wireframe */
 
109
   gluQuadricNormals(qobj, GLU_NONE);
 
110
   glNewList(startList+2, GL_COMPILE);
 
111
      gluDisk(qobj, 0.25, 1.0, 20, 4);
 
112
   glEndList();
 
113
 
 
114
   gluQuadricDrawStyle(qobj, GLU_SILHOUETTE); /* boundary only  */
 
115
   gluQuadricNormals(qobj, GLU_NONE);
 
116
   glNewList(startList+3, GL_COMPILE);
 
117
      gluPartialDisk(qobj, 0.0, 1.0, 20, 4, 0.0, 225.0);
 
118
   glEndList();
 
119
 
 
120
   gluDeleteQuadric(qobj);
 
121
}
 
122
 
 
123
static void display(void)
 
124
{
 
125
   glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 
126
   glPushMatrix();
 
127
 
 
128
   glEnable(GL_LIGHTING);
 
129
   glShadeModel (GL_SMOOTH);
 
130
   glTranslatef(-1.0, -1.0, 0.0);
 
131
   glCallList(startList);
 
132
 
 
133
   glShadeModel (GL_FLAT);
 
134
   glTranslatef(0.0, 2.0, 0.0);
 
135
   glPushMatrix();
 
136
   glRotatef(300.0, 1.0, 0.0, 0.0);
 
137
   glCallList(startList+1);
 
138
   glPopMatrix();
 
139
 
 
140
   glDisable(GL_LIGHTING);
 
141
   glColor3f(0.0, 1.0, 1.0);
 
142
   glTranslatef(2.0, -2.0, 0.0);
 
143
   glCallList(startList+2);
 
144
 
 
145
   glColor3f(1.0, 1.0, 0.0);
 
146
   glTranslatef(0.0, 2.0, 0.0);
 
147
   glCallList(startList+3);
 
148
 
 
149
   glPopMatrix();
 
150
   glFlush();
 
151
}
 
152
 
 
153
static void reshape (int w, int h)
 
154
{
 
155
   glViewport(0, 0, (GLsizei) w, (GLsizei) h);
 
156
   glMatrixMode(GL_PROJECTION);
 
157
   glLoadIdentity();
 
158
   if (w <= h)
 
159
      glOrtho(-2.5, 2.5, -2.5*(GLfloat)h/(GLfloat)w,
 
160
         2.5*(GLfloat)h/(GLfloat)w, -10.0, 10.0);
 
161
   else
 
162
      glOrtho(-2.5*(GLfloat)w/(GLfloat)h,
 
163
         2.5*(GLfloat)w/(GLfloat)h, -2.5, 2.5, -10.0, 10.0);
 
164
   glMatrixMode(GL_MODELVIEW);
 
165
   glLoadIdentity();
 
166
}
 
167
 
 
168
/* ARGSUSED1 */
 
169
static void keyboard(unsigned char key, int x, int y)
 
170
{
 
171
   switch (key) {
 
172
      case 27:
 
173
         exit(0);
 
174
         break;
 
175
   }
 
176
}
 
177
 
 
178
int main(int argc, char** argv)
 
179
{
 
180
   glutInit(&argc, argv);
 
181
   glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
 
182
   glutInitWindowSize(500, 500); 
 
183
   glutInitWindowPosition(100, 100);
 
184
   glutCreateWindow(argv[0]);
 
185
   init();
 
186
   glutDisplayFunc(display); 
 
187
   glutReshapeFunc(reshape);
 
188
   glutKeyboardFunc(keyboard);
 
189
   glutMainLoop();
 
190
   return 0;
 
191
}