2 * Copyright (c) 1993-1997, Silicon Graphics, Inc.
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.
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.
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.
35 * OpenGL(R) is a registered trademark of Silicon Graphics, Inc.
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
50 /* Win32 calling conventions. */
57 static void CALLBACK
errorCallback(GLenum errorCode
)
59 const GLubyte
*estring
;
61 estring
= gluErrorString(errorCode
);
62 fprintf(stderr
, "Quadric Error: %s\n", estring
);
66 static void init(void)
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 };
75 glClearColor(0.0, 0.0, 0.0, 0.0);
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
);
83 glEnable(GL_LIGHTING
);
85 glEnable(GL_DEPTH_TEST
);
87 /* Create 4 display lists, each with a different quadric object.
88 * Different drawing styles and surface normal specifications
91 startList
= glGenLists(4);
92 qobj
= gluNewQuadric();
93 gluQuadricCallback(qobj
, GLU_ERROR
,
94 (GLvoid (CALLBACK
*) ()) errorCallback
);
96 gluQuadricDrawStyle(qobj
, GLU_FILL
); /* smooth shaded */
97 gluQuadricNormals(qobj
, GLU_SMOOTH
);
98 glNewList(startList
, GL_COMPILE
);
99 gluSphere(qobj
, 0.75, 15, 10);
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);
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);
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);
120 gluDeleteQuadric(qobj
);
123 static void display(void)
125 glClear (GL_COLOR_BUFFER_BIT
| GL_DEPTH_BUFFER_BIT
);
128 glEnable(GL_LIGHTING
);
129 glShadeModel (GL_SMOOTH
);
130 glTranslatef(-1.0, -1.0, 0.0);
131 glCallList(startList
);
133 glShadeModel (GL_FLAT
);
134 glTranslatef(0.0, 2.0, 0.0);
136 glRotatef(300.0, 1.0, 0.0, 0.0);
137 glCallList(startList
+1);
140 glDisable(GL_LIGHTING
);
141 glColor3f(0.0, 1.0, 1.0);
142 glTranslatef(2.0, -2.0, 0.0);
143 glCallList(startList
+2);
145 glColor3f(1.0, 1.0, 0.0);
146 glTranslatef(0.0, 2.0, 0.0);
147 glCallList(startList
+3);
153 static void reshape (int w
, int h
)
155 glViewport(0, 0, (GLsizei
) w
, (GLsizei
) h
);
156 glMatrixMode(GL_PROJECTION
);
159 glOrtho(-2.5, 2.5, -2.5*(GLfloat
)h
/(GLfloat
)w
,
160 2.5*(GLfloat
)h
/(GLfloat
)w
, -10.0, 10.0);
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
);
169 static void keyboard(unsigned char key
, int x
, int y
)
178 int main(int argc
, char** argv
)
180 glutInit(&argc
, argv
);
181 glutInitDisplayMode(GLUT_SINGLE
| GLUT_RGB
| GLUT_DEPTH
);
182 glutInitWindowSize(500, 500);
183 glutInitWindowPosition(100, 100);
184 glutCreateWindow(argv
[0]);
186 glutDisplayFunc(display
);
187 glutReshapeFunc(reshape
);
188 glutKeyboardFunc(keyboard
);