oculus1

changeset 29:9a973ef0e2a3 tip

fixed the performance issue under MacOSX by replacing glutSolidTeapot (which uses glEvalMesh) with my own teapot generator.
author John Tsiombikas <nuclear@member.fsf.org>
date Sun, 27 Oct 2013 06:31:18 +0200
parents cedf581048c7
children
files src/bezmath.c src/bezmath.h src/main.cc src/teapot.c src/teapot.h src/teapot_data.h
diffstat 6 files changed, 438 insertions(+), 1 deletions(-) [+]
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/src/bezmath.c	Sun Oct 27 06:31:18 2013 +0200
     1.3 @@ -0,0 +1,93 @@
     1.4 +#include <math.h>
     1.5 +#include "bezmath.h"
     1.6 +
     1.7 +static float bernstein(int i, float x);
     1.8 +
     1.9 +
    1.10 +struct vec3 v3_add(struct vec3 a, struct vec3 b)
    1.11 +{
    1.12 +	a.x += b.x;
    1.13 +	a.y += b.y;
    1.14 +	a.z += b.z;
    1.15 +	return a;
    1.16 +}
    1.17 +
    1.18 +struct vec3 v3_sub(struct vec3 a, struct vec3 b)
    1.19 +{
    1.20 +	a.x -= b.x;
    1.21 +	a.y -= b.y;
    1.22 +	a.z -= b.z;
    1.23 +	return a;
    1.24 +}
    1.25 +
    1.26 +struct vec3 v3_cross(struct vec3 a, struct vec3 b)
    1.27 +{
    1.28 +	struct vec3 res;
    1.29 +	res.x = a.y * b.z - a.z * b.y;
    1.30 +	res.y = a.z * b.x - a.x * b.z;
    1.31 +	res.z = a.x * b.y - a.y * b.x;
    1.32 +	return res;
    1.33 +}
    1.34 +
    1.35 +struct vec3 v3_normalize(struct vec3 v)
    1.36 +{
    1.37 +	float len = sqrt(v.x * v.x + v.y * v.y + v.z * v.z);
    1.38 +	v.x /= len;
    1.39 +	v.y /= len;
    1.40 +	v.z /= len;
    1.41 +	return v;
    1.42 +}
    1.43 +
    1.44 +struct vec3 bezier_patch(struct vec3 *cp, float u, float v)
    1.45 +{
    1.46 +	int i, j;
    1.47 +	struct vec3 res = {0, 0, 0};
    1.48 +
    1.49 +	for(j=0; j<4; j++) {
    1.50 +		for(i=0; i<4; i++) {
    1.51 +			float bu = bernstein(i, u);
    1.52 +			float bv = bernstein(j, v);
    1.53 +
    1.54 +			res.x += cp->x * bu * bv;
    1.55 +			res.y += cp->y * bu * bv;
    1.56 +			res.z += cp->z * bu * bv;
    1.57 +
    1.58 +			cp++;
    1.59 +		}
    1.60 +	}
    1.61 +	return res;
    1.62 +}
    1.63 +
    1.64 +#define DT	0.001
    1.65 +
    1.66 +struct vec3 bezier_patch_norm(struct vec3 *cp, float u, float v)
    1.67 +{
    1.68 +	struct vec3 tang, bitan, norm;
    1.69 +
    1.70 +	tang = v3_sub(bezier_patch(cp, u + DT, v), bezier_patch(cp, u - DT, v));
    1.71 +	bitan = v3_sub(bezier_patch(cp, u, v + DT), bezier_patch(cp, u, v - DT));
    1.72 +	norm = v3_cross(tang, bitan);
    1.73 +
    1.74 +	return v3_normalize(norm);
    1.75 +}
    1.76 +
    1.77 +
    1.78 +
    1.79 +static float bernstein(int i, float x)
    1.80 +{
    1.81 +	float invx = 1.0 - x;
    1.82 +
    1.83 +	switch(i) {
    1.84 +	case 0:
    1.85 +		return invx * invx * invx;
    1.86 +	case 1:
    1.87 +		return 3 * x * invx * invx;
    1.88 +	case 2:
    1.89 +		return 3 * x * x * invx;
    1.90 +	case 3:
    1.91 +		return x * x * x;
    1.92 +	default:
    1.93 +		break;
    1.94 +	}
    1.95 +	return 0;
    1.96 +}
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/src/bezmath.h	Sun Oct 27 06:31:18 2013 +0200
     2.3 @@ -0,0 +1,24 @@
     2.4 +#ifndef BEZMATH_H_
     2.5 +#define BEZMATH_H_
     2.6 +
     2.7 +struct vec3 {
     2.8 +	float x, y, z;
     2.9 +};
    2.10 +
    2.11 +#ifdef __cplusplus
    2.12 +extern "C"
    2.13 +#endif
    2.14 +
    2.15 +struct vec3 v3_add(struct vec3 a, struct vec3 b);
    2.16 +struct vec3 v3_sub(struct vec3 a, struct vec3 b);
    2.17 +struct vec3 v3_cross(struct vec3 a, struct vec3 b);
    2.18 +struct vec3 v3_normalize(struct vec3 v);
    2.19 +
    2.20 +struct vec3 bezier_patch(struct vec3 *cp, float u, float v);
    2.21 +struct vec3 bezier_patch_norm(struct vec3 *cp, float u, float v);
    2.22 +
    2.23 +#ifdef __cplusplus
    2.24 +}
    2.25 +#endif
    2.26 +
    2.27 +#endif	/* BEZMATH_H_ */
     3.1 --- a/src/main.cc	Sat Oct 26 04:24:16 2013 +0300
     3.2 +++ b/src/main.cc	Sun Oct 27 06:31:18 2013 +0200
     3.3 @@ -6,6 +6,7 @@
     3.4  #include "vr.h"
     3.5  #include "camera.h"
     3.6  #include "sdr.h"
     3.7 +#include "teapot.h"
     3.8  
     3.9  #ifdef __APPLE__
    3.10  #include <OpenGL/OpenGL.h>
    3.11 @@ -330,7 +331,8 @@
    3.12  	if(!tealist) {
    3.13  		tealist = glGenLists(1);
    3.14  		glNewList(tealist, GL_COMPILE);
    3.15 -		glutSolidTeapot(1.0);
    3.16 +		//glutSolidTeapot(1.0);
    3.17 +		bezier_teapot(1.0);
    3.18  		glEndList();
    3.19  	}
    3.20  
    3.21 @@ -341,6 +343,7 @@
    3.22  
    3.23  	glFrontFace(GL_CW);
    3.24  	glCallList(tealist);
    3.25 +	//bezier_teapot(1.0);
    3.26  	glFrontFace(GL_CCW);
    3.27  
    3.28  	glPopMatrix();
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/src/teapot.c	Sun Oct 27 06:31:18 2013 +0200
     4.3 @@ -0,0 +1,87 @@
     4.4 +#ifndef __APPLE__
     4.5 +#include <GL/gl.h>
     4.6 +#else
     4.7 +#include <OpenGL/gl.h>
     4.8 +#endif
     4.9 +
    4.10 +#include "teapot.h"
    4.11 +#include "teapot_data.h"
    4.12 +
    4.13 +static void draw_patch(struct vec3 *bez_cp, int *index, int flip, int useg, int vseg, float scale);
    4.14 +
    4.15 +int patch_subdivision = 6;
    4.16 +
    4.17 +void bezier_teapot(float scale)
    4.18 +{
    4.19 +	int i;
    4.20 +
    4.21 +	scale /= 2.0;
    4.22 +
    4.23 +	for(i=0; i<NUM_TEAPOT_PATCHES; i++) {
    4.24 +		float flip = teapot_part_flip[i];
    4.25 +		float rot = teapot_part_rot[i];
    4.26 +
    4.27 +		glMatrixMode(GL_MODELVIEW);
    4.28 +		glPushMatrix();
    4.29 +		glTranslatef(0, -3.15 * scale * 0.5, 0);
    4.30 +		glRotatef(rot, 0, 1, 0);
    4.31 +		glScalef(1, 1, flip);
    4.32 +		glRotatef(-90, 1, 0, 0);
    4.33 +
    4.34 +		draw_patch(teapot_verts, teapot_index + i * 16, flip < 0.0 ? 1 : 0, patch_subdivision, patch_subdivision, scale);
    4.35 +
    4.36 +		glPopMatrix();
    4.37 +	}
    4.38 +}
    4.39 +
    4.40 +static void draw_patch(struct vec3 *bez_cp, int *index, int flip, int useg, int vseg, float scale)
    4.41 +{
    4.42 +	static const float uoffs[2][4] = {{0, 0, 1, 1}, {1, 1, 0, 0}};
    4.43 +	static const float voffs[4] = {0, 1, 1, 0};
    4.44 +
    4.45 +	int i, j, k;
    4.46 +	struct vec3 cp[16];
    4.47 +	struct vec3 pt, n;
    4.48 +	float u, v;
    4.49 +	float du = 1.0 / useg;
    4.50 +	float dv = 1.0 / vseg;
    4.51 +
    4.52 +	/* collect control points */
    4.53 +	for(i=0; i<16; i++) {
    4.54 +		cp[i] = bez_cp[index[i]];
    4.55 +	}
    4.56 +
    4.57 +	glBegin(GL_QUADS);
    4.58 +	glColor3f(1, 1, 1);
    4.59 +
    4.60 +	u = 0;
    4.61 +	for(i=0; i<useg; i++) {
    4.62 +		v = 0;
    4.63 +		for(j=0; j<vseg; j++) {
    4.64 +
    4.65 +			for(k=0; k<4; k++) {
    4.66 +				pt = bezier_patch(cp, u + uoffs[flip][k] * du, v + voffs[k] * dv);
    4.67 +
    4.68 +				/* top/bottom normal hack */
    4.69 +				if(pt.z > 3.14) {
    4.70 +					n.x = n.y = 0.0f;
    4.71 +					n.z = 1.0f;
    4.72 +				} else if(pt.z < 0.00001) {
    4.73 +					n.x = n.y = 0.0f;
    4.74 +					n.z = -1.0f;
    4.75 +				} else {
    4.76 +					n = bezier_patch_norm(cp, u + uoffs[flip][k] * du, v + voffs[k] * dv);
    4.77 +				}
    4.78 +
    4.79 +				glTexCoord2f(u, v);
    4.80 +				glNormal3f(n.x, n.y, n.z);
    4.81 +				glVertex3f(pt.x * scale, pt.y * scale, pt.z * scale);
    4.82 +			}
    4.83 +
    4.84 +			v += dv;
    4.85 +		}
    4.86 +		u += du;
    4.87 +	}
    4.88 +
    4.89 +	glEnd();
    4.90 +}
     5.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.2 +++ b/src/teapot.h	Sun Oct 27 06:31:18 2013 +0200
     5.3 @@ -0,0 +1,16 @@
     5.4 +#ifndef TEAPOT_H_
     5.5 +#define TEAPOT_H_
     5.6 +
     5.7 +extern int patch_subdivision;
     5.8 +
     5.9 +#ifdef __cplusplus
    5.10 +extern "C" {
    5.11 +#endif
    5.12 +
    5.13 +void bezier_teapot(float scale);
    5.14 +
    5.15 +#ifdef __cplusplus
    5.16 +}
    5.17 +#endif
    5.18 +
    5.19 +#endif	/* TEAPOT_H_ */
     6.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.2 +++ b/src/teapot_data.h	Sun Oct 27 06:31:18 2013 +0200
     6.3 @@ -0,0 +1,214 @@
     6.4 +#ifndef TEAPOT_DATA_H_
     6.5 +#define TEAPOT_DATA_H_
     6.6 +
     6.7 +#include "bezmath.h"
     6.8 +
     6.9 +#define NUM_TEAPOT_INDICES	(sizeof teapot_index / sizeof *teapot_index)
    6.10 +#define NUM_TEAPOT_VERTS	(sizeof teapot_verts / sizeof *teapot_verts)
    6.11 +
    6.12 +#define NUM_TEAPOT_PATCHES	(NUM_TEAPOT_INDICES / 16)
    6.13 +
    6.14 +static float teapot_part_flip[] = {
    6.15 +	1, 1, 1, 1,			/* rim flip */
    6.16 +	1, 1, 1, 1,			/* body1 flip */
    6.17 +	1, 1, 1, 1,			/* body2 flip */
    6.18 +	1, 1, 1, 1,			/* lid patch 1 flip */
    6.19 +	1, 1, 1, 1,			/* lid patch 2 flip */
    6.20 +	1, -1,				/* handle 1 flip */
    6.21 +	1, -1,				/* handle 2 flip */
    6.22 +	1, -1,				/* spout 1 flip */
    6.23 +	1, -1,				/* spout 2 flip */
    6.24 +	1, 1, 1, 1			/* bottom flip */
    6.25 +};
    6.26 +
    6.27 +static float teapot_part_rot[] = {
    6.28 +	0, 90, 180, 270,	/* rim rotations */
    6.29 +	0, 90, 180, 270,	/* body patch 1 rotations */
    6.30 +	0, 90, 180, 270,	/* body patch 2 rotations */
    6.31 +	0, 90, 180, 270,	/* lid patch 1 rotations */
    6.32 +	0, 90, 180, 270,	/* lid patch 2 rotations */
    6.33 +	0, 0,				/* handle 1 rotations */
    6.34 +	0, 0,				/* handle 2 rotations */
    6.35 +	0, 0,				/* spout 1 rotations */
    6.36 +	0, 0,				/* spout 2 rotations */
    6.37 +	0, 90, 180, 270		/* bottom rotations */
    6.38 +};
    6.39 +
    6.40 +
    6.41 +static int teapot_index[] = {
    6.42 +	/* rim */
    6.43 +	102, 103, 104, 105, 4, 5, 6, 7, 8,
    6.44 +	9, 10, 11, 12, 13, 14, 15,
    6.45 +
    6.46 +	102, 103, 104, 105, 4, 5, 6, 7, 8,
    6.47 +	9, 10, 11, 12, 13, 14, 15,
    6.48 +
    6.49 +	102, 103, 104, 105, 4, 5, 6, 7, 8,
    6.50 +	9, 10, 11, 12, 13, 14, 15,
    6.51 +
    6.52 +	102, 103, 104, 105, 4, 5, 6, 7, 8,
    6.53 +	9, 10, 11, 12, 13, 14, 15,
    6.54 +
    6.55 +	/* body1 */
    6.56 +	12, 13, 14, 15, 16, 17, 18, 19,
    6.57 +	20, 21, 22, 23, 24, 25, 26, 27,
    6.58 +
    6.59 +	12, 13, 14, 15, 16, 17, 18, 19,
    6.60 +	20, 21, 22, 23, 24, 25, 26, 27,
    6.61 +
    6.62 +	12, 13, 14, 15, 16, 17, 18, 19,
    6.63 +	20, 21, 22, 23, 24, 25, 26, 27,
    6.64 +
    6.65 +	12, 13, 14, 15, 16, 17, 18, 19,
    6.66 +	20, 21, 22, 23, 24, 25, 26, 27,
    6.67 +
    6.68 +	/* body 2 */
    6.69 +	24, 25, 26, 27, 29, 30, 31, 32,
    6.70 +	33, 34, 35, 36, 37, 38, 39, 40,
    6.71 +
    6.72 +	24, 25, 26, 27, 29, 30, 31, 32,
    6.73 +	33, 34, 35, 36, 37, 38, 39, 40,
    6.74 +
    6.75 +	24, 25, 26, 27, 29, 30, 31, 32,
    6.76 +	33, 34, 35, 36, 37, 38, 39, 40,
    6.77 +
    6.78 +	24, 25, 26, 27, 29, 30, 31, 32,
    6.79 +	33, 34, 35, 36, 37, 38, 39, 40,
    6.80 +
    6.81 +	/* lid 1 */
    6.82 +	96, 96, 96, 96, 97, 98, 99, 100,
    6.83 +	101, 101, 101, 101, 0,  1,  2, 3,
    6.84 +
    6.85 +	96, 96, 96, 96, 97, 98, 99, 100,
    6.86 +	101, 101, 101, 101, 0,  1,  2, 3,
    6.87 +
    6.88 +	96, 96, 96, 96, 97, 98, 99, 100,
    6.89 +	101, 101, 101, 101, 0,  1,  2, 3,
    6.90 +
    6.91 +	96, 96, 96, 96, 97, 98, 99, 100,
    6.92 +	101, 101, 101, 101, 0,  1,  2, 3,
    6.93 +
    6.94 +	/* lid 2 */
    6.95 +	0,  1,  2,  3, 106, 107, 108, 109,
    6.96 +	110, 111, 112, 113, 114, 115, 116, 117,
    6.97 +
    6.98 +	0,  1,  2,  3, 106, 107, 108, 109,
    6.99 +	110, 111, 112, 113, 114, 115, 116, 117,
   6.100 +
   6.101 +	0,  1,  2,  3, 106, 107, 108, 109,
   6.102 +	110, 111, 112, 113, 114, 115, 116, 117,
   6.103 +
   6.104 +	0,  1,  2,  3, 106, 107, 108, 109,
   6.105 +	110, 111, 112, 113, 114, 115, 116, 117,
   6.106 +
   6.107 +	/* handle 1 */
   6.108 +	41, 42, 43, 44, 45, 46, 47, 48,
   6.109 +	49, 50, 51, 52, 53, 54, 55, 56,
   6.110 +
   6.111 +	41, 42, 43, 44, 45, 46, 47, 48,
   6.112 +	49, 50, 51, 52, 53, 54, 55, 56,
   6.113 +
   6.114 +	/* handle 2 */
   6.115 +	53, 54, 55, 56, 57, 58, 59, 60,
   6.116 +	61, 62, 63, 64, 28, 65, 66, 67,
   6.117 +
   6.118 +	53, 54, 55, 56, 57, 58, 59, 60,
   6.119 +	61, 62, 63, 64, 28, 65, 66, 67,
   6.120 +
   6.121 +	/* spout 1 */
   6.122 +	68, 69, 70, 71, 72, 73, 74, 75,
   6.123 +	76, 77, 78, 79, 80, 81, 82, 83,
   6.124 +
   6.125 +	68, 69, 70, 71, 72, 73, 74, 75,
   6.126 +	76, 77, 78, 79, 80, 81, 82, 83,
   6.127 +
   6.128 +	/* spout 2 */
   6.129 +	80, 81, 82, 83, 84, 85, 86, 87,
   6.130 +	88, 89, 90, 91, 92, 93, 94, 95,
   6.131 +
   6.132 +	80, 81, 82, 83, 84, 85, 86, 87,
   6.133 +	88, 89, 90, 91, 92, 93, 94, 95,
   6.134 +
   6.135 +	/* bottom */
   6.136 +	118, 118, 118, 118, 124, 122, 119, 121,
   6.137 +	123, 126, 125, 120, 40, 39, 38, 37,
   6.138 +
   6.139 +	118, 118, 118, 118, 124, 122, 119, 121,
   6.140 +	123, 126, 125, 120, 40, 39, 38, 37,
   6.141 +
   6.142 +	118, 118, 118, 118, 124, 122, 119, 121,
   6.143 +	123, 126, 125, 120, 40, 39, 38, 37,
   6.144 +
   6.145 +	118, 118, 118, 118, 124, 122, 119, 121,
   6.146 +	123, 126, 125, 120, 40, 39, 38, 37
   6.147 +};
   6.148 +
   6.149 +
   6.150 +static struct vec3 teapot_verts[] = {
   6.151 +	{  0.2000,  0.0000, 2.70000 }, {  0.2000, -0.1120, 2.70000 },
   6.152 +	{  0.1120, -0.2000, 2.70000 }, {  0.0000, -0.2000, 2.70000 },
   6.153 +	{  1.3375,  0.0000, 2.53125 }, {  1.3375, -0.7490, 2.53125 },
   6.154 +	{  0.7490, -1.3375, 2.53125 }, {  0.0000, -1.3375, 2.53125 },
   6.155 +	{  1.4375,  0.0000, 2.53125 }, {  1.4375, -0.8050, 2.53125 },
   6.156 +	{  0.8050, -1.4375, 2.53125 }, {  0.0000, -1.4375, 2.53125 },
   6.157 +	{  1.5000,  0.0000, 2.40000 }, {  1.5000, -0.8400, 2.40000 },
   6.158 +	{  0.8400, -1.5000, 2.40000 }, {  0.0000, -1.5000, 2.40000 },
   6.159 +	{  1.7500,  0.0000, 1.87500 }, {  1.7500, -0.9800, 1.87500 },
   6.160 +	{  0.9800, -1.7500, 1.87500 }, {  0.0000, -1.7500, 1.87500 },
   6.161 +	{  2.0000,  0.0000, 1.35000 }, {  2.0000, -1.1200, 1.35000 },
   6.162 +	{  1.1200, -2.0000, 1.35000 }, {  0.0000, -2.0000, 1.35000 },
   6.163 +	{  2.0000,  0.0000, 0.90000 }, {  2.0000, -1.1200, 0.90000 },
   6.164 +	{  1.1200, -2.0000, 0.90000 }, {  0.0000, -2.0000, 0.90000 },
   6.165 +	{ -2.0000,  0.0000, 0.90000 }, {  2.0000,  0.0000, 0.45000 },
   6.166 +	{  2.0000, -1.1200, 0.45000 }, {  1.1200, -2.0000, 0.45000 },
   6.167 +	{  0.0000, -2.0000, 0.45000 }, {  1.5000,  0.0000, 0.22500 },
   6.168 +	{  1.5000, -0.8400, 0.22500 }, {  0.8400, -1.5000, 0.22500 },
   6.169 +	{  0.0000, -1.5000, 0.22500 }, {  1.5000,  0.0000, 0.15000 },
   6.170 +	{  1.5000, -0.8400, 0.15000 }, {  0.8400, -1.5000, 0.15000 },
   6.171 +	{  0.0000, -1.5000, 0.15000 }, { -1.6000,  0.0000, 2.02500 },
   6.172 +	{ -1.6000, -0.3000, 2.02500 }, { -1.5000, -0.3000, 2.25000 },
   6.173 +	{ -1.5000,  0.0000, 2.25000 }, { -2.3000,  0.0000, 2.02500 },
   6.174 +	{ -2.3000, -0.3000, 2.02500 }, { -2.5000, -0.3000, 2.25000 },
   6.175 +	{ -2.5000,  0.0000, 2.25000 }, { -2.7000,  0.0000, 2.02500 },
   6.176 +	{ -2.7000, -0.3000, 2.02500 }, { -3.0000, -0.3000, 2.25000 },
   6.177 +	{ -3.0000,  0.0000, 2.25000 }, { -2.7000,  0.0000, 1.80000 },
   6.178 +	{ -2.7000, -0.3000, 1.80000 }, { -3.0000, -0.3000, 1.80000 },
   6.179 +	{ -3.0000,  0.0000, 1.80000 }, { -2.7000,  0.0000, 1.57500 },
   6.180 +	{ -2.7000, -0.3000, 1.57500 }, { -3.0000, -0.3000, 1.35000 },
   6.181 +	{ -3.0000,  0.0000, 1.35000 }, { -2.5000,  0.0000, 1.12500 },
   6.182 +	{ -2.5000, -0.3000, 1.12500 }, { -2.6500, -0.3000, 0.93750 },
   6.183 +	{ -2.6500,  0.0000, 0.93750 }, { -2.0000, -0.3000, 0.90000 },
   6.184 +	{ -1.9000, -0.3000, 0.60000 }, { -1.9000,  0.0000, 0.60000 },
   6.185 +	{  1.7000,  0.0000, 1.42500 }, {  1.7000, -0.6600, 1.42500 },
   6.186 +	{  1.7000, -0.6600, 0.60000 }, {  1.7000,  0.0000, 0.60000 },
   6.187 +	{  2.6000,  0.0000, 1.42500 }, {  2.6000, -0.6600, 1.42500 },
   6.188 +	{  3.1000, -0.6600, 0.82500 }, {  3.1000,  0.0000, 0.82500 },
   6.189 +	{  2.3000,  0.0000, 2.10000 }, {  2.3000, -0.2500, 2.10000 },
   6.190 +	{  2.4000, -0.2500, 2.02500 }, {  2.4000,  0.0000, 2.02500 },
   6.191 +	{  2.7000,  0.0000, 2.40000 }, {  2.7000, -0.2500, 2.40000 },
   6.192 +	{  3.3000, -0.2500, 2.40000 }, {  3.3000,  0.0000, 2.40000 },
   6.193 +	{  2.8000,  0.0000, 2.47500 }, {  2.8000, -0.2500, 2.47500 },
   6.194 +	{  3.5250, -0.2500, 2.49375 }, {  3.5250,  0.0000, 2.49375 },
   6.195 +	{  2.9000,  0.0000, 2.47500 }, {  2.9000, -0.1500, 2.47500 },
   6.196 +	{  3.4500, -0.1500, 2.51250 }, {  3.4500,  0.0000, 2.51250 },
   6.197 +	{  2.8000,  0.0000, 2.40000 }, {  2.8000, -0.1500, 2.40000 },
   6.198 +	{  3.2000, -0.1500, 2.40000 }, {  3.2000,  0.0000, 2.40000 },
   6.199 +	{  0.0000,  0.0000, 3.15000 }, {  0.8000,  0.0000, 3.15000 },
   6.200 +	{  0.8000, -0.4500, 3.15000 }, {  0.4500, -0.8000, 3.15000 },
   6.201 +	{  0.0000, -0.8000, 3.15000 }, {  0.0000,  0.0000, 2.85000 },
   6.202 +	{  1.4000,  0.0000, 2.40000 }, {  1.4000, -0.7840, 2.40000 },
   6.203 +	{  0.7840, -1.4000, 2.40000 }, {  0.0000, -1.4000, 2.40000 },
   6.204 +	{  0.4000,  0.0000, 2.55000 }, {  0.4000, -0.2240, 2.55000 },
   6.205 +	{  0.2240, -0.4000, 2.55000 }, {  0.0000, -0.4000, 2.55000 },
   6.206 +	{  1.3000,  0.0000, 2.55000 }, {  1.3000, -0.7280, 2.55000 },
   6.207 +	{  0.7280, -1.3000, 2.55000 }, {  0.0000, -1.3000, 2.55000 },
   6.208 +	{  1.3000,  0.0000, 2.40000 }, {  1.3000, -0.7280, 2.40000 },
   6.209 +	{  0.7280, -1.3000, 2.40000 }, {  0.0000, -1.3000, 2.40000 },
   6.210 +	{  0.0000,  0.0000, 0.00000 }, {  1.4250, -0.7980, 0.00000 },
   6.211 +	{  1.5000,  0.0000, 0.07500 }, {  1.4250,  0.0000, 0.00000 },
   6.212 +	{  0.7980, -1.4250, 0.00000 }, {  0.0000, -1.5000, 0.07500 },
   6.213 +	{  0.0000, -1.4250, 0.00000 }, {  1.5000, -0.8400, 0.07500 },
   6.214 +	{  0.8400, -1.5000, 0.07500 }
   6.215 +};
   6.216 +
   6.217 +#endif	/* TEAPOT_DATA_H_ */