4 * Teapot(tm) rendering code.
6 * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
7 * Written by Pawel W. Olszta, <olszta@sourceforge.net>
8 * Creation date: Fri Dec 24 1999
10 * Permission is hereby granted, free of charge, to any person obtaining a
11 * copy of this software and associated documentation files (the "Software"),
12 * to deal in the Software without restriction, including without limitation
13 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
14 * and/or sell copies of the Software, and to permit persons to whom the
15 * Software is furnished to do so, subject to the following conditions:
17 * The above copyright notice and this permission notice shall be included
18 * in all copies or substantial portions of the Software.
20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
21 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
23 * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
24 * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
25 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 * Original teapot code copyright follows:
33 * (c) Copyright 1993, Silicon Graphics, Inc.
37 * Permission to use, copy, modify, and distribute this software
38 * for any purpose and without fee is hereby granted, provided
39 * that the above copyright notice appear in all copies and that
40 * both the copyright notice and this permission notice appear in
41 * supporting documentation, and that the name of Silicon
42 * Graphics, Inc. not be used in advertising or publicity
43 * pertaining to distribution of the software without specific,
44 * written prior permission.
46 * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU
47 * "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR
48 * OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF
49 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. IN NO
50 * EVENT SHALL SILICON GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE
51 * ELSE FOR ANY DIRECT, SPECIAL, INCIDENTAL, INDIRECT OR
52 * CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER,
53 * INCLUDING WITHOUT LIMITATION, LOSS OF PROFIT, LOSS OF USE,
54 * SAVINGS OR REVENUE, OR THE CLAIMS OF THIRD PARTIES, WHETHER OR
55 * NOT SILICON GRAPHICS, INC. HAS BEEN ADVISED OF THE POSSIBILITY
56 * OF SUCH LOSS, HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
57 * ARISING OUT OF OR IN CONNECTION WITH THE POSSESSION, USE OR
58 * PERFORMANCE OF THIS SOFTWARE.
60 * US Government Users Restricted Rights
62 * Use, duplication, or disclosure by the Government is subject to
63 * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
64 * (c)(1)(ii) of the Rights in Technical Data and Computer
65 * Software clause at DFARS 252.227-7013 and/or in similar or
66 * successor clauses in the FAR or the DOD or NASA FAR
67 * Supplement. Unpublished-- rights reserved under the copyright
68 * laws of the United States. Contractor/manufacturer is Silicon
69 * Graphics, Inc., 2011 N. Shoreline Blvd., Mountain View, CA
72 * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
76 #include "freeglut_teapot_data.h"
78 /* -- PRIVATE FUNCTIONS ---------------------------------------------------- */
81 static void fghTeapot( GLint grid
, GLdouble scale
, GLenum type
)
83 double p
[4][4][3], q
[4][4][3], r
[4][4][3], s
[4][4][3];
86 glPushAttrib( GL_ENABLE_BIT
| GL_EVAL_BIT
);
87 glEnable( GL_AUTO_NORMAL
);
88 glEnable( GL_NORMALIZE
);
89 glEnable( GL_MAP2_VERTEX_3
);
90 glEnable( GL_MAP2_TEXTURE_COORD_2
);
93 glRotated( 270.0, 1.0, 0.0, 0.0 );
94 glScaled( 0.5 * scale
, 0.5 * scale
, 0.5 * scale
);
95 glTranslated( 0.0, 0.0, -1.5 );
97 for (i
= 0; i
< 10; i
++) {
98 for (j
= 0; j
< 4; j
++) {
99 for (k
= 0; k
< 4; k
++) {
100 for (l
= 0; l
< 3; l
++) {
101 p
[j
][k
][l
] = cpdata
[patchdata
[i
][j
* 4 + k
]][l
];
102 q
[j
][k
][l
] = cpdata
[patchdata
[i
][j
* 4 + (3 - k
)]][l
];
107 cpdata
[patchdata
[i
][j
* 4 + (3 - k
)]][l
];
110 s
[j
][k
][l
] = cpdata
[patchdata
[i
][j
* 4 + k
]][l
];
120 glMap2d(GL_MAP2_TEXTURE_COORD_2
, 0.0, 1.0, 2, 2, 0.0, 1.0, 4, 2,
122 glMap2d(GL_MAP2_VERTEX_3
, 0.0, 1.0, 3, 4, 0.0, 1.0, 12, 4,
124 glMapGrid2d(grid
, 0.0, 1.0, grid
, 0.0, 1.0);
125 glEvalMesh2(type
, 0, grid
, 0, grid
);
126 glMap2d(GL_MAP2_VERTEX_3
, 0.0, 1.0, 3, 4, 0.0, 1.0, 12, 4,
128 glEvalMesh2(type
, 0, grid
, 0, grid
);
130 glMap2d(GL_MAP2_VERTEX_3
, 0.0, 1.0, 3, 4, 0.0, 1.0, 12, 4,
132 glEvalMesh2(type
, 0, grid
, 0, grid
);
133 glMap2d(GL_MAP2_VERTEX_3
, 0.0, 1.0, 3, 4, 0.0, 1.0, 12, 4,
135 glEvalMesh2(type
, 0, grid
, 0, grid
);
144 /* -- INTERFACE FUNCTIONS -------------------------------------------------- */
147 * Renders a beautiful wired teapot...
149 void glutWireTeapot( GLdouble size
)
151 /* We will use the general teapot rendering code */
152 fghTeapot( 10, size
, GL_LINE
);
156 * Renders a beautiful filled teapot...
158 void glutSolidTeapot( GLdouble size
)
160 /* We will use the general teapot rendering code */
161 fghTeapot( 7, size
, GL_FILL
);
164 /*** END OF FILE ***/