Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Ray traced teapot

92 views
Skip to first unread message

Ron Hitchens

unread,
Sep 28, 1988, 1:56:28 AM9/28/88
to

I mailed this to Mark VandeWettering and Dean S. Jones, but got no response
from either of them so I don't know if it made it. So, I figured I might as
well just go ahead and post it, since this may be of interest to a lot of
people.

Below is a modification of a program that Dean S. Jones posted a few weeks
ago that draws the well known teapot in wire frame using SunCore. I changed
it so that it would use the same data to produce an NFF file that Mark
VandeWettering's ray tracer can use. The result looks surprisingly good.
Using the default step value of 6 is satisfactory, 12 looks very nice.

I'd like to know what's causing the little specks on the spout and the
handle. I don't know if it's a problem with how this guy generates the
NFF file, or some glitch in Mark's ray tracer. I don't have the time to
investigate.

The original program that Dean posted was Sun specific, since it used
SunCore. This one is not Sun-specific, all it does is some computation
and spit out some text data, so it should run most anywhere. You'll probably
need to remove the -f68881 from the makefile spec if you compile it on a
non-Sun system though.

Enjoy.

Ron Hitchens ro...@vixen.uucp hitc...@cs.utexas.edu
----

# This is a shell archive. Remove anything before this line,
# then unpack it by saving it in a file and typing "sh file".
#
# Wrapped by vixen!ronbo on Wed Sep 28 00:44:39 CDT 1988
# Contents: Makefile tea.h raypot.c ducks.c patches.c

echo x - Makefile
sed 's/^@//' > "Makefile" <<'@//E*O*F Makefile//'

OFILES= tea.o patches.o ducks.o
RAYOFILES= raypot.o patches.o ducks.o
LIBS= -lcore -lsunwindow -lpixrect -lm
CFLAGS= -O -f68881


raypot: $(RAYOFILES)
$(CC) $(CFLAGS) -o $@ $(RAYOFILES)

tea: $(OFILES)
$(CC) $(CFLAGS) -o $@ $(OFILES) $(LIBS)

@//E*O*F Makefile//
chmod u=rw,g=r,o=r Makefile

echo x - tea.h
sed 's/^@//' > "tea.h" <<'@//E*O*F tea.h//'
#define DEGREE 4
#define DUCK_COUNT 306
#define PATCH_COUNT 32

typedef struct {
float x, y, z;
} dt;

typedef int pt[DEGREE][DEGREE];
@//E*O*F tea.h//
chmod u=rw,g=r,o=r tea.h

echo x - raypot.c
sed 's/^@//' > "raypot.c" <<'@//E*O*F raypot.c//'


/*
* Ray-trace a teapot.
* This code generates an NFF file of a teapot sitting on a polished
* table. It uses the patch data to generate rectangular polygons.
* A step count may be given as an argument. If so, the patches will
* be divided down into smaller subpatches.
* The output NFF file, written to stdout, is intended for input to
* Mark VandeWettering's ray tracer, but could easily be adapted
* for other software that takes lists of polygons.
*
* Posted SunCore version by Dean S. Jones (de...@homxb.uucp)
* Ray trace/polygon mods by Ron Hitchens (ro...@vixen.uucp)
*/

#include <stdio.h>
#include "tea.h"

#define MAX_STEPS 50

extern dt ducks [DUCK_COUNT];
extern pt patches [PATCH_COUNT];


char *nff_hdr [] = {
"v", /* viewport parms */
"from -2.1 -7.8 3.6",
"at 0 0 1",
"up 0 0 1",
"angle 45",
"hither 1",
"resolution 512 512", /* image size */
"b 0.078 0.361 0.753", /* background color */
"l 8 -4 6", /* lights */
"l -1 -3 5",
"l -1 -4 9",
"l -2 -4 .4",
"f 1 0.85 0.7 0.75 0.25 25 0 0", /* surface properties */
"p 4", /* table top square */
"6 6 0",
"-6 6 0",
"-6 -6 0",
"6 -6 0",
"f 1 .47 0 1 0 30 0 0" /* surf props for teapot */
};


main (argc, argv)
int argc;
char *argv[];
{
int i, s = 6;

if (argc > 1) {
s = atoi (argv [1]);
s = (s > 0) ? s : 6;
if (s > MAX_STEPS) {
fprintf (stderr, "max step size is %d\n", MAX_STEPS);
exit (1);
}
}

for (i = 0; i < sizeof (nff_hdr) / sizeof (char *); i++) {
printf ("%s\n", nff_hdr [i]);
}

display_patches (s);

exit (0);
}

void blend_vector (d0, d1, d2, d3, t, r)
dt d0, d1, d2, d3;
float t;
dt *r;
{
r->x = d0.x*(1-t)*(1-t)*(1-t) + d1.x*3*t*(1-t)*(1-t) +
d2.x*3*t*t*(1-t) + d3.x*t*t*t;

r->y = d0.y*(1-t)*(1-t)*(1-t) + d1.y*3*t*(1-t)*(1-t) +
d2.y*3*t*t*(1-t) + d3.y*t*t*t;

r->z = d0.z*(1-t)*(1-t)*(1-t) + d1.z*3*t*(1-t)*(1-t) +
d2.z*3*t*t*(1-t) + d3.z*t*t*t;
}

void display_curve (d0, d1, d2, d3, steps)
dt d0, d1, d2, d3;
int steps;
{
dt tmp;
float t, step;
int i = 0, j;
static int count = 0;
static dt p [MAX_STEPS+1][MAX_STEPS+1];


t = step = (1.0 / (float)steps);

p [count][0] = d0;
while (t < (1.0 + step / 2.0)) {
blend_vector (d0, d1, d2, d3, t, &tmp);
p [count][++i] = tmp;
t += step;
}

count++;
if (count <= steps) {
return;
}

for (i = 0; i < steps; i++) {
for (j = 0; j < steps; j++) {
printf ("p 4\n");
printf ("%f %f %f\n",
p [i][j+1].x, p [i][j+1].y, p [i][j+1].z);
printf ("%f %f %f\n",
p [i][j].x, p [i][j].y, p [i][j].z);
printf ("%f %f %f\n",
p [i+1][j].x, p [i+1][j].y, p [i+1][j].z);
printf ("%f %f %f\n",
p [i+1][j+1].x, p [i+1][j+1].y,
p [i+1][j+1].z);
}
}

count = 0;
}


void display_patch (patch, steps)
pt patch;
int steps;
{
float t, step;
dt d0, d1, d2, d3;
int i;

t = 0;
step = (1.0 / (float)steps);
while(t < (1.0 + step / 2.0)) {
blend_vector(ducks[patch[0][0]-1],ducks[patch[0][1]-1],
ducks[patch[0][2]-1],ducks[patch[0][3]-1], t, &d0);

blend_vector(ducks[patch[1][0]-1],ducks[patch[1][1]-1],
ducks[patch[1][2]-1],ducks[patch[1][3]-1], t, &d1);

blend_vector(ducks[patch[2][0]-1],ducks[patch[2][1]-1],
ducks[patch[2][2]-1],ducks[patch[2][3]-1], t, &d2);

blend_vector(ducks[patch[3][0]-1],ducks[patch[3][1]-1],
ducks[patch[3][2]-1],ducks[patch[3][3]-1], t, &d3);

display_curve (d0, d1, d2, d3, steps);

t += step;
}
}

display_patches (s)
int s;
{
int i;

for (i = 0; i < PATCH_COUNT; i++) {
display_patch (patches [i], s);
}
}
@//E*O*F raypot.c//
chmod u=rw,g=r,o=r raypot.c

echo x - ducks.c
sed 's/^@//' > "ducks.c" <<'@//E*O*F ducks.c//'
#include "tea.h"

dt ducks[DUCK_COUNT] = {
{1.4,0.0,2.4},
{1.4,-0.784,2.4},
{0.784,-1.4,2.4},
{0.0,-1.4,2.4},
{1.3375,0.0,2.53125},
{1.3375,-0.749,2.53125},
{0.749,-1.3375,2.53125},
{0.0,-1.3375,2.53125},
{1.4375,0.0,2.53125},
{1.4375,-0.805,2.53125},
{0.805,-1.4375,2.53125},
{0.0,-1.4375,2.53125},
{1.5,0.0,2.4},
{1.5,-0.84,2.4},
{0.84,-1.5,2.4},
{0.0,-1.5,2.4},
{-0.784,-1.4,2.4},
{-1.4,-0.784,2.4},
{-1.4,0.0,2.4},
{-0.749,-1.3375,2.53125},
{-1.3375,-0.749,2.53125},
{-1.3375,0.0,2.53125},
{-0.805,-1.4375,2.53125},
{-1.4375,-0.805,2.53125},
{-1.4375,0.0,2.53125},
{-0.84,-1.5,2.4},
{-1.5,-0.84,2.4},
{-1.5,0.0,2.4},
{-1.4,0.784,2.4},
{-0.784,1.4,2.4},
{0.0,1.4,2.4},
{-1.3375,0.749,2.53125},
{-0.749,1.3375,2.53125},
{0.0,1.3375,2.53125},
{-1.4375,0.805,2.53125},
{-0.805,1.4375,2.53125},
{0.0,1.4375,2.53125},
{-1.5,0.84,2.4},
{-0.84,1.5,2.4},
{0.0,1.5,2.4},
{0.784,1.4,2.4},
{1.4,0.784,2.4},
{0.749,1.3375,2.53125},
{1.3375,0.749,2.53125},
{0.805,1.4375,2.53125},
{1.4375,0.805,2.53125},
{0.84,1.5,2.4},
{1.5,0.84,2.4},
{1.75,0.0,1.875},
{1.75,-0.98,1.875},
{0.98,-1.75,1.875},
{0.0,-1.75,1.875},
{2.0,0.0,1.35},
{2.0,-1.12,1.35},
{1.12,-2.0,1.35},
{0.0,-2.0,1.35},
{2.0,0.0,0.9},
{2.0,-1.12,0.9},
{1.12,-2.0,0.9},
{0.0,-2.0,0.9},
{-0.98,-1.75,1.875},
{-1.75,-0.98,1.875},
{-1.75,0.0,1.875},
{-1.12,-2.0,1.35},
{-2.0,-1.12,1.35},
{-2.0,0.0,1.35},
{-1.12,-2.0,0.9},
{-2.0,-1.12,0.9},
{-2.0,0.0,0.9},
{-1.75,0.98,1.875},
{-0.98,1.75,1.875},
{0.0,1.75,1.875},
{-2.0,1.12,1.35},
{-1.12,2.0,1.35},
{0.0,2.0,1.35},
{-2.0,1.12,0.9},
{-1.12,2.0,0.9},
{0.0,2.0,0.9},
{0.98,1.75,1.875},
{1.75,0.98,1.875},
{1.12,2.0,1.35},
{2.0,1.12,1.35},
{1.12,2.0,0.9},
{2.0,1.12,0.9},
{2.0,0.0,0.45},
{2.0,-1.12,0.45},
{1.12,-2.0,0.45},
{0.0,-2.0,0.45},
{1.5,0.0,0.225},
{1.5,-0.84,0.225},
{0.84,-1.5,0.225},
{0.0,-1.5,0.225},
{1.5,0.0,0.15},
{1.5,-0.84,0.15},
{0.84,-1.5,0.15},
{0.0,-1.5,0.15},
{-1.12,-2.0,0.45},
{-2.0,-1.12,0.45},
{-2.0,0.0,0.45},
{-0.84,-1.5,0.225},
{-1.5,-0.84,0.225},
{-1.5,0.0,0.225},
{-0.84,-1.5,0.15},
{-1.5,-0.84,0.15},
{-1.5,0.0,0.15},
{-2.0,1.12,0.45},
{-1.12,2.0,0.45},
{0.0,2.0,0.45},
{-1.5,0.84,0.225},
{-0.84,1.5,0.225},
{0.0,1.5,0.225},
{-1.5,0.84,0.15},
{-0.84,1.5,0.15},
{0.0,1.5,0.15},
{1.12,2.0,0.45},
{2.0,1.12,0.45},
{0.84,1.5,0.225},
{1.5,0.84,0.225},
{0.84,1.5,0.15},
{1.5,0.84,0.15},
{-1.6,0.0,2.025},
{-1.6,-0.3,2.025},
{-1.5,-0.3,2.25},
{-1.5,0.0,2.25},
{-2.3,0.0,2.025},
{-2.3,-0.3,2.025},
{-2.5,-0.3,2.25},
{-2.5,0.0,2.25},
{-2.7,0.0,2.025},
{-2.7,-0.3,2.025},
{-3.0,-0.3,2.25},
{-3.0,0.0,2.25},
{-2.7,0.0,1.8},
{-2.7,-0.3,1.8},
{-3.0,-0.3,1.8},
{-3.0,0.0,1.8},
{-1.5,0.3,2.25},
{-1.6,0.3,2.025},
{-2.5,0.3,2.25},
{-2.3,0.3,2.025},
{-3.0,0.3,2.25},
{-2.7,0.3,2.025},
{-3.0,0.3,1.8},
{-2.7,0.3,1.8},
{-2.7,0.0,1.575},
{-2.7,-0.3,1.575},
{-3.0,-0.3,1.35},
{-3.0,0.0,1.35},
{-2.5,0.0,1.125},
{-2.5,-0.3,1.125},
{-2.65,-0.3,0.9375},
{-2.65,0.0,0.9375},
{-2.0,-0.3,0.9},
{-1.9,-0.3,0.6},
{-1.9,0.0,0.6},
{-3.0,0.3,1.35},
{-2.7,0.3,1.575},
{-2.65,0.3,0.9375},
{-2.5,0.3,1.125},
{-1.9,0.3,0.6},
{-2.0,0.3,0.9},
{1.7,0.0,1.425},
{1.7,-0.66,1.425},
{1.7,-0.66,0.6},
{1.7,0.0,0.6},
{2.6,0.0,1.425},
{2.6,-0.66,1.425},
{3.1,-0.66,0.825},
{3.1,0.0,0.825},
{2.3,0.0,2.1},
{2.3,-0.25,2.1},
{2.4,-0.25,2.025},
{2.4,0.0,2.025},
{2.7,0.0,2.4},
{2.7,-0.25,2.4},
{3.3,-0.25,2.4},
{3.3,0.0,2.4},
{1.7,0.66,0.6},
{1.7,0.66,1.425},
{3.1,0.66,0.825},
{2.6,0.66,1.425},
{2.4,0.25,2.025},
{2.3,0.25,2.1},
{3.3,0.25,2.4},
{2.7,0.25,2.4},
{2.8,0.0,2.475},
{2.8,-0.25,2.475},
{3.525,-0.25,2.49375},
{3.525,0.0,2.49375},
{2.9,0.0,2.475},
{2.9,-0.15,2.475},
{3.45,-0.15,2.5125},
{3.45,0.0,2.5125},
{2.8,0.0,2.4},
{2.8,-0.15,2.4},
{3.2,-0.15,2.4},
{3.2,0.0,2.4},
{3.525,0.25,2.49375},
{2.8,0.25,2.475},
{3.45,0.15,2.5125},
{2.9,0.15,2.475},
{3.2,0.15,2.4},
{2.8,0.15,2.4},
{0.0,0.0,3.15},
{0.0,-0.002,3.15},
{0.002,0.0,3.15},
{0.8,0.0,3.15},
{0.8,-0.45,3.15},
{0.45,-0.8,3.15},
{0.0,-0.8,3.15},
{0.0,0.0,2.85},
{0.2,0.0,2.7},
{0.2,-0.112,2.7},
{0.112,-0.2,2.7},
{0.0,-0.2,2.7},
{-0.002,0.0,3.15},
{-0.45,-0.8,3.15},
{-0.8,-0.45,3.15},
{-0.8,0.0,3.15},
{-0.112,-0.2,2.7},
{-0.2,-0.112,2.7},
{-0.2,0.0,2.7},
{0.0,0.002,3.15},
{-0.8,0.45,3.15},
{-0.45,0.8,3.15},
{0.0,0.8,3.15},
{-0.2,0.112,2.7},
{-0.112,0.2,2.7},
{0.0,0.2,2.7},
{0.45,0.8,3.15},
{0.8,0.45,3.15},
{0.112,0.2,2.7},
{0.2,0.112,2.7},
{0.4,0.0,2.55},
{0.4,-0.224,2.55},
{0.224,-0.4,2.55},
{0.0,-0.4,2.55},
{1.3,0.0,2.55},
{1.3,-0.728,2.55},
{0.728,-1.3,2.55},
{0.0,-1.3,2.55},
{1.3,0.0,2.4},
{1.3,-0.728,2.4},
{0.728,-1.3,2.4},
{0.0,-1.3,2.4},
{-0.224,-0.4,2.55},
{-0.4,-0.224,2.55},
{-0.4,0.0,2.55},
{-0.728,-1.3,2.55},
{-1.3,-0.728,2.55},
{-1.3,0.0,2.55},
{-0.728,-1.3,2.4},
{-1.3,-0.728,2.4},
{-1.3,0.0,2.4},
{-0.4,0.224,2.55},
{-0.224,0.4,2.55},
{0.0,0.4,2.55},
{-1.3,0.728,2.55},
{-0.728,1.3,2.55},
{0.0,1.3,2.55},
{-1.3,0.728,2.4},
{-0.728,1.3,2.4},
{0.0,1.3,2.4},
{0.224,0.4,2.55},
{0.4,0.224,2.55},
{0.728,1.3,2.55},
{1.3,0.728,2.55},
{0.728,1.3,2.4},
{1.3,0.728,2.4},
{0.0,0.0,0.0},
{1.5,0.0,0.15},
{1.5,0.84,0.15},
{0.84,1.5,0.15},
{0.0,1.5,0.15},
{1.5,0.0,0.075},
{1.5,0.84,0.075},
{0.84,1.5,0.075},
{0.0,1.5,0.075},
{1.425,0.0,0.0},
{1.425,0.798,0.0},
{0.798,1.425,0.0},
{0.0,1.425,0.0},
{-0.84,1.5,0.15},
{-1.5,0.84,0.15},
{-1.5,0.0,0.15},
{-0.84,1.5,0.075},
{-1.5,0.84,0.075},
{-1.5,0.0,0.075},
{-0.798,1.425,0.0},
{-1.425,0.798,0.0},
{-1.425,0.0,0.0},
{-1.5,-0.84,0.15},
{-0.84,-1.5,0.15},
{0.0,-1.5,0.15},
{-1.5,-0.84,0.075},
{-0.84,-1.5,0.075},
{0.0,-1.5,0.075},
{-1.425,-0.798,0.0},
{-0.798,-1.425,0.0},
{0.0,-1.425,0.0},
{0.84,-1.5,0.15},
{1.5,-0.84,0.15},
{0.84,-1.5,0.075},
{1.5,-0.84,0.075},
{0.798,-1.425,0.0},
{1.425,-0.798,0.0},
};
@//E*O*F ducks.c//
chmod u=rw,g=r,o=r ducks.c

echo x - patches.c
sed 's/^@//' > "patches.c" <<'@//E*O*F patches.c//'
#include "tea.h"

pt patches[PATCH_COUNT] = {
{{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}},
{{4,17,18,19},{8,20,21,22},{12,23,24,25},{16,26,27,28}},
{{19,29,30,31},{22,32,33,34},{25,35,36,37},{28,38,39,40}},
{{31,41,42,1},{34,43,44,5},{37,45,46,9},{40,47,48,13}},
{{13,14,15,16},{49,50,51,52},{53,54,55,56},{57,58,59,60}},
{{16,26,27,28},{52,61,62,63},{56,64,65,66},{60,67,68,69}},
{{28,38,39,40},{63,70,71,72},{66,73,74,75},{69,76,77,78}},
{{40,47,48,13},{72,79,80,49},{75,81,82,53},{78,83,84,57}},
{{57,58,59,60},{85,86,87,88},{89,90,91,92},{93,94,95,96}},
{{60,67,68,69},{88,97,98,99},{92,100,101,102},{96,103,104,105}},
{{69,76,77,78},{99,106,107,108},{102,109,110,111},{105,112,113,114}},
{{78,83,84,57},{108,115,116,85},{111,117,118,89},{114,119,120,93}},
{{121,122,123,124},{125,126,127,128},{129,130,131,132},{133,134,135,136}},
{{124,137,138,121},{128,139,140,125},{132,141,142,129},{136,143,144,133}},
{{133,134,135,136},{145,146,147,148},{149,150,151,152},{69,153,154,155}},
{{136,143,144,133},{148,156,157,145},{152,158,159,149},{155,160,161,69}},
{{162,163,164,165},{166,167,168,169},{170,171,172,173},{174,175,176,177}},
{{165,178,179,162},{169,180,181,166},{173,182,183,170},{177,184,185,174}},
{{174,175,176,177},{186,187,188,189},{190,191,192,193},{194,195,196,197}},
{{177,184,185,174},{189,198,199,186},{193,200,201,190},{197,202,203,194}},
{{204,204,204,204},{207,208,209,210},{211,211,211,211},{212,213,214,215}},
{{204,204,204,204},{210,217,218,219},{211,211,211,211},{215,220,221,222}},
{{204,204,204,204},{219,224,225,226},{211,211,211,211},{222,227,228,229}},
{{204,204,204,204},{226,230,231,207},{211,211,211,211},{229,232,233,212}},
{{212,213,214,215},{234,235,236,237},{238,239,240,241},{242,243,244,245}},
{{215,220,221,222},{237,246,247,248},{241,249,250,251},{245,252,253,254}},
{{222,227,228,229},{248,255,256,257},{251,258,259,260},{254,261,262,263}},
{{229,232,233,212},{257,264,265,234},{260,266,267,238},{263,268,269,242}},
{{270,270,270,270},{279,280,281,282},{275,276,277,278},{271,272,273,274}},
{{270,270,270,270},{282,289,290,291},{278,286,287,288},{274,283,284,285}},
{{270,270,270,270},{291,298,299,300},{288,295,296,297},{285,292,293,294}},
{{270,270,270,270},{300,305,306,279},{297,303,304,275},{294,301,302,271}}
};
@//E*O*F patches.c//
chmod u=rw,g=r,o=r patches.c

echo Inspecting for damage in transit...
temp=/tmp/shar$$; dtemp=/tmp/.shar$$
trap "rm -f $temp $dtemp; exit" 0 1 2 3 15
cat > $temp <<\!!!
13 31 246 Makefile
9 21 137 tea.h
169 573 3658 raypot.c
310 313 5617 ducks.c
36 39 2266 patches.c
537 977 11924 total
!!!
wc Makefile tea.h raypot.c ducks.c patches.c | sed 's=[^ ]*/==' | diff -b $temp - >$dtemp
if [ -s $dtemp ]
then echo "Ouch [diff of wc output]:" ; cat $dtemp
else echo "No problems found."
fi
exit 0

Jonathan Leech

unread,
Dec 16, 1988, 9:36:30 PM12/16/88
to
In article <2...@vixen.uucp> ro...@vixen.UUCP (Ron Hitchens) writes:
> Somebody really ought to generate the data for a teacup to match this
>teapot. Any volunteers?

No teacups, but here's Jim Blinn's goblet in one of its most
primitive incarnations (folks may recall Blinn using the goblet in
forms ranging from vector to bump-mapped Bezier patch to demonstrate
the evolution of rendering techniques).

The goblet is just a surface of revolution (much simpler than the
teapot). Here are the (r,z) of the profile for those who wish to roll
their own:

R Z
-- --
.5 -0.4 (base of goblet)
.1 -0.3
.1 0
.5 0.2
.5 0.7
.4 0.7
.4 0.3 (bottom of cup)

For those who don't wish to roll their own, here's a polygon form
sampled every 60 degrees. The database format used is:

# This is a comment
PNT N X Y Z - define point N at coordinates (X,Y,Z)
POLY N M P1 .. PN - define poly N with M points numbered
P1 .. PN

Color to taste and pour.

Please don't gratuitously repost this database in other formats as
keeps happening with the teapot. It's not so interesting that yet more
net bandwidth should be spent on it.

# The goblet in polygon form
pnt 0 0.5 0 -0.4
pnt 1 0.25 0.433013 -0.4
pnt 2 -0.25 0.433013 -0.4
pnt 3 -0.5 6.12303e-17 -0.4
pnt 4 -0.25 -0.433013 -0.4
pnt 5 0.25 -0.433013 -0.4
# Band 1
pnt 6 0.1 0 -0.3
pnt 7 0.05 0.0866025 -0.3
pnt 8 -0.05 0.0866025 -0.3
pnt 9 -0.1 1.22461e-17 -0.3
pnt 10 -0.05 -0.0866025 -0.3
pnt 11 0.05 -0.0866025 -0.3
# Base polygon
poly 1 6 5 4 3 2 1 0
poly 2 4 0 1 7 6
poly 3 4 1 2 8 7
poly 4 4 2 3 9 8
poly 5 4 3 4 10 9
poly 6 4 4 5 11 10
poly 7 4 5 0 6 11
# Band 2
pnt 12 0.1 0 0
pnt 13 0.05 0.0866025 0
pnt 14 -0.05 0.0866025 0
pnt 15 -0.1 1.22461e-17 0
pnt 16 -0.05 -0.0866025 0
pnt 17 0.05 -0.0866025 0
poly 8 4 6 7 13 12
poly 9 4 7 8 14 13
poly 10 4 8 9 15 14
poly 11 4 9 10 16 15
poly 12 4 10 11 17 16
poly 13 4 11 6 12 17
# Band 3
pnt 18 0.5 0 0.2
pnt 19 0.25 0.433013 0.2
pnt 20 -0.25 0.433013 0.2
pnt 21 -0.5 6.12303e-17 0.2
pnt 22 -0.25 -0.433013 0.2
pnt 23 0.25 -0.433013 0.2
poly 14 4 12 13 19 18
poly 15 4 13 14 20 19
poly 16 4 14 15 21 20
poly 17 4 15 16 22 21
poly 18 4 16 17 23 22
poly 19 4 17 12 18 23
# Band 4
pnt 24 0.5 0 0.7
pnt 25 0.25 0.433013 0.7
pnt 26 -0.25 0.433013 0.7
pnt 27 -0.5 6.12303e-17 0.7
pnt 28 -0.25 -0.433013 0.7
pnt 29 0.25 -0.433013 0.7
poly 20 4 18 19 25 24
poly 21 4 19 20 26 25
poly 22 4 20 21 27 26
poly 23 4 21 22 28 27
poly 24 4 22 23 29 28
poly 25 4 23 18 24 29
# Band 5
pnt 30 0.4 0 0.7
pnt 31 0.2 0.34641 0.7
pnt 32 -0.2 0.34641 0.7
pnt 33 -0.4 4.89843e-17 0.7
pnt 34 -0.2 -0.34641 0.7
pnt 35 0.2 -0.34641 0.7
poly 26 4 24 25 31 30
poly 27 4 25 26 32 31
poly 28 4 26 27 33 32
poly 29 4 27 28 34 33
poly 30 4 28 29 35 34
poly 31 4 29 24 30 35
# Band 6
pnt 36 0.4 0 0.3
pnt 37 0.2 0.34641 0.3
pnt 38 -0.2 0.34641 0.3
pnt 39 -0.4 4.89843e-17 0.3
pnt 40 -0.2 -0.34641 0.3
pnt 41 0.2 -0.34641 0.3
poly 32 4 30 31 37 36
poly 33 4 31 32 38 37
poly 34 4 32 33 39 38
poly 35 4 33 34 40 39
poly 36 4 34 35 41 40
poly 37 4 35 30 36 41
# Cap polygon
poly 38 6 36 37 38 39 40 41
--
Jon Leech (le...@cs.unc.edu) __@/
``Captain Sverre, should you disobey my command, I shall exercise
my option to fire this missile, thereby airbursting a
one-kiloton warhead within ten inches of your body.''
- James Morrow, _This is the Way the World Ends_

0 new messages