*** empty log message ***
This commit is contained in:
353
progs/ggi/asc-view.c
Normal file
353
progs/ggi/asc-view.c
Normal file
@@ -0,0 +1,353 @@
|
||||
/*
|
||||
test program for the ggi-mesa driver
|
||||
|
||||
Copyright (C) 1997,1998 Uwe Maurer - uwe_maurer@t-online.de
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include <sys/time.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
#include <GL/gl.h>
|
||||
#include <GL/ggimesa.h>
|
||||
#include <ggi/ggi.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
ggi_visual_t vis,vis_mem;
|
||||
|
||||
GGIMesaContext ctx;
|
||||
|
||||
int screen_x=320,screen_y=200;
|
||||
ggi_graphtype bpp=GT_16BIT;
|
||||
|
||||
//#define ZBUFFER
|
||||
|
||||
//#define SMOOTH_NORMALS
|
||||
|
||||
void Init()
|
||||
{
|
||||
GLfloat h=(GLfloat)3/4;
|
||||
GLfloat pos[4]={5,5,-20,0};
|
||||
GLfloat specular[4]={.4,.4,.4,1};
|
||||
GLfloat diffuse[4]={.3,.3,.3,1};
|
||||
GLfloat ambient[4]={.2,.2,.2,1};
|
||||
|
||||
int err;
|
||||
|
||||
if (ggiInit()<0)
|
||||
{
|
||||
printf("ggiInit() failed\n");
|
||||
exit(1);
|
||||
}
|
||||
ctx=GGIMesaCreateContext();
|
||||
if (ctx==NULL)
|
||||
{
|
||||
printf("Can't create Context!\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
vis=ggiOpen(NULL);
|
||||
vis_mem=ggiOpen("display-memory",NULL);
|
||||
if (vis==NULL || vis_mem==NULL)
|
||||
{
|
||||
printf("Can't open ggi_visuals!\n");
|
||||
exit(1);
|
||||
}
|
||||
err=ggiSetGraphMode(vis,screen_x,screen_y,screen_x,screen_y,bpp);
|
||||
err+=ggiSetGraphMode(vis_mem,screen_x,screen_y,screen_x,screen_y,bpp);
|
||||
if (err)
|
||||
{
|
||||
printf("Can't set %ix%i\n",screen_x,screen_y);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (GGIMesaSetVisual(ctx,vis_mem,GL_TRUE,GL_FALSE)<0)
|
||||
{
|
||||
printf("GGIMesaSetVisual() failed!\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
GGIMesaMakeCurrent(ctx);
|
||||
|
||||
glViewport(0,0,screen_x,screen_y);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
glFrustum(-1,1,-h,h,1,50);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glLoadIdentity();
|
||||
glTranslatef(0,0,-9);
|
||||
glShadeModel(GL_FLAT);
|
||||
|
||||
glFrontFace(GL_CW);
|
||||
glEnable(GL_CULL_FACE);
|
||||
glEnable(GL_LIGHTING);
|
||||
glEnable(GL_LIGHT0);
|
||||
|
||||
glLightfv(GL_LIGHT0,GL_POSITION,pos);
|
||||
|
||||
glLightfv(GL_LIGHT0,GL_DIFFUSE,diffuse);
|
||||
glLightfv(GL_LIGHT0,GL_AMBIENT,ambient);
|
||||
glLightfv(GL_LIGHT0,GL_SPECULAR,specular);
|
||||
|
||||
#ifdef ZBUFFER
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#define MAX_VERTS 1000
|
||||
#define MAX_TRIS 2000
|
||||
#define MAX_LEN 1024
|
||||
#define MAX_F 100000000
|
||||
|
||||
void LoadAsc(GLuint *list,char *file)
|
||||
{
|
||||
FILE *fp;
|
||||
|
||||
GLfloat p[MAX_VERTS][3];
|
||||
GLfloat normal[MAX_VERTS][3];
|
||||
float ncount[MAX_VERTS];
|
||||
int v[MAX_TRIS][3];
|
||||
char line[MAX_LEN];
|
||||
char *s;
|
||||
int i,j;
|
||||
int verts,faces;
|
||||
GLuint v0,v1,v2;
|
||||
GLfloat n[3];
|
||||
GLfloat len,k;
|
||||
GLfloat min[3]={MAX_F,MAX_F,MAX_F};
|
||||
GLfloat max[3]={-MAX_F,-MAX_F,-MAX_F};
|
||||
char *coord_str[]={"X","Z","Y"};
|
||||
|
||||
fp=fopen(file,"r");
|
||||
if (!fp)
|
||||
{
|
||||
printf("Can't open %s!\n",file);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
while (strncmp(fgets(line,MAX_LEN,fp),"Tri-mesh",8)) ;
|
||||
|
||||
s=strstr(line,":")+1;
|
||||
verts=atoi(s);
|
||||
s=strstr(s,":")+1;
|
||||
faces=atoi(s);
|
||||
|
||||
if (verts>MAX_VERTS)
|
||||
{
|
||||
printf("Too many vertices..\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
while (strncmp(fgets(line,MAX_LEN,fp),"Vertex list",11)) ;
|
||||
|
||||
for (i=0;i<verts;i++)
|
||||
{
|
||||
while (strncmp(fgets(line,MAX_LEN,fp),"Vertex",6)) ;
|
||||
for (j=0;j<3;j++)
|
||||
{
|
||||
s=strstr(line,coord_str[j])+2;
|
||||
k=atoi(s);
|
||||
if (k>max[j]) max[j]=k;
|
||||
if (k<min[j]) min[j]=k;
|
||||
p[i][j]=k;
|
||||
}
|
||||
|
||||
}
|
||||
len=0;
|
||||
for (i=0;i<3;i++)
|
||||
{
|
||||
k=max[i]-min[i];
|
||||
if (k>len) {len=k;j=i;}
|
||||
n[i]=(max[i]+min[i])/2;
|
||||
}
|
||||
|
||||
len/=2;
|
||||
|
||||
for (i=0;i<verts;i++)
|
||||
{
|
||||
for (j=0;j<3;j++)
|
||||
{
|
||||
p[i][j]-=n[j];
|
||||
p[i][j]/=len;
|
||||
}
|
||||
}
|
||||
|
||||
*list=glGenLists(1);
|
||||
glNewList(*list,GL_COMPILE);
|
||||
glBegin(GL_TRIANGLES);
|
||||
|
||||
memset(ncount,0,sizeof(ncount));
|
||||
memset(normal,0,sizeof(normal));
|
||||
|
||||
while (strncmp(fgets(line,MAX_LEN,fp),"Face list",9)) ;
|
||||
for (i=0;i<faces;i++)
|
||||
{
|
||||
while (strncmp(fgets(line,MAX_LEN,fp),"Face",4)) ;
|
||||
s=strstr(line,"A")+2;
|
||||
v0=v[i][0]=atoi(s);
|
||||
s=strstr(line,"B")+2;
|
||||
v1=v[i][1]=atoi(s);
|
||||
s=strstr(line,"C")+2;
|
||||
v2=v[i][2]=atoi(s);
|
||||
n[0]=((p[v1][1]-p[v0][1])*(p[v2][2]-p[v0][2])
|
||||
- (p[v1][2]-p[v0][2])*(p[v2][1]-p[v0][1]));
|
||||
n[1]=((p[v1][2]-p[v0][2])*(p[v2][0]-p[v0][0])
|
||||
- (p[v1][0]-p[v0][0])*(p[v2][2]-p[v0][2]));
|
||||
n[2]=((p[v1][0]-p[v0][0])*(p[v2][1]-p[v0][1])
|
||||
- (p[v1][1]-p[v0][1])*(p[v2][0]-p[v0][0]));
|
||||
len=n[0]*n[0]+n[1]*n[1]+n[2]*n[2];
|
||||
len=sqrt(len);
|
||||
n[0]/=len;
|
||||
n[1]/=len;
|
||||
n[2]/=len;
|
||||
#ifdef SMOOTH_NORMALS
|
||||
for (j=0;j<3;j++){
|
||||
normal[v[i][j]][0]+=n[0];
|
||||
normal[v[i][j]][1]+=n[1];
|
||||
normal[v[i][j]][2]+=n[2];
|
||||
ncount[v[i][j]]++;
|
||||
}
|
||||
#else
|
||||
glNormal3fv(n);
|
||||
for (j=0;j<3;j++)
|
||||
glVertex3fv(p[v[i][j]]);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef SMOOTH_NORMALS
|
||||
for (i=0;i<verts;i++) {
|
||||
for (j=0;j<3;j++) {
|
||||
normal[i][j]/=ncount[i];
|
||||
}
|
||||
}
|
||||
for (i=0;i<faces;i++) {
|
||||
for (j=0;j<3;j++) {
|
||||
glNormal3f(normal[v[i][j]][0],
|
||||
normal[v[i][j]][1],
|
||||
normal[v[i][j]][2]);
|
||||
glVertex3fv(p[v[i][j]]);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
glEnd();
|
||||
glEndList();
|
||||
fclose(fp);
|
||||
}
|
||||
|
||||
double Display(GLuint l,int *maxframes)
|
||||
{
|
||||
int x,y;
|
||||
GLfloat col[]={.25,0,.25,1};
|
||||
int frames=0;
|
||||
struct timeval start,stop;
|
||||
double len;
|
||||
GLfloat rotate=0;
|
||||
|
||||
gettimeofday(&start,NULL);
|
||||
|
||||
|
||||
while(1)
|
||||
{
|
||||
glClearColor(0,0,0,0);
|
||||
glClearIndex(0);
|
||||
|
||||
#ifdef ZBUFFER
|
||||
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
|
||||
#else
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
#endif
|
||||
|
||||
glPushMatrix();
|
||||
|
||||
glRotatef(30,1,0,0);
|
||||
glRotatef(rotate/10,0,0,1);
|
||||
glTranslatef(-6,-4,0);
|
||||
for (y=0;y<3;y++)
|
||||
{
|
||||
glPushMatrix();
|
||||
for (x=0;x<5;x++)
|
||||
{
|
||||
glPushMatrix();
|
||||
glRotatef(rotate,y+1,-x-1,0);
|
||||
|
||||
col[0]=(GLfloat)(x+1)/4;
|
||||
col[1]=0;
|
||||
col[2]=(GLfloat)(y+1)/2;
|
||||
glMaterialfv(GL_FRONT,GL_AMBIENT,col);
|
||||
glCallList(l);
|
||||
glPopMatrix();
|
||||
glTranslatef(3,0,0);
|
||||
}
|
||||
glPopMatrix();
|
||||
glTranslatef(0,4,0);
|
||||
}
|
||||
glPopMatrix();
|
||||
glFinish();
|
||||
|
||||
ggiPutBox(vis,0,0,screen_x,screen_y,ggiDBGetBuffer(vis,0)->read);
|
||||
rotate+=10;
|
||||
frames++;
|
||||
if (frames==(*maxframes)) break;
|
||||
|
||||
if (ggiKbhit(vis))
|
||||
{
|
||||
*maxframes=frames;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
gettimeofday(&stop,NULL);
|
||||
len=(double)(stop.tv_sec-start.tv_sec)+
|
||||
(double)(stop.tv_usec-start.tv_usec)/1e6;
|
||||
return len;
|
||||
}
|
||||
|
||||
|
||||
int main(int argc,char **argv)
|
||||
{
|
||||
GLuint l;
|
||||
char *file;
|
||||
int maxframes=0;
|
||||
double len;
|
||||
|
||||
Init();
|
||||
|
||||
file=(argc>1) ? argv[1] : "asc/box.asc";
|
||||
if (argc>2) maxframes=atoi(argv[2]);
|
||||
|
||||
if (argc==1)
|
||||
{
|
||||
printf("usage: %s filename.asc\n",argv[0]);
|
||||
}
|
||||
|
||||
LoadAsc(&l,file);
|
||||
|
||||
len=Display(l,&maxframes);
|
||||
|
||||
printf("\ttime: %.3f sec\n",len);
|
||||
printf("\tframes: %i\n",maxframes);
|
||||
printf("\tfps: %.3f \n",(double)maxframes/len);
|
||||
|
||||
GGIMesaDestroyContext(ctx);
|
||||
ggiClose(vis);
|
||||
ggiClose(vis_mem);
|
||||
ggiExit();
|
||||
return 0;
|
||||
}
|
||||
|
2
progs/ggi/blah
Normal file
2
progs/ggi/blah
Normal file
@@ -0,0 +1,2 @@
|
||||
Terminating on signal 11
|
||||
|
7
progs/ggi/blat
Normal file
7
progs/ggi/blat
Normal file
@@ -0,0 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
function foobar() {
|
||||
echo "foo!"
|
||||
}
|
||||
|
||||
foobar
|
66
progs/ggi/box.asc
Normal file
66
progs/ggi/box.asc
Normal file
@@ -0,0 +1,66 @@
|
||||
Ambient light color: Red=0.039216 Green=0.039216 Blue=0.039216
|
||||
|
||||
Named object: "Object01"
|
||||
Tri-mesh, Vertices: 8 Faces: 12
|
||||
Vertex list:
|
||||
Vertex 0: X: -20 Y: -19.999998 Z: 20.000002
|
||||
Vertex 1: X: 20 Y: -19.999998 Z: 20.000002
|
||||
Vertex 2: X: 20 Y: 20.000002 Z: 19.999998
|
||||
Vertex 3: X: -20 Y: 20.000002 Z: 19.999998
|
||||
Vertex 4: X: -20 Y: -20.000002 Z: -19.999998
|
||||
Vertex 5: X: 20 Y: -20.000002 Z: -19.999998
|
||||
Vertex 6: X: 20 Y: 19.999998 Z: -20.000002
|
||||
Vertex 7: X: -20 Y: 19.999998 Z: -20.000002
|
||||
Face list:
|
||||
Face 0: A:0 B:1 C:2 AB:1 BC:1 CA:0
|
||||
Smoothing: 1
|
||||
Face 1: A:0 B:2 C:3 AB:0 BC:1 CA:1
|
||||
Smoothing: 1
|
||||
Face 2: A:0 B:4 C:5 AB:1 BC:1 CA:0
|
||||
Smoothing: 2
|
||||
Face 3: A:0 B:5 C:1 AB:0 BC:1 CA:1
|
||||
Smoothing: 2
|
||||
Face 4: A:1 B:5 C:6 AB:1 BC:1 CA:0
|
||||
Smoothing: 3
|
||||
Face 5: A:1 B:6 C:2 AB:0 BC:1 CA:1
|
||||
Smoothing: 3
|
||||
Face 6: A:2 B:6 C:7 AB:1 BC:1 CA:0
|
||||
Smoothing: 4
|
||||
Face 7: A:2 B:7 C:3 AB:0 BC:1 CA:1
|
||||
Smoothing: 4
|
||||
Face 8: A:3 B:7 C:4 AB:1 BC:1 CA:0
|
||||
Smoothing: 5
|
||||
Face 9: A:3 B:4 C:0 AB:0 BC:1 CA:1
|
||||
Smoothing: 5
|
||||
Face 10: A:4 B:7 C:6 AB:1 BC:1 CA:0
|
||||
Smoothing: 6
|
||||
Face 11: A:4 B:6 C:5 AB:0 BC:1 CA:1
|
||||
Smoothing: 6
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Page 1
|
||||
|
||||
|
||||
|
198
progs/ggi/cone.asc
Normal file
198
progs/ggi/cone.asc
Normal file
@@ -0,0 +1,198 @@
|
||||
Ambient light color: Red=0.039216 Green=0.039216 Blue=0.039216
|
||||
|
||||
Named object: "Object01"
|
||||
Tri-mesh, Vertices: 34 Faces: 64
|
||||
Vertex list:
|
||||
Vertex 0: X: 60.167416 Y: -87.419525 Z: -53.3088
|
||||
Vertex 1: X: 76.70787 Y: -87.419518 Z: -29.84565
|
||||
Vertex 2: X: 83.0103 Y: -87.419518 Z: -1.838764
|
||||
Vertex 3: X: 78.115204 Y: -87.419518 Z: 26.448057
|
||||
Vertex 4: X: 62.767834 Y: -87.41951 Z: 50.708401
|
||||
Vertex 5: X: 39.304672 Y: -87.41951 Z: 67.248848
|
||||
Vertex 6: X: 11.297782 Y: -87.41951 Z: 73.551254
|
||||
Vertex 7: X: -16.989004 Y: -87.41951 Z: 68.656158
|
||||
Vertex 8: X: -41.249344 Y: -87.41951 Z: 53.308777
|
||||
Vertex 9: X: -57.789783 Y: -87.419518 Z: 29.845612
|
||||
Vertex 10: X: -64.092194 Y: -87.419518 Z: 1.838721
|
||||
Vertex 11: X: -59.197079 Y: -87.419518 Z: -26.448097
|
||||
Vertex 12: X: -43.849678 Y: -87.419525 Z: -50.708427
|
||||
Vertex 13: X: -20.386503 Y: -87.419525 Z: -67.248856
|
||||
Vertex 14: X: 7.62039 Y: -87.419525 Z: -73.551239
|
||||
Vertex 15: X: 35.907204 Y: -87.419525 Z: -68.656105
|
||||
Vertex 16: X: 101.684875 Y: 94.590591 Z: -96.955391
|
||||
Vertex 17: X: 131.767838 Y: 94.590591 Z: -54.281792
|
||||
Vertex 18: X: 143.230377 Y: 94.590599 Z: -3.344275
|
||||
Vertex 19: X: 134.327423 Y: 94.590607 Z: 48.102379
|
||||
Vertex 20: X: 106.414383 Y: 94.590607 Z: 92.225876
|
||||
Vertex 21: X: 63.740765 Y: 94.590607 Z: 122.3088
|
||||
Vertex 22: X: 12.803238 Y: 94.590614 Z: 133.771301
|
||||
Vertex 23: X: -38.643349 Y: 94.590607 Z: 124.868355
|
||||
Vertex 24: X: -82.766846 Y: 94.590607 Z: 96.955307
|
||||
Vertex 25: X: -112.849762 Y: 94.590607 Z: 54.281677
|
||||
Vertex 26: X: -124.312256 Y: 94.590599 Z: 3.344152
|
||||
Vertex 27: X: -115.409271 Y: 94.590591 Z: -48.102493
|
||||
Vertex 28: X: -87.496201 Y: 94.590591 Z: -92.225967
|
||||
Vertex 29: X: -44.822552 Y: 94.590591 Z: -122.308861
|
||||
Vertex 30: X: 6.114983 Y: 94.590584 Z: -133.771332
|
||||
Vertex 31: X: 57.561623 Y: 94.590591 Z: -124.868301
|
||||
Vertex 32: X: 9.459057 Y: -87.419518 Z: 0.000008
|
||||
Vertex 33: X: 9.459057 Y: 94.590599 Z: -0.000008
|
||||
Face list:
|
||||
Face 0: A:0 B:1 C:32 AB:1 BC:0 CA:0
|
||||
Smoothing: 1
|
||||
Face 1: A:1 B:2 C:32 AB:1 BC:0 CA:0
|
||||
Smoothing: 1
|
||||
Face 2: A:2 B:3 C:32 AB:1 BC:0 CA:0
|
||||
Smoothing: 1
|
||||
Face 3: A:3 B:4 C:32 AB:1 BC:0 CA:0
|
||||
Smoothing: 1
|
||||
Face 4: A:4 B:5 C:32 AB:1 BC:0 CA:0
|
||||
Smoothing: 1
|
||||
Face 5: A:5 B:6 C:32 AB:1 BC:0 CA:0
|
||||
Smoothing: 1
|
||||
Face 6: A:6 B:7 C:32 AB:1 BC:0 CA:0
|
||||
Smoothing: 1
|
||||
Face 7: A:7 B:8 C:32 AB:1 BC:0 CA:0
|
||||
Smoothing: 1
|
||||
Face 8: A:8 B:9 C:32 AB:1 BC:0 CA:0
|
||||
Smoothing: 1
|
||||
Face 9: A:9 B:10 C:32 AB:1 BC:0 CA:0
|
||||
Smoothing: 1
|
||||
Face 10: A:10 B:11 C:32 AB:1 BC:0 CA:0
|
||||
|
||||
Page 1
|
||||
|
||||
|
||||
|
||||
Smoothing: 1
|
||||
Face 11: A:11 B:12 C:32 AB:1 BC:0 CA:0
|
||||
Smoothing: 1
|
||||
Face 12: A:12 B:13 C:32 AB:1 BC:0 CA:0
|
||||
Smoothing: 1
|
||||
Face 13: A:13 B:14 C:32 AB:1 BC:0 CA:0
|
||||
Smoothing: 1
|
||||
Face 14: A:14 B:15 C:32 AB:1 BC:0 CA:0
|
||||
Smoothing: 1
|
||||
Face 15: A:15 B:0 C:32 AB:1 BC:0 CA:0
|
||||
Smoothing: 1
|
||||
Face 16: A:0 B:16 C:17 AB:1 BC:1 CA:0
|
||||
Smoothing: 2
|
||||
Face 17: A:0 B:17 C:1 AB:0 BC:1 CA:1
|
||||
Smoothing: 2
|
||||
Face 18: A:1 B:17 C:18 AB:1 BC:1 CA:0
|
||||
Smoothing: 3
|
||||
Face 19: A:1 B:18 C:2 AB:0 BC:1 CA:1
|
||||
Smoothing: 3
|
||||
Face 20: A:2 B:18 C:19 AB:1 BC:1 CA:0
|
||||
Smoothing: 4
|
||||
Face 21: A:2 B:19 C:3 AB:0 BC:1 CA:1
|
||||
Smoothing: 4
|
||||
Face 22: A:3 B:19 C:20 AB:1 BC:1 CA:0
|
||||
Smoothing: 5
|
||||
Face 23: A:3 B:20 C:4 AB:0 BC:1 CA:1
|
||||
Smoothing: 5
|
||||
Face 24: A:4 B:20 C:21 AB:1 BC:1 CA:0
|
||||
Smoothing: 6
|
||||
Face 25: A:4 B:21 C:5 AB:0 BC:1 CA:1
|
||||
Smoothing: 6
|
||||
Face 26: A:5 B:21 C:22 AB:1 BC:1 CA:0
|
||||
Smoothing: 7
|
||||
Face 27: A:5 B:22 C:6 AB:0 BC:1 CA:1
|
||||
Smoothing: 7
|
||||
Face 28: A:6 B:22 C:23 AB:1 BC:1 CA:0
|
||||
Smoothing: 8
|
||||
Face 29: A:6 B:23 C:7 AB:0 BC:1 CA:1
|
||||
Smoothing: 8
|
||||
Face 30: A:7 B:23 C:24 AB:1 BC:1 CA:0
|
||||
Smoothing: 9
|
||||
Face 31: A:7 B:24 C:8 AB:0 BC:1 CA:1
|
||||
Smoothing: 9
|
||||
Face 32: A:8 B:24 C:25 AB:1 BC:1 CA:0
|
||||
Smoothing: 10
|
||||
Face 33: A:8 B:25 C:9 AB:0 BC:1 CA:1
|
||||
Smoothing: 10
|
||||
Face 34: A:9 B:25 C:26 AB:1 BC:1 CA:0
|
||||
Smoothing: 11
|
||||
Face 35: A:9 B:26 C:10 AB:0 BC:1 CA:1
|
||||
Smoothing: 11
|
||||
Face 36: A:10 B:26 C:27 AB:1 BC:1 CA:0
|
||||
Smoothing: 12
|
||||
Face 37: A:10 B:27 C:11 AB:0 BC:1 CA:1
|
||||
Smoothing: 12
|
||||
Face 38: A:11 B:27 C:28 AB:1 BC:1 CA:0
|
||||
Smoothing: 13
|
||||
Face 39: A:11 B:28 C:12 AB:0 BC:1 CA:1
|
||||
Smoothing: 13
|
||||
Face 40: A:12 B:28 C:29 AB:1 BC:1 CA:0
|
||||
Smoothing: 14
|
||||
|
||||
Page 2
|
||||
|
||||
|
||||
|
||||
Face 41: A:12 B:29 C:13 AB:0 BC:1 CA:1
|
||||
Smoothing: 14
|
||||
Face 42: A:13 B:29 C:30 AB:1 BC:1 CA:0
|
||||
Smoothing: 15
|
||||
Face 43: A:13 B:30 C:14 AB:0 BC:1 CA:1
|
||||
Smoothing: 15
|
||||
Face 44: A:14 B:30 C:31 AB:1 BC:1 CA:0
|
||||
Smoothing: 16
|
||||
Face 45: A:14 B:31 C:15 AB:0 BC:1 CA:1
|
||||
Smoothing: 16
|
||||
Face 46: A:15 B:31 C:16 AB:1 BC:1 CA:0
|
||||
Smoothing: 17
|
||||
Face 47: A:15 B:16 C:0 AB:0 BC:1 CA:1
|
||||
Smoothing: 17
|
||||
Face 48: A:16 B:33 C:17 AB:0 BC:0 CA:1
|
||||
Smoothing: 18
|
||||
Face 49: A:17 B:33 C:18 AB:0 BC:0 CA:1
|
||||
Smoothing: 18
|
||||
Face 50: A:18 B:33 C:19 AB:0 BC:0 CA:1
|
||||
Smoothing: 18
|
||||
Face 51: A:19 B:33 C:20 AB:0 BC:0 CA:1
|
||||
Smoothing: 18
|
||||
Face 52: A:20 B:33 C:21 AB:0 BC:0 CA:1
|
||||
Smoothing: 18
|
||||
Face 53: A:21 B:33 C:22 AB:0 BC:0 CA:1
|
||||
Smoothing: 18
|
||||
Face 54: A:22 B:33 C:23 AB:0 BC:0 CA:1
|
||||
Smoothing: 18
|
||||
Face 55: A:23 B:33 C:24 AB:0 BC:0 CA:1
|
||||
Smoothing: 18
|
||||
Face 56: A:24 B:33 C:25 AB:0 BC:0 CA:1
|
||||
Smoothing: 18
|
||||
Face 57: A:25 B:33 C:26 AB:0 BC:0 CA:1
|
||||
Smoothing: 18
|
||||
Face 58: A:26 B:33 C:27 AB:0 BC:0 CA:1
|
||||
Smoothing: 18
|
||||
Face 59: A:27 B:33 C:28 AB:0 BC:0 CA:1
|
||||
Smoothing: 18
|
||||
Face 60: A:28 B:33 C:29 AB:0 BC:0 CA:1
|
||||
Smoothing: 18
|
||||
Face 61: A:29 B:33 C:30 AB:0 BC:0 CA:1
|
||||
Smoothing: 18
|
||||
Face 62: A:30 B:33 C:31 AB:0 BC:0 CA:1
|
||||
Smoothing: 18
|
||||
Face 63: A:31 B:33 C:16 AB:0 BC:0 CA:1
|
||||
Smoothing: 18
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Page 3
|
||||
|
||||
|
||||
|
359
progs/ggi/gears.c
Normal file
359
progs/ggi/gears.c
Normal file
@@ -0,0 +1,359 @@
|
||||
/* $Id: gears.c,v 1.1 1999/08/21 06:27:37 jtaylor Exp $ */
|
||||
|
||||
/*
|
||||
* 3-D gear wheels. This program is in the public domain.
|
||||
*
|
||||
* Brian Paul
|
||||
*/
|
||||
|
||||
/* Conversion to GLUT by Mark J. Kilgard */
|
||||
|
||||
/*
|
||||
* $Log: gears.c,v $
|
||||
* Revision 1.1 1999/08/21 06:27:37 jtaylor
|
||||
* *** empty log message ***
|
||||
*
|
||||
* Revision 1.5 1999/07/31 21:51:09 jtaylor
|
||||
* *** empty log message ***
|
||||
*
|
||||
* Revision 3.2 1999/06/03 17:07:36 brianp
|
||||
* an extra quad was being drawn in front and back faces
|
||||
*
|
||||
* Revision 3.1 1998/11/03 02:49:10 brianp
|
||||
* added fps output
|
||||
*
|
||||
* Revision 3.0 1998/02/14 18:42:29 brianp
|
||||
* initial rev
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#include <math.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <GL/glut.h>
|
||||
|
||||
#ifndef M_PI
|
||||
#define M_PI 3.14159265
|
||||
#endif
|
||||
|
||||
static GLint T0 = 0;
|
||||
static GLint Frames = 0;
|
||||
|
||||
|
||||
/**
|
||||
|
||||
Draw a gear wheel. You'll probably want to call this function when
|
||||
building a display list since we do a lot of trig here.
|
||||
|
||||
Input: inner_radius - radius of hole at center
|
||||
outer_radius - radius at center of teeth
|
||||
width - width of gear
|
||||
teeth - number of teeth
|
||||
tooth_depth - depth of tooth
|
||||
|
||||
**/
|
||||
|
||||
static void
|
||||
gear(GLfloat inner_radius, GLfloat outer_radius, GLfloat width,
|
||||
GLint teeth, GLfloat tooth_depth)
|
||||
{
|
||||
GLint i;
|
||||
GLfloat r0, r1, r2;
|
||||
GLfloat angle, da;
|
||||
GLfloat u, v, len;
|
||||
|
||||
r0 = inner_radius;
|
||||
r1 = outer_radius - tooth_depth / 2.0;
|
||||
r2 = outer_radius + tooth_depth / 2.0;
|
||||
|
||||
da = 2.0 * M_PI / teeth / 4.0;
|
||||
|
||||
glShadeModel(GL_FLAT);
|
||||
|
||||
glNormal3f(0.0, 0.0, 1.0);
|
||||
|
||||
/* draw front face */
|
||||
glBegin(GL_QUAD_STRIP);
|
||||
for (i = 0; i <= teeth; i++) {
|
||||
angle = i * 2.0 * M_PI / teeth;
|
||||
glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
|
||||
glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
|
||||
if (i < teeth) {
|
||||
glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
|
||||
glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5);
|
||||
}
|
||||
}
|
||||
glEnd();
|
||||
|
||||
/* draw front sides of teeth */
|
||||
glBegin(GL_QUADS);
|
||||
da = 2.0 * M_PI / teeth / 4.0;
|
||||
for (i = 0; i < teeth; i++) {
|
||||
angle = i * 2.0 * M_PI / teeth;
|
||||
|
||||
glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
|
||||
glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5);
|
||||
glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), width * 0.5);
|
||||
glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5);
|
||||
}
|
||||
glEnd();
|
||||
|
||||
glNormal3f(0.0, 0.0, -1.0);
|
||||
|
||||
/* draw back face */
|
||||
glBegin(GL_QUAD_STRIP);
|
||||
for (i = 0; i <= teeth; i++) {
|
||||
angle = i * 2.0 * M_PI / teeth;
|
||||
glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
|
||||
glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
|
||||
if (i < teeth) {
|
||||
glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5);
|
||||
glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
|
||||
}
|
||||
}
|
||||
glEnd();
|
||||
|
||||
/* draw back sides of teeth */
|
||||
glBegin(GL_QUADS);
|
||||
da = 2.0 * M_PI / teeth / 4.0;
|
||||
for (i = 0; i < teeth; i++) {
|
||||
angle = i * 2.0 * M_PI / teeth;
|
||||
|
||||
glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5);
|
||||
glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), -width * 0.5);
|
||||
glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5);
|
||||
glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
|
||||
}
|
||||
glEnd();
|
||||
|
||||
/* draw outward faces of teeth */
|
||||
glBegin(GL_QUAD_STRIP);
|
||||
for (i = 0; i < teeth; i++) {
|
||||
angle = i * 2.0 * M_PI / teeth;
|
||||
|
||||
glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
|
||||
glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
|
||||
u = r2 * cos(angle + da) - r1 * cos(angle);
|
||||
v = r2 * sin(angle + da) - r1 * sin(angle);
|
||||
len = sqrt(u * u + v * v);
|
||||
u /= len;
|
||||
v /= len;
|
||||
glNormal3f(v, -u, 0.0);
|
||||
glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5);
|
||||
glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5);
|
||||
glNormal3f(cos(angle), sin(angle), 0.0);
|
||||
glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), width * 0.5);
|
||||
glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), -width * 0.5);
|
||||
u = r1 * cos(angle + 3 * da) - r2 * cos(angle + 2 * da);
|
||||
v = r1 * sin(angle + 3 * da) - r2 * sin(angle + 2 * da);
|
||||
glNormal3f(v, -u, 0.0);
|
||||
glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5);
|
||||
glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5);
|
||||
glNormal3f(cos(angle), sin(angle), 0.0);
|
||||
}
|
||||
|
||||
glVertex3f(r1 * cos(0), r1 * sin(0), width * 0.5);
|
||||
glVertex3f(r1 * cos(0), r1 * sin(0), -width * 0.5);
|
||||
|
||||
glEnd();
|
||||
|
||||
glShadeModel(GL_SMOOTH);
|
||||
|
||||
/* draw inside radius cylinder */
|
||||
glBegin(GL_QUAD_STRIP);
|
||||
for (i = 0; i <= teeth; i++) {
|
||||
angle = i * 2.0 * M_PI / teeth;
|
||||
glNormal3f(-cos(angle), -sin(angle), 0.0);
|
||||
glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
|
||||
glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
|
||||
}
|
||||
glEnd();
|
||||
|
||||
}
|
||||
|
||||
static GLfloat view_rotx = 20.0, view_roty = 30.0, view_rotz = 0.0;
|
||||
static GLint gear1, gear2, gear3;
|
||||
static GLfloat angle = 0.0;
|
||||
|
||||
static void
|
||||
draw(void)
|
||||
{
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
|
||||
glPushMatrix();
|
||||
glRotatef(view_rotx, 1.0, 0.0, 0.0);
|
||||
glRotatef(view_roty, 0.0, 1.0, 0.0);
|
||||
glRotatef(view_rotz, 0.0, 0.0, 1.0);
|
||||
|
||||
glPushMatrix();
|
||||
glTranslatef(-3.0, -2.0, 0.0);
|
||||
glRotatef(angle, 0.0, 0.0, 1.0);
|
||||
glCallList(gear1);
|
||||
glPopMatrix();
|
||||
|
||||
glPushMatrix();
|
||||
glTranslatef(3.1, -2.0, 0.0);
|
||||
glRotatef(-2.0 * angle - 9.0, 0.0, 0.0, 1.0);
|
||||
glCallList(gear2);
|
||||
glPopMatrix();
|
||||
|
||||
glPushMatrix();
|
||||
glTranslatef(-3.1, 4.2, 0.0);
|
||||
glRotatef(-2.0 * angle - 25.0, 0.0, 0.0, 1.0);
|
||||
glCallList(gear3);
|
||||
glPopMatrix();
|
||||
|
||||
glPopMatrix();
|
||||
|
||||
glutSwapBuffers();
|
||||
|
||||
Frames++;
|
||||
{
|
||||
GLint t = glutGet(GLUT_ELAPSED_TIME);
|
||||
if (t - T0 >= 5000) {
|
||||
GLfloat seconds = (t - T0) / 1000.0;
|
||||
GLfloat fps = Frames / seconds;
|
||||
printf("%d frames in %g seconds = %g FPS\n", Frames, seconds, fps);
|
||||
T0 = t;
|
||||
Frames = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
idle(void)
|
||||
{
|
||||
angle += 2.0;
|
||||
glutPostRedisplay();
|
||||
}
|
||||
|
||||
/* change view angle, exit upon ESC */
|
||||
/* ARGSUSED1 */
|
||||
static void
|
||||
key(unsigned char k, int x, int y)
|
||||
{
|
||||
switch (k) {
|
||||
case 'z':
|
||||
view_rotz += 5.0;
|
||||
break;
|
||||
case 'Z':
|
||||
view_rotz -= 5.0;
|
||||
break;
|
||||
case 27: /* Escape */
|
||||
exit(0);
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
glutPostRedisplay();
|
||||
}
|
||||
|
||||
/* change view angle */
|
||||
/* ARGSUSED1 */
|
||||
static void
|
||||
special(int k, int x, int y)
|
||||
{
|
||||
switch (k) {
|
||||
case GLUT_KEY_UP:
|
||||
view_rotx += 5.0;
|
||||
break;
|
||||
case GLUT_KEY_DOWN:
|
||||
view_rotx -= 5.0;
|
||||
break;
|
||||
case GLUT_KEY_LEFT:
|
||||
view_roty += 5.0;
|
||||
break;
|
||||
case GLUT_KEY_RIGHT:
|
||||
view_roty -= 5.0;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
glutPostRedisplay();
|
||||
}
|
||||
|
||||
/* new window size or exposure */
|
||||
static void
|
||||
reshape(int width, int height)
|
||||
{
|
||||
GLfloat h = (GLfloat) height / (GLfloat) width;
|
||||
|
||||
glViewport(0, 0, (GLint) width, (GLint) height);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
glFrustum(-1.0, 1.0, -h, h, 5.0, 60.0);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glLoadIdentity();
|
||||
glTranslatef(0.0, 0.0, -40.0);
|
||||
}
|
||||
|
||||
static void
|
||||
init(void)
|
||||
{
|
||||
static GLfloat pos[4] =
|
||||
{5.0, 5.0, 10.0, 0.0};
|
||||
static GLfloat red[4] =
|
||||
{0.8, 0.1, 0.0, 1.0};
|
||||
static GLfloat green[4] =
|
||||
{0.0, 0.8, 0.2, 1.0};
|
||||
static GLfloat blue[4] =
|
||||
{0.2, 0.2, 1.0, 1.0};
|
||||
|
||||
glLightfv(GL_LIGHT0, GL_POSITION, pos);
|
||||
glEnable(GL_CULL_FACE);
|
||||
glEnable(GL_LIGHTING);
|
||||
glEnable(GL_LIGHT0);
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
|
||||
/* make the gears */
|
||||
gear1 = glGenLists(1);
|
||||
glNewList(gear1, GL_COMPILE);
|
||||
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red);
|
||||
gear(1.0, 4.0, 1.0, 20, 0.7);
|
||||
glEndList();
|
||||
|
||||
gear2 = glGenLists(1);
|
||||
glNewList(gear2, GL_COMPILE);
|
||||
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, green);
|
||||
gear(0.5, 2.0, 2.0, 10, 0.7);
|
||||
glEndList();
|
||||
|
||||
gear3 = glGenLists(1);
|
||||
glNewList(gear3, GL_COMPILE);
|
||||
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue);
|
||||
gear(1.3, 2.0, 0.5, 10, 0.7);
|
||||
glEndList();
|
||||
|
||||
glEnable(GL_NORMALIZE);
|
||||
}
|
||||
|
||||
void
|
||||
visible(int vis)
|
||||
{
|
||||
if (vis == GLUT_VISIBLE)
|
||||
glutIdleFunc(idle);
|
||||
else
|
||||
glutIdleFunc(NULL);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
glutInit(&argc, argv);
|
||||
glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
|
||||
|
||||
glutInitWindowPosition(0, 0);
|
||||
glutInitWindowSize(300, 300);
|
||||
glutCreateWindow("Gears");
|
||||
init();
|
||||
|
||||
glutDisplayFunc(draw);
|
||||
glutReshapeFunc(reshape);
|
||||
glutKeyboardFunc(key);
|
||||
glutSpecialFunc(special);
|
||||
glutVisibilityFunc(visible);
|
||||
|
||||
glutMainLoop();
|
||||
return 0; /* ANSI C requires main to return int. */
|
||||
}
|
359
progs/ggi/gears2.c
Normal file
359
progs/ggi/gears2.c
Normal file
@@ -0,0 +1,359 @@
|
||||
/* gears.c */
|
||||
|
||||
/*
|
||||
* 3-D gear wheels. This program is in the public domain.
|
||||
*
|
||||
* Brian Paul
|
||||
* modified by Uwe Maurer (uwe_maurer@t-online.de)
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
#include <stdlib.h>
|
||||
#include <ggi/ggi.h>
|
||||
#include <GL/ggimesa.h>
|
||||
#ifndef M_PI
|
||||
# define M_PI 3.14159265
|
||||
#endif
|
||||
|
||||
|
||||
ggi_visual_t vis;
|
||||
char text[100];
|
||||
|
||||
/*
|
||||
* Draw a gear wheel. You'll probably want to call this function when
|
||||
* building a display list since we do a lot of trig here.
|
||||
*
|
||||
* Input: inner_radius - radius of hole at center
|
||||
* outer_radius - radius at center of teeth
|
||||
* width - width of gear
|
||||
* teeth - number of teeth
|
||||
* tooth_depth - depth of tooth
|
||||
*/
|
||||
static void gear( GLfloat inner_radius, GLfloat outer_radius, GLfloat width,
|
||||
GLint teeth, GLfloat tooth_depth )
|
||||
{
|
||||
GLint i;
|
||||
GLfloat r0, r1, r2;
|
||||
GLfloat angle, da;
|
||||
GLfloat u, v, len;
|
||||
|
||||
r0 = inner_radius;
|
||||
r1 = outer_radius - tooth_depth/2.0;
|
||||
r2 = outer_radius + tooth_depth/2.0;
|
||||
|
||||
da = 2.0*M_PI / teeth / 4.0;
|
||||
|
||||
glShadeModel( GL_FLAT );
|
||||
|
||||
glNormal3f( 0.0, 0.0, 1.0 );
|
||||
|
||||
/* draw front face */
|
||||
glBegin( GL_QUAD_STRIP );
|
||||
for (i=0;i<=teeth;i++) {
|
||||
angle = i * 2.0*M_PI / teeth;
|
||||
glVertex3f( r0*cos(angle), r0*sin(angle), width*0.5 );
|
||||
glVertex3f( r1*cos(angle), r1*sin(angle), width*0.5 );
|
||||
glVertex3f( r0*cos(angle), r0*sin(angle), width*0.5 );
|
||||
glVertex3f( r1*cos(angle+3*da), r1*sin(angle+3*da), width*0.5 );
|
||||
}
|
||||
glEnd();
|
||||
|
||||
/* draw front sides of teeth */
|
||||
glBegin( GL_QUADS );
|
||||
da = 2.0*M_PI / teeth / 4.0;
|
||||
for (i=0;i<teeth;i++) {
|
||||
angle = i * 2.0*M_PI / teeth;
|
||||
|
||||
glVertex3f( r1*cos(angle), r1*sin(angle), width*0.5 );
|
||||
glVertex3f( r2*cos(angle+da), r2*sin(angle+da), width*0.5 );
|
||||
glVertex3f( r2*cos(angle+2*da), r2*sin(angle+2*da), width*0.5 );
|
||||
glVertex3f( r1*cos(angle+3*da), r1*sin(angle+3*da), width*0.5 );
|
||||
}
|
||||
glEnd();
|
||||
|
||||
|
||||
glNormal3f( 0.0, 0.0, -1.0 );
|
||||
|
||||
/* draw back face */
|
||||
glBegin( GL_QUAD_STRIP );
|
||||
for (i=0;i<=teeth;i++) {
|
||||
angle = i * 2.0*M_PI / teeth;
|
||||
glVertex3f( r1*cos(angle), r1*sin(angle), -width*0.5 );
|
||||
glVertex3f( r0*cos(angle), r0*sin(angle), -width*0.5 );
|
||||
glVertex3f( r1*cos(angle+3*da), r1*sin(angle+3*da), -width*0.5 );
|
||||
glVertex3f( r0*cos(angle), r0*sin(angle), -width*0.5 );
|
||||
}
|
||||
glEnd();
|
||||
|
||||
/* draw back sides of teeth */
|
||||
glBegin( GL_QUADS );
|
||||
da = 2.0*M_PI / teeth / 4.0;
|
||||
for (i=0;i<teeth;i++) {
|
||||
angle = i * 2.0*M_PI / teeth;
|
||||
|
||||
glVertex3f( r1*cos(angle+3*da), r1*sin(angle+3*da), -width*0.5 );
|
||||
glVertex3f( r2*cos(angle+2*da), r2*sin(angle+2*da), -width*0.5 );
|
||||
glVertex3f( r2*cos(angle+da), r2*sin(angle+da), -width*0.5 );
|
||||
glVertex3f( r1*cos(angle), r1*sin(angle), -width*0.5 );
|
||||
}
|
||||
glEnd();
|
||||
|
||||
|
||||
/* draw outward faces of teeth */
|
||||
glBegin( GL_QUAD_STRIP );
|
||||
for (i=0;i<teeth;i++) {
|
||||
angle = i * 2.0*M_PI / teeth;
|
||||
|
||||
glVertex3f( r1*cos(angle), r1*sin(angle), width*0.5 );
|
||||
glVertex3f( r1*cos(angle), r1*sin(angle), -width*0.5 );
|
||||
u = r2*cos(angle+da) - r1*cos(angle);
|
||||
v = r2*sin(angle+da) - r1*sin(angle);
|
||||
len = sqrt( u*u + v*v );
|
||||
u /= len;
|
||||
v /= len;
|
||||
glNormal3f( v, -u, 0.0 );
|
||||
glVertex3f( r2*cos(angle+da), r2*sin(angle+da), width*0.5 );
|
||||
glVertex3f( r2*cos(angle+da), r2*sin(angle+da), -width*0.5 );
|
||||
glNormal3f( cos(angle), sin(angle), 0.0 );
|
||||
glVertex3f( r2*cos(angle+2*da), r2*sin(angle+2*da), width*0.5 );
|
||||
glVertex3f( r2*cos(angle+2*da), r2*sin(angle+2*da), -width*0.5 );
|
||||
u = r1*cos(angle+3*da) - r2*cos(angle+2*da);
|
||||
v = r1*sin(angle+3*da) - r2*sin(angle+2*da);
|
||||
glNormal3f( v, -u, 0.0 );
|
||||
glVertex3f( r1*cos(angle+3*da), r1*sin(angle+3*da), width*0.5 );
|
||||
glVertex3f( r1*cos(angle+3*da), r1*sin(angle+3*da), -width*0.5 );
|
||||
glNormal3f( cos(angle), sin(angle), 0.0 );
|
||||
}
|
||||
|
||||
glVertex3f( r1*cos(0), r1*sin(0), width*0.5 );
|
||||
glVertex3f( r1*cos(0), r1*sin(0), -width*0.5 );
|
||||
|
||||
glEnd();
|
||||
|
||||
|
||||
glShadeModel( GL_SMOOTH );
|
||||
|
||||
/* draw inside radius cylinder */
|
||||
glBegin( GL_QUAD_STRIP );
|
||||
for (i=0;i<=teeth;i++) {
|
||||
angle = i * 2.0*M_PI / teeth;
|
||||
glNormal3f( -cos(angle), -sin(angle), 0.0 );
|
||||
glVertex3f( r0*cos(angle), r0*sin(angle), -width*0.5 );
|
||||
glVertex3f( r0*cos(angle), r0*sin(angle), width*0.5 );
|
||||
}
|
||||
glEnd();
|
||||
|
||||
}
|
||||
|
||||
|
||||
static GLfloat view_rotx=20.0, view_roty=30.0, view_rotz=0.0;
|
||||
static GLint gear1, gear2, gear3;
|
||||
static GLfloat angle = 0.0;
|
||||
|
||||
static GLuint limit;
|
||||
static GLuint count = 1;
|
||||
|
||||
|
||||
static void draw( void )
|
||||
{
|
||||
glClearColor(0,0,0,0);
|
||||
glClearIndex(0);
|
||||
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
|
||||
|
||||
glPushMatrix();
|
||||
glRotatef( view_rotx, 1.0, 0.0, 0.0 );
|
||||
glRotatef( view_roty, 0.0, 1.0, 0.0 );
|
||||
glRotatef( view_rotz, 0.0, 0.0, 1.0 );
|
||||
|
||||
glPushMatrix();
|
||||
glTranslatef( -3.0, -2.0, 0.0 );
|
||||
glRotatef( angle, 0.0, 0.0, 1.0 );
|
||||
glCallList(gear1);
|
||||
glPopMatrix();
|
||||
|
||||
glPushMatrix();
|
||||
glTranslatef( 3.1, -2.0, 0.0 );
|
||||
glRotatef( -2.0*angle-9.0, 0.0, 0.0, 1.0 );
|
||||
glCallList(gear2);
|
||||
glPopMatrix();
|
||||
|
||||
glPushMatrix();
|
||||
glTranslatef( -3.1, 4.2, 0.0 );
|
||||
glRotatef( -2.0*angle-25.0, 0.0, 0.0, 1.0 );
|
||||
glCallList(gear3);
|
||||
glPopMatrix();
|
||||
|
||||
glPopMatrix();
|
||||
glFlush();
|
||||
glFinish();
|
||||
|
||||
#if 0
|
||||
ggiSetGCForeground(vis,255);
|
||||
ggiPuts(vis,0,0,"Mesa -> GGI");
|
||||
ggiPuts(vis,0,ggiGetInfo(vis)->mode->visible.y," Mesa -> GGI");
|
||||
|
||||
ggiPuts(vis,0,16,text);
|
||||
ggiPuts(vis,0,ggiGetInfo(vis)->mode->visible.y+16,text);
|
||||
#endif
|
||||
|
||||
GGIMesaSwapBuffers();
|
||||
|
||||
count++;
|
||||
if (count==limit) {
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
static void idle( void )
|
||||
{
|
||||
angle += 2.0;
|
||||
draw();
|
||||
}
|
||||
|
||||
/* new window size or exposure */
|
||||
static void reshape( int width, int height )
|
||||
{
|
||||
GLfloat h = (GLfloat) height / (GLfloat) width;
|
||||
|
||||
glViewport(0, 0, (GLint)width, (GLint)height);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
glFrustum( -1.0, 1.0, -h, h, 5.0, 60.0 );
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glLoadIdentity();
|
||||
glTranslatef( 0.0, 0.0, -40.0 );
|
||||
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
|
||||
|
||||
}
|
||||
|
||||
|
||||
static void init( void )
|
||||
{
|
||||
static GLfloat pos[4] = {5.0, 5.0, 10.0, 0.0 };
|
||||
static GLfloat red[4] = {0.8, 0.1, 0.0, 1.0 };
|
||||
static GLfloat green[4] = {0.0, 0.8, 0.2, 1.0 };
|
||||
static GLfloat blue[4] = {0.2, 0.2, 1.0, 1.0 };
|
||||
|
||||
glLightfv( GL_LIGHT0, GL_POSITION, pos );
|
||||
glEnable( GL_CULL_FACE );
|
||||
glEnable( GL_LIGHTING );
|
||||
glEnable( GL_LIGHT0 );
|
||||
glEnable( GL_DEPTH_TEST );
|
||||
|
||||
/* make the gears */
|
||||
gear1 = glGenLists(1);
|
||||
glNewList(gear1, GL_COMPILE);
|
||||
glMaterialfv( GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red );
|
||||
glIndexi(1);
|
||||
gear( 1.0, 4.0, 1.0, 20, 0.7 );
|
||||
glEndList();
|
||||
|
||||
gear2 = glGenLists(1);
|
||||
glNewList(gear2, GL_COMPILE);
|
||||
glMaterialfv( GL_FRONT, GL_AMBIENT_AND_DIFFUSE, green );
|
||||
glIndexi(2);
|
||||
gear( 0.5, 2.0, 2.0, 10, 0.7 );
|
||||
glEndList();
|
||||
|
||||
gear3 = glGenLists(1);
|
||||
glNewList(gear3, GL_COMPILE);
|
||||
glMaterialfv( GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue );
|
||||
glIndexi(3);
|
||||
gear( 1.3, 2.0, 0.5, 10, 0.7 );
|
||||
glEndList();
|
||||
|
||||
glEnable( GL_NORMALIZE );
|
||||
}
|
||||
|
||||
static void usage(char *s)
|
||||
{
|
||||
printf("%s visible_x visible_y virtual_x virtual_y bpp db_flag\n",s);
|
||||
printf("example:\n");
|
||||
printf("%s 320 200 320 400 8 1\n",s);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
int main( int argc, char *argv[] )
|
||||
{
|
||||
GGIMesaContext ctx;
|
||||
int vis_x,vis_y,vir_x,vir_y,bpp,db_flag,gt;
|
||||
ggi_mode mode;
|
||||
|
||||
limit=0;
|
||||
|
||||
if (argc<7) usage(argv[0]);
|
||||
|
||||
vis_x=atoi(argv[1]);
|
||||
vis_y=atoi(argv[2]);
|
||||
vir_x=atoi(argv[3]);
|
||||
vir_y=atoi(argv[4]);
|
||||
bpp=atoi(argv[5]);
|
||||
db_flag=atoi(argv[6]);
|
||||
|
||||
switch(bpp)
|
||||
{
|
||||
case 4: gt=GT_4BIT;break;
|
||||
case 8: gt=GT_8BIT;break;
|
||||
case 15:gt=GT_15BIT;break;
|
||||
case 16:gt=GT_16BIT;break;
|
||||
case 24:gt=GT_24BIT;break;
|
||||
case 32:gt=GT_32BIT;break;
|
||||
default:
|
||||
printf("%i Bits per Pixel ???\n",bpp);
|
||||
exit(1);
|
||||
}
|
||||
sprintf(text,"%sx%s %i colors, RGB mode, %s",
|
||||
argv[1],argv[2],1<<bpp,
|
||||
(db_flag) ? "doublebuffer" : "no doublebuffer");
|
||||
|
||||
if (ggiInit()<0)
|
||||
{
|
||||
printf("ggiInit() failed\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
ctx=GGIMesaCreateContext();
|
||||
if (ctx==NULL)
|
||||
{
|
||||
printf("GGIMesaCreateContext() failed\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
vis=ggiOpen(NULL);
|
||||
if (vis==NULL)
|
||||
{
|
||||
printf("ggiOpen() failed\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (ggiSetGraphMode(vis,vis_x,vis_y,vir_x,vir_y,gt)<0)
|
||||
{
|
||||
printf("%s: can't set graphmode (%i %i %i %i) %i BPP\n",
|
||||
argv[0],vis_x,vis_y,vir_x,vir_y,bpp);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (GGIMesaSetVisual(ctx,vis,GL_TRUE,db_flag)<0)
|
||||
{
|
||||
printf ("GGIMesaSetVisual() failed\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
GGIMesaMakeCurrent(ctx);
|
||||
ggiGetMode(vis,&mode);
|
||||
|
||||
reshape(mode.visible.x,mode.visible.y);
|
||||
|
||||
init();
|
||||
|
||||
while (!ggiKbhit(vis)) idle();
|
||||
|
||||
GGIMesaDestroyContext(ctx);
|
||||
ggiClose(vis);
|
||||
|
||||
printf("%s\n",text);
|
||||
|
||||
ggiExit();
|
||||
return 0;
|
||||
}
|
132
progs/ggi/sphere.asc
Normal file
132
progs/ggi/sphere.asc
Normal file
@@ -0,0 +1,132 @@
|
||||
Ambient light color: Red=0.039216 Green=0.039216 Blue=0.039216
|
||||
|
||||
Named object: "Object01"
|
||||
Tri-mesh, Vertices: 20 Faces: 36
|
||||
Vertex list:
|
||||
Vertex 0: X: -210 Y: -432.781738 Z: 180.000031
|
||||
Vertex 1: X: -610.810303 Y: 144.260559 Z: 103.580154
|
||||
Vertex 2: X: 56.586655 Y: 144.260544 Z: -128.902023
|
||||
Vertex 3: X: -75.776352 Y: 144.260605 Z: 565.321838
|
||||
Vertex 4: X: -462.815979 Y: -347.937683 Z: 131.797302
|
||||
Vertex 5: X: -616.506042 Y: -126.67173 Z: 102.494209
|
||||
Vertex 6: X: -41.847229 Y: -347.937683 Z: -14.843644
|
||||
Vertex 7: X: 60.375015 Y: -126.671753 Z: -133.291641
|
||||
Vertex 8: X: -125.336807 Y: -347.937653 Z: 423.046448
|
||||
Vertex 9: X: -73.868958 Y: -126.671692 Z: 570.797424
|
||||
Vertex 10: X: -448.353271 Y: 237.304672 Z: -92.34951
|
||||
Vertex 11: X: -192.440964 Y: 237.304672 Z: -181.494431
|
||||
Vertex 12: X: 145.038193 Y: 237.304672 Z: 109.754745
|
||||
Vertex 13: X: 94.283768 Y: 237.304688 Z: 375.953766
|
||||
Vertex 14: X: -326.684937 Y: 237.304733 Z: 522.594727
|
||||
Vertex 15: X: -531.842834 Y: 237.304718 Z: 345.540588
|
||||
Vertex 16: X: -331.419525 Y: -225.964966 Z: -168.564438
|
||||
Vertex 17: X: 152.575485 Y: -225.964935 Z: 249.129868
|
||||
Vertex 18: X: -451.155914 Y: -225.964905 Z: 459.434662
|
||||
Vertex 19: X: -298.413483 Y: 423.31897 Z: 163.142761
|
||||
Face list:
|
||||
Face 0: A:0 B:4 C:6 AB:1 BC:1 CA:1
|
||||
Face 1: A:4 B:5 C:16 AB:1 BC:1 CA:1
|
||||
Face 2: A:4 B:16 C:6 AB:1 BC:1 CA:1
|
||||
Face 3: A:6 B:16 C:7 AB:1 BC:1 CA:1
|
||||
Face 4: A:5 B:1 C:10 AB:1 BC:1 CA:1
|
||||
Face 5: A:5 B:10 C:16 AB:1 BC:1 CA:1
|
||||
Face 6: A:16 B:10 C:11 AB:1 BC:1 CA:1
|
||||
Face 7: A:16 B:11 C:7 AB:1 BC:1 CA:1
|
||||
Face 8: A:7 B:11 C:2 AB:1 BC:1 CA:1
|
||||
Face 9: A:0 B:6 C:8 AB:1 BC:1 CA:1
|
||||
Face 10: A:6 B:7 C:17 AB:1 BC:1 CA:1
|
||||
Face 11: A:6 B:17 C:8 AB:1 BC:1 CA:1
|
||||
Face 12: A:8 B:17 C:9 AB:1 BC:1 CA:1
|
||||
Face 13: A:7 B:2 C:12 AB:1 BC:1 CA:1
|
||||
Face 14: A:7 B:12 C:17 AB:1 BC:1 CA:1
|
||||
Face 15: A:17 B:12 C:13 AB:1 BC:1 CA:1
|
||||
Face 16: A:17 B:13 C:9 AB:1 BC:1 CA:1
|
||||
Face 17: A:9 B:13 C:3 AB:1 BC:1 CA:1
|
||||
Face 18: A:0 B:8 C:4 AB:1 BC:1 CA:1
|
||||
Face 19: A:8 B:9 C:18 AB:1 BC:1 CA:1
|
||||
Face 20: A:8 B:18 C:4 AB:1 BC:1 CA:1
|
||||
Face 21: A:4 B:18 C:5 AB:1 BC:1 CA:1
|
||||
Face 22: A:9 B:3 C:14 AB:1 BC:1 CA:1
|
||||
Face 23: A:9 B:14 C:18 AB:1 BC:1 CA:1
|
||||
Face 24: A:18 B:14 C:15 AB:1 BC:1 CA:1
|
||||
Face 25: A:18 B:15 C:5 AB:1 BC:1 CA:1
|
||||
Face 26: A:5 B:15 C:1 AB:1 BC:1 CA:1
|
||||
Face 27: A:1 B:15 C:10 AB:1 BC:1 CA:1
|
||||
Face 28: A:15 B:14 C:19 AB:1 BC:1 CA:1
|
||||
Face 29: A:15 B:19 C:10 AB:1 BC:1 CA:1
|
||||
Face 30: A:10 B:19 C:11 AB:1 BC:1 CA:1
|
||||
Face 31: A:14 B:3 C:13 AB:1 BC:1 CA:1
|
||||
Face 32: A:14 B:13 C:19 AB:1 BC:1 CA:1
|
||||
Face 33: A:19 B:13 C:12 AB:1 BC:1 CA:1
|
||||
Face 34: A:19 B:12 C:11 AB:1 BC:1 CA:1
|
||||
|
||||
Page 1
|
||||
|
||||
|
||||
|
||||
Face 35: A:11 B:12 C:2 AB:1 BC:1 CA:1
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Page 2
|
||||
|
||||
|
||||
|
264
progs/ggi/torus.asc
Normal file
264
progs/ggi/torus.asc
Normal file
@@ -0,0 +1,264 @@
|
||||
Ambient light color: Red=0.039216 Green=0.039216 Blue=0.039216
|
||||
|
||||
Named object: "Object01"
|
||||
Tri-mesh, Vertices: 40 Faces: 80
|
||||
Vertex list:
|
||||
Vertex 0: X: -50.170624 Y: -0.000026 Z: -240.147842
|
||||
Vertex 1: X: -80.584503 Y: -63.958851 Z: -205.014572
|
||||
Vertex 2: X: -129.795166 Y: -39.528744 Z: -148.16774
|
||||
Vertex 3: X: -129.795166 Y: 39.528721 Z: -148.16774
|
||||
Vertex 4: X: -80.584503 Y: 63.958797 Z: -205.014572
|
||||
Vertex 5: X: 85.963654 Y: -0.000002 Z: 31.490465
|
||||
Vertex 6: X: 39.614838 Y: -63.958828 Z: 34.827602
|
||||
Vertex 7: X: -35.37915 Y: -39.528728 Z: 40.227196
|
||||
Vertex 8: X: -35.37912 Y: 39.528736 Z: 40.227188
|
||||
Vertex 9: X: 39.614838 Y: 63.95882 Z: 34.827595
|
||||
Vertex 10: X: -9.852051 Y: 0.000023 Z: 319.829254
|
||||
Vertex 11: X: -44.985352 Y: -63.958805 Z: 289.415405
|
||||
Vertex 12: X: -101.832199 Y: -39.528709 Z: 240.204758
|
||||
Vertex 13: X: -101.832184 Y: 39.528755 Z: 240.204773
|
||||
Vertex 14: X: -44.985352 Y: 63.958843 Z: 289.415405
|
||||
Vertex 15: X: -281.490326 Y: 0.000035 Z: 455.963654
|
||||
Vertex 16: X: -284.827484 Y: -63.958794 Z: 409.614868
|
||||
Vertex 17: X: -290.227112 Y: -39.528702 Z: 334.62085
|
||||
Vertex 18: X: -290.227112 Y: 39.528763 Z: 334.62088
|
||||
Vertex 19: X: -284.827484 Y: 63.958855 Z: 409.614838
|
||||
Vertex 20: X: -569.829163 Y: 0.000026 Z: 360.14798
|
||||
Vertex 21: X: -539.415344 Y: -63.958801 Z: 325.014709
|
||||
Vertex 22: X: -490.204712 Y: -39.528709 Z: 268.167847
|
||||
Vertex 23: X: -490.204712 Y: 39.528755 Z: 268.167847
|
||||
Vertex 24: X: -539.415344 Y: 63.958847 Z: 325.014679
|
||||
Vertex 25: X: -705.963684 Y: 0.000002 Z: 88.509598
|
||||
Vertex 26: X: -659.614807 Y: -63.958824 Z: 85.172462
|
||||
Vertex 27: X: -584.62085 Y: -39.528725 Z: 79.77285
|
||||
Vertex 28: X: -584.62085 Y: 39.52874 Z: 79.77285
|
||||
Vertex 29: X: -659.614868 Y: 63.958824 Z: 85.172447
|
||||
Vertex 30: X: -610.147827 Y: -0.000023 Z: -199.829361
|
||||
Vertex 31: X: -575.014587 Y: -63.958847 Z: -169.415497
|
||||
Vertex 32: X: -518.167725 Y: -39.528744 Z: -120.204819
|
||||
Vertex 33: X: -518.167725 Y: 39.528721 Z: -120.204834
|
||||
Vertex 34: X: -575.014587 Y: 63.958801 Z: -169.415497
|
||||
Vertex 35: X: -338.509338 Y: -0.000035 Z: -335.963745
|
||||
Vertex 36: X: -335.172241 Y: -63.958858 Z: -289.614868
|
||||
Vertex 37: X: -329.772675 Y: -39.528751 Z: -214.620865
|
||||
Vertex 38: X: -329.772675 Y: 39.528713 Z: -214.620865
|
||||
Vertex 39: X: -335.172241 Y: 63.95879 Z: -289.614899
|
||||
Face list:
|
||||
Face 0: A:0 B:6 C:1 AB:0 BC:1 CA:1
|
||||
Smoothing: 1
|
||||
Face 1: A:0 B:5 C:6 AB:1 BC:1 CA:0
|
||||
Smoothing: 1
|
||||
Face 2: A:1 B:7 C:2 AB:0 BC:1 CA:1
|
||||
Smoothing: 2
|
||||
Face 3: A:1 B:6 C:7 AB:1 BC:1 CA:0
|
||||
Smoothing: 2
|
||||
Face 4: A:2 B:8 C:3 AB:0 BC:1 CA:1
|
||||
Smoothing: 3
|
||||
Face 5: A:2 B:7 C:8 AB:1 BC:1 CA:0
|
||||
Smoothing: 3
|
||||
Face 6: A:3 B:9 C:4 AB:0 BC:1 CA:1
|
||||
Smoothing: 4
|
||||
Face 7: A:3 B:8 C:9 AB:1 BC:1 CA:0
|
||||
|
||||
Page 1
|
||||
|
||||
|
||||
|
||||
Smoothing: 4
|
||||
Face 8: A:4 B:5 C:0 AB:0 BC:1 CA:1
|
||||
Smoothing: 5
|
||||
Face 9: A:4 B:9 C:5 AB:1 BC:1 CA:0
|
||||
Smoothing: 5
|
||||
Face 10: A:5 B:11 C:6 AB:0 BC:1 CA:1
|
||||
Smoothing: 6
|
||||
Face 11: A:5 B:10 C:11 AB:1 BC:1 CA:0
|
||||
Smoothing: 6
|
||||
Face 12: A:6 B:12 C:7 AB:0 BC:1 CA:1
|
||||
Smoothing: 7
|
||||
Face 13: A:6 B:11 C:12 AB:1 BC:1 CA:0
|
||||
Smoothing: 7
|
||||
Face 14: A:7 B:13 C:8 AB:0 BC:1 CA:1
|
||||
Smoothing: 8
|
||||
Face 15: A:7 B:12 C:13 AB:1 BC:1 CA:0
|
||||
Smoothing: 8
|
||||
Face 16: A:8 B:14 C:9 AB:0 BC:1 CA:1
|
||||
Smoothing: 9
|
||||
Face 17: A:8 B:13 C:14 AB:1 BC:1 CA:0
|
||||
Smoothing: 9
|
||||
Face 18: A:9 B:10 C:5 AB:0 BC:1 CA:1
|
||||
Smoothing: 10
|
||||
Face 19: A:9 B:14 C:10 AB:1 BC:1 CA:0
|
||||
Smoothing: 10
|
||||
Face 20: A:10 B:16 C:11 AB:0 BC:1 CA:1
|
||||
Smoothing: 11
|
||||
Face 21: A:10 B:15 C:16 AB:1 BC:1 CA:0
|
||||
Smoothing: 11
|
||||
Face 22: A:11 B:17 C:12 AB:0 BC:1 CA:1
|
||||
Smoothing: 12
|
||||
Face 23: A:11 B:16 C:17 AB:1 BC:1 CA:0
|
||||
Smoothing: 12
|
||||
Face 24: A:12 B:18 C:13 AB:0 BC:1 CA:1
|
||||
Smoothing: 13
|
||||
Face 25: A:12 B:17 C:18 AB:1 BC:1 CA:0
|
||||
Smoothing: 13
|
||||
Face 26: A:13 B:19 C:14 AB:0 BC:1 CA:1
|
||||
Smoothing: 14
|
||||
Face 27: A:13 B:18 C:19 AB:1 BC:1 CA:0
|
||||
Smoothing: 14
|
||||
Face 28: A:14 B:15 C:10 AB:0 BC:1 CA:1
|
||||
Smoothing: 15
|
||||
Face 29: A:14 B:19 C:15 AB:1 BC:1 CA:0
|
||||
Smoothing: 15
|
||||
Face 30: A:15 B:21 C:16 AB:0 BC:1 CA:1
|
||||
Smoothing: 16
|
||||
Face 31: A:15 B:20 C:21 AB:1 BC:1 CA:0
|
||||
Smoothing: 16
|
||||
Face 32: A:16 B:22 C:17 AB:0 BC:1 CA:1
|
||||
Smoothing: 17
|
||||
Face 33: A:16 B:21 C:22 AB:1 BC:1 CA:0
|
||||
Smoothing: 17
|
||||
Face 34: A:17 B:23 C:18 AB:0 BC:1 CA:1
|
||||
Smoothing: 18
|
||||
Face 35: A:17 B:22 C:23 AB:1 BC:1 CA:0
|
||||
Smoothing: 18
|
||||
Face 36: A:18 B:24 C:19 AB:0 BC:1 CA:1
|
||||
Smoothing: 19
|
||||
Face 37: A:18 B:23 C:24 AB:1 BC:1 CA:0
|
||||
Smoothing: 19
|
||||
|
||||
Page 2
|
||||
|
||||
|
||||
|
||||
Face 38: A:19 B:20 C:15 AB:0 BC:1 CA:1
|
||||
Smoothing: 20
|
||||
Face 39: A:19 B:24 C:20 AB:1 BC:1 CA:0
|
||||
Smoothing: 20
|
||||
Face 40: A:20 B:26 C:21 AB:0 BC:1 CA:1
|
||||
Smoothing: 21
|
||||
Face 41: A:20 B:25 C:26 AB:1 BC:1 CA:0
|
||||
Smoothing: 21
|
||||
Face 42: A:21 B:27 C:22 AB:0 BC:1 CA:1
|
||||
Smoothing: 22
|
||||
Face 43: A:21 B:26 C:27 AB:1 BC:1 CA:0
|
||||
Smoothing: 22
|
||||
Face 44: A:22 B:28 C:23 AB:0 BC:1 CA:1
|
||||
Smoothing: 23
|
||||
Face 45: A:22 B:27 C:28 AB:1 BC:1 CA:0
|
||||
Smoothing: 23
|
||||
Face 46: A:23 B:29 C:24 AB:0 BC:1 CA:1
|
||||
Smoothing: 24
|
||||
Face 47: A:23 B:28 C:29 AB:1 BC:1 CA:0
|
||||
Smoothing: 24
|
||||
Face 48: A:24 B:25 C:20 AB:0 BC:1 CA:1
|
||||
Smoothing: 25
|
||||
Face 49: A:24 B:29 C:25 AB:1 BC:1 CA:0
|
||||
Smoothing: 25
|
||||
Face 50: A:25 B:31 C:26 AB:0 BC:1 CA:1
|
||||
Smoothing: 26
|
||||
Face 51: A:25 B:30 C:31 AB:1 BC:1 CA:0
|
||||
Smoothing: 26
|
||||
Face 52: A:26 B:32 C:27 AB:0 BC:1 CA:1
|
||||
Smoothing: 27
|
||||
Face 53: A:26 B:31 C:32 AB:1 BC:1 CA:0
|
||||
Smoothing: 27
|
||||
Face 54: A:27 B:33 C:28 AB:0 BC:1 CA:1
|
||||
Smoothing: 28
|
||||
Face 55: A:27 B:32 C:33 AB:1 BC:1 CA:0
|
||||
Smoothing: 28
|
||||
Face 56: A:28 B:34 C:29 AB:0 BC:1 CA:1
|
||||
Smoothing: 29
|
||||
Face 57: A:28 B:33 C:34 AB:1 BC:1 CA:0
|
||||
Smoothing: 29
|
||||
Face 58: A:29 B:30 C:25 AB:0 BC:1 CA:1
|
||||
Smoothing: 30
|
||||
Face 59: A:29 B:34 C:30 AB:1 BC:1 CA:0
|
||||
Smoothing: 30
|
||||
Face 60: A:30 B:36 C:31 AB:0 BC:1 CA:1
|
||||
Smoothing: 31
|
||||
Face 61: A:30 B:35 C:36 AB:1 BC:1 CA:0
|
||||
Smoothing: 31
|
||||
Face 62: A:31 B:37 C:32 AB:0 BC:1 CA:1
|
||||
Smoothing: 32
|
||||
Face 63: A:31 B:36 C:37 AB:1 BC:1 CA:0
|
||||
Smoothing: 32
|
||||
Face 64: A:32 B:38 C:33 AB:0 BC:1 CA:1
|
||||
Smoothing: 1
|
||||
Face 65: A:32 B:37 C:38 AB:1 BC:1 CA:0
|
||||
Smoothing: 1
|
||||
Face 66: A:33 B:39 C:34 AB:0 BC:1 CA:1
|
||||
Smoothing: 2
|
||||
Face 67: A:33 B:38 C:39 AB:1 BC:1 CA:0
|
||||
Smoothing: 2
|
||||
Face 68: A:34 B:35 C:30 AB:0 BC:1 CA:1
|
||||
|
||||
Page 3
|
||||
|
||||
|
||||
|
||||
Smoothing: 3
|
||||
Face 69: A:34 B:39 C:35 AB:1 BC:1 CA:0
|
||||
Smoothing: 3
|
||||
Face 70: A:35 B:1 C:36 AB:0 BC:1 CA:1
|
||||
Smoothing: 4
|
||||
Face 71: A:35 B:0 C:1 AB:1 BC:1 CA:0
|
||||
Smoothing: 4
|
||||
Face 72: A:36 B:2 C:37 AB:0 BC:1 CA:1
|
||||
Smoothing: 5
|
||||
Face 73: A:36 B:1 C:2 AB:1 BC:1 CA:0
|
||||
Smoothing: 5
|
||||
Face 74: A:37 B:3 C:38 AB:0 BC:1 CA:1
|
||||
Smoothing: 6
|
||||
Face 75: A:37 B:2 C:3 AB:1 BC:1 CA:0
|
||||
Smoothing: 6
|
||||
Face 76: A:38 B:4 C:39 AB:0 BC:1 CA:1
|
||||
Smoothing: 7
|
||||
Face 77: A:38 B:3 C:4 AB:1 BC:1 CA:0
|
||||
Smoothing: 7
|
||||
Face 78: A:39 B:0 C:35 AB:0 BC:1 CA:1
|
||||
Smoothing: 8
|
||||
Face 79: A:39 B:4 C:0 AB:1 BC:1 CA:0
|
||||
Smoothing: 8
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Page 4
|
||||
|
||||
|
||||
|
396
progs/ggi/tube.asc
Normal file
396
progs/ggi/tube.asc
Normal file
@@ -0,0 +1,396 @@
|
||||
Ambient light color: Red=0.039216 Green=0.039216 Blue=0.039216
|
||||
|
||||
Named object: "Object01"
|
||||
Tri-mesh, Vertices: 64 Faces: 128
|
||||
Vertex list:
|
||||
Vertex 0: X: 61.483898 Y: 37.836231 Z: -70.94294
|
||||
Vertex 1: X: 82.867447 Y: 37.836235 Z: -41.288902
|
||||
Vertex 2: X: 91.275154 Y: 37.836239 Z: -5.70901
|
||||
Vertex 3: X: 85.427025 Y: 37.836243 Z: 30.380013
|
||||
Vertex 4: X: 66.213379 Y: 37.836243 Z: 61.483936
|
||||
Vertex 5: X: 36.559322 Y: 37.836246 Z: 82.86747
|
||||
Vertex 6: X: 0.979424 Y: 37.836246 Z: 91.275154
|
||||
Vertex 7: X: -35.109554 Y: 37.836246 Z: 85.42701
|
||||
Vertex 8: X: -66.213478 Y: 37.836246 Z: 66.213356
|
||||
Vertex 9: X: -87.597 Y: 37.836243 Z: 36.559303
|
||||
Vertex 10: X: -96.004677 Y: 37.836239 Z: 0.979406
|
||||
Vertex 11: X: -90.156517 Y: 37.836235 Z: -35.109615
|
||||
Vertex 12: X: -70.942848 Y: 37.836235 Z: -66.213516
|
||||
Vertex 13: X: -41.288776 Y: 37.836231 Z: -87.597023
|
||||
Vertex 14: X: -5.708872 Y: 37.836231 Z: -96.004692
|
||||
Vertex 15: X: 30.380142 Y: 37.836231 Z: -90.156502
|
||||
Vertex 16: X: 61.483898 Y: -38.14529 Z: -70.942932
|
||||
Vertex 17: X: 82.867447 Y: -38.145287 Z: -41.288895
|
||||
Vertex 18: X: 91.275154 Y: -38.145283 Z: -5.709003
|
||||
Vertex 19: X: 85.427025 Y: -38.145279 Z: 30.38002
|
||||
Vertex 20: X: 66.213379 Y: -38.145279 Z: 61.483944
|
||||
Vertex 21: X: 36.559322 Y: -38.145275 Z: 82.867477
|
||||
Vertex 22: X: 0.979424 Y: -38.145275 Z: 91.275162
|
||||
Vertex 23: X: -35.109554 Y: -38.145275 Z: 85.427017
|
||||
Vertex 24: X: -66.213478 Y: -38.145275 Z: 66.213364
|
||||
Vertex 25: X: -87.597 Y: -38.145279 Z: 36.559311
|
||||
Vertex 26: X: -96.004677 Y: -38.145283 Z: 0.979412
|
||||
Vertex 27: X: -90.156517 Y: -38.145287 Z: -35.109608
|
||||
Vertex 28: X: -70.942848 Y: -38.145287 Z: -66.213516
|
||||
Vertex 29: X: -41.288776 Y: -38.14529 Z: -87.597015
|
||||
Vertex 30: X: -5.708872 Y: -38.14529 Z: -96.004684
|
||||
Vertex 31: X: 30.380142 Y: -38.14529 Z: -90.156494
|
||||
Vertex 32: X: 29.53923 Y: 37.836235 Z: -36.632011
|
||||
Vertex 33: X: 40.224194 Y: 37.836239 Z: -21.814436
|
||||
Vertex 34: X: 44.425369 Y: 37.836239 Z: -4.035822
|
||||
Vertex 35: X: 41.503166 Y: 37.836239 Z: 13.997195
|
||||
Vertex 36: X: 31.902466 Y: 37.836243 Z: 29.539249
|
||||
Vertex 37: X: 17.084883 Y: 37.836243 Z: 40.224201
|
||||
Vertex 38: X: -0.693734 Y: 37.836243 Z: 44.425365
|
||||
Vertex 39: X: -18.726728 Y: 37.836243 Z: 41.503159
|
||||
Vertex 40: X: -34.26878 Y: 37.836243 Z: 31.902454
|
||||
Vertex 41: X: -44.953732 Y: 37.836239 Z: 17.084871
|
||||
Vertex 42: X: -49.154892 Y: 37.836239 Z: -0.693745
|
||||
Vertex 43: X: -46.232677 Y: 37.836239 Z: -18.726759
|
||||
Vertex 44: X: -36.631962 Y: 37.836235 Z: -34.268806
|
||||
Vertex 45: X: -21.814371 Y: 37.836235 Z: -44.953747
|
||||
Vertex 46: X: -4.035751 Y: 37.836235 Z: -49.1549
|
||||
Vertex 47: X: 13.997261 Y: 37.836235 Z: -46.23267
|
||||
Vertex 48: X: 29.53923 Y: -38.145287 Z: -36.632004
|
||||
Vertex 49: X: 40.224194 Y: -38.145283 Z: -21.814428
|
||||
Vertex 50: X: 44.425369 Y: -38.145283 Z: -4.035816
|
||||
Vertex 51: X: 41.503166 Y: -38.145283 Z: 13.997201
|
||||
Vertex 52: X: 31.902466 Y: -38.145279 Z: 29.539257
|
||||
Vertex 53: X: 17.084883 Y: -38.145279 Z: 40.224209
|
||||
Vertex 54: X: -0.693734 Y: -38.145279 Z: 44.425373
|
||||
Vertex 55: X: -18.726728 Y: -38.145279 Z: 41.503166
|
||||
|
||||
Page 1
|
||||
|
||||
|
||||
|
||||
Vertex 56: X: -34.26878 Y: -38.145279 Z: 31.902462
|
||||
Vertex 57: X: -44.953732 Y: -38.145283 Z: 17.084879
|
||||
Vertex 58: X: -49.154892 Y: -38.145283 Z: -0.693738
|
||||
Vertex 59: X: -46.232677 Y: -38.145283 Z: -18.726751
|
||||
Vertex 60: X: -36.631962 Y: -38.145287 Z: -34.268799
|
||||
Vertex 61: X: -21.814371 Y: -38.145287 Z: -44.953739
|
||||
Vertex 62: X: -4.035751 Y: -38.145287 Z: -49.154892
|
||||
Vertex 63: X: 13.997261 Y: -38.145287 Z: -46.232662
|
||||
Face list:
|
||||
Face 0: A:0 B:1 C:17 AB:1 BC:1 CA:0
|
||||
Smoothing: 1
|
||||
Face 1: A:0 B:17 C:16 AB:0 BC:1 CA:1
|
||||
Smoothing: 1
|
||||
Face 2: A:1 B:2 C:18 AB:1 BC:1 CA:0
|
||||
Smoothing: 2
|
||||
Face 3: A:1 B:18 C:17 AB:0 BC:1 CA:1
|
||||
Smoothing: 2
|
||||
Face 4: A:2 B:3 C:19 AB:1 BC:1 CA:0
|
||||
Smoothing: 3
|
||||
Face 5: A:2 B:19 C:18 AB:0 BC:1 CA:1
|
||||
Smoothing: 3
|
||||
Face 6: A:3 B:4 C:20 AB:1 BC:1 CA:0
|
||||
Smoothing: 4
|
||||
Face 7: A:3 B:20 C:19 AB:0 BC:1 CA:1
|
||||
Smoothing: 4
|
||||
Face 8: A:4 B:5 C:21 AB:1 BC:1 CA:0
|
||||
Smoothing: 5
|
||||
Face 9: A:4 B:21 C:20 AB:0 BC:1 CA:1
|
||||
Smoothing: 5
|
||||
Face 10: A:5 B:6 C:22 AB:1 BC:1 CA:0
|
||||
Smoothing: 6
|
||||
Face 11: A:5 B:22 C:21 AB:0 BC:1 CA:1
|
||||
Smoothing: 6
|
||||
Face 12: A:6 B:7 C:23 AB:1 BC:1 CA:0
|
||||
Smoothing: 7
|
||||
Face 13: A:6 B:23 C:22 AB:0 BC:1 CA:1
|
||||
Smoothing: 7
|
||||
Face 14: A:7 B:8 C:24 AB:1 BC:1 CA:0
|
||||
Smoothing: 8
|
||||
Face 15: A:7 B:24 C:23 AB:0 BC:1 CA:1
|
||||
Smoothing: 8
|
||||
Face 16: A:8 B:9 C:25 AB:1 BC:1 CA:0
|
||||
Smoothing: 9
|
||||
Face 17: A:8 B:25 C:24 AB:0 BC:1 CA:1
|
||||
Smoothing: 9
|
||||
Face 18: A:9 B:10 C:26 AB:1 BC:1 CA:0
|
||||
Smoothing: 10
|
||||
Face 19: A:9 B:26 C:25 AB:0 BC:1 CA:1
|
||||
Smoothing: 10
|
||||
Face 20: A:10 B:11 C:27 AB:1 BC:1 CA:0
|
||||
Smoothing: 11
|
||||
Face 21: A:10 B:27 C:26 AB:0 BC:1 CA:1
|
||||
Smoothing: 11
|
||||
Face 22: A:11 B:12 C:28 AB:1 BC:1 CA:0
|
||||
Smoothing: 12
|
||||
Face 23: A:11 B:28 C:27 AB:0 BC:1 CA:1
|
||||
Smoothing: 12
|
||||
Face 24: A:12 B:13 C:29 AB:1 BC:1 CA:0
|
||||
Smoothing: 13
|
||||
Face 25: A:12 B:29 C:28 AB:0 BC:1 CA:1
|
||||
Smoothing: 13
|
||||
|
||||
Page 2
|
||||
|
||||
|
||||
|
||||
Face 26: A:13 B:14 C:30 AB:1 BC:1 CA:0
|
||||
Smoothing: 14
|
||||
Face 27: A:13 B:30 C:29 AB:0 BC:1 CA:1
|
||||
Smoothing: 14
|
||||
Face 28: A:14 B:15 C:31 AB:1 BC:1 CA:0
|
||||
Smoothing: 15
|
||||
Face 29: A:14 B:31 C:30 AB:0 BC:1 CA:1
|
||||
Smoothing: 15
|
||||
Face 30: A:15 B:0 C:16 AB:1 BC:1 CA:0
|
||||
Smoothing: 16
|
||||
Face 31: A:15 B:16 C:31 AB:0 BC:1 CA:1
|
||||
Smoothing: 16
|
||||
Face 32: A:32 B:49 C:33 AB:0 BC:1 CA:1
|
||||
Smoothing: 17
|
||||
Face 33: A:32 B:48 C:49 AB:1 BC:1 CA:0
|
||||
Smoothing: 17
|
||||
Face 34: A:33 B:50 C:34 AB:0 BC:1 CA:1
|
||||
Smoothing: 18
|
||||
Face 35: A:33 B:49 C:50 AB:1 BC:1 CA:0
|
||||
Smoothing: 18
|
||||
Face 36: A:34 B:51 C:35 AB:0 BC:1 CA:1
|
||||
Smoothing: 19
|
||||
Face 37: A:34 B:50 C:51 AB:1 BC:1 CA:0
|
||||
Smoothing: 19
|
||||
Face 38: A:35 B:52 C:36 AB:0 BC:1 CA:1
|
||||
Smoothing: 20
|
||||
Face 39: A:35 B:51 C:52 AB:1 BC:1 CA:0
|
||||
Smoothing: 20
|
||||
Face 40: A:36 B:53 C:37 AB:0 BC:1 CA:1
|
||||
Smoothing: 21
|
||||
Face 41: A:36 B:52 C:53 AB:1 BC:1 CA:0
|
||||
Smoothing: 21
|
||||
Face 42: A:37 B:54 C:38 AB:0 BC:1 CA:1
|
||||
Smoothing: 22
|
||||
Face 43: A:37 B:53 C:54 AB:1 BC:1 CA:0
|
||||
Smoothing: 22
|
||||
Face 44: A:38 B:55 C:39 AB:0 BC:1 CA:1
|
||||
Smoothing: 23
|
||||
Face 45: A:38 B:54 C:55 AB:1 BC:1 CA:0
|
||||
Smoothing: 23
|
||||
Face 46: A:39 B:56 C:40 AB:0 BC:1 CA:1
|
||||
Smoothing: 24
|
||||
Face 47: A:39 B:55 C:56 AB:1 BC:1 CA:0
|
||||
Smoothing: 24
|
||||
Face 48: A:40 B:57 C:41 AB:0 BC:1 CA:1
|
||||
Smoothing: 25
|
||||
Face 49: A:40 B:56 C:57 AB:1 BC:1 CA:0
|
||||
Smoothing: 25
|
||||
Face 50: A:41 B:58 C:42 AB:0 BC:1 CA:1
|
||||
Smoothing: 26
|
||||
Face 51: A:41 B:57 C:58 AB:1 BC:1 CA:0
|
||||
Smoothing: 26
|
||||
Face 52: A:42 B:59 C:43 AB:0 BC:1 CA:1
|
||||
Smoothing: 27
|
||||
Face 53: A:42 B:58 C:59 AB:1 BC:1 CA:0
|
||||
Smoothing: 27
|
||||
Face 54: A:43 B:60 C:44 AB:0 BC:1 CA:1
|
||||
Smoothing: 28
|
||||
Face 55: A:43 B:59 C:60 AB:1 BC:1 CA:0
|
||||
Smoothing: 28
|
||||
Face 56: A:44 B:61 C:45 AB:0 BC:1 CA:1
|
||||
|
||||
Page 3
|
||||
|
||||
|
||||
|
||||
Smoothing: 29
|
||||
Face 57: A:44 B:60 C:61 AB:1 BC:1 CA:0
|
||||
Smoothing: 29
|
||||
Face 58: A:45 B:62 C:46 AB:0 BC:1 CA:1
|
||||
Smoothing: 30
|
||||
Face 59: A:45 B:61 C:62 AB:1 BC:1 CA:0
|
||||
Smoothing: 30
|
||||
Face 60: A:46 B:63 C:47 AB:0 BC:1 CA:1
|
||||
Smoothing: 31
|
||||
Face 61: A:46 B:62 C:63 AB:1 BC:1 CA:0
|
||||
Smoothing: 31
|
||||
Face 62: A:47 B:48 C:32 AB:0 BC:1 CA:1
|
||||
Smoothing: 32
|
||||
Face 63: A:47 B:63 C:48 AB:1 BC:1 CA:0
|
||||
Smoothing: 32
|
||||
Face 64: A:0 B:32 C:33 AB:0 BC:1 CA:0
|
||||
Smoothing: 1
|
||||
Face 65: A:0 B:33 C:1 AB:0 BC:0 CA:1
|
||||
Smoothing: 1
|
||||
Face 66: A:1 B:33 C:34 AB:0 BC:1 CA:0
|
||||
Smoothing: 1
|
||||
Face 67: A:1 B:34 C:2 AB:0 BC:0 CA:1
|
||||
Smoothing: 1
|
||||
Face 68: A:2 B:34 C:35 AB:0 BC:1 CA:0
|
||||
Smoothing: 1
|
||||
Face 69: A:2 B:35 C:3 AB:0 BC:0 CA:1
|
||||
Smoothing: 1
|
||||
Face 70: A:3 B:35 C:36 AB:0 BC:1 CA:0
|
||||
Smoothing: 1
|
||||
Face 71: A:3 B:36 C:4 AB:0 BC:0 CA:1
|
||||
Smoothing: 1
|
||||
Face 72: A:4 B:36 C:37 AB:0 BC:1 CA:0
|
||||
Smoothing: 1
|
||||
Face 73: A:4 B:37 C:5 AB:0 BC:0 CA:1
|
||||
Smoothing: 1
|
||||
Face 74: A:5 B:37 C:38 AB:0 BC:1 CA:0
|
||||
Smoothing: 1
|
||||
Face 75: A:5 B:38 C:6 AB:0 BC:0 CA:1
|
||||
Smoothing: 1
|
||||
Face 76: A:6 B:38 C:39 AB:0 BC:1 CA:0
|
||||
Smoothing: 1
|
||||
Face 77: A:6 B:39 C:7 AB:0 BC:0 CA:1
|
||||
Smoothing: 1
|
||||
Face 78: A:7 B:39 C:40 AB:0 BC:1 CA:0
|
||||
Smoothing: 1
|
||||
Face 79: A:7 B:40 C:8 AB:0 BC:0 CA:1
|
||||
Smoothing: 1
|
||||
Face 80: A:8 B:40 C:41 AB:0 BC:1 CA:0
|
||||
Smoothing: 1
|
||||
Face 81: A:8 B:41 C:9 AB:0 BC:0 CA:1
|
||||
Smoothing: 1
|
||||
Face 82: A:9 B:41 C:42 AB:0 BC:1 CA:0
|
||||
Smoothing: 1
|
||||
Face 83: A:9 B:42 C:10 AB:0 BC:0 CA:1
|
||||
Smoothing: 1
|
||||
Face 84: A:10 B:42 C:43 AB:0 BC:1 CA:0
|
||||
Smoothing: 1
|
||||
Face 85: A:10 B:43 C:11 AB:0 BC:0 CA:1
|
||||
Smoothing: 1
|
||||
Face 86: A:11 B:43 C:44 AB:0 BC:1 CA:0
|
||||
Smoothing: 1
|
||||
|
||||
Page 4
|
||||
|
||||
|
||||
|
||||
Face 87: A:11 B:44 C:12 AB:0 BC:0 CA:1
|
||||
Smoothing: 1
|
||||
Face 88: A:12 B:44 C:45 AB:0 BC:1 CA:0
|
||||
Smoothing: 1
|
||||
Face 89: A:12 B:45 C:13 AB:0 BC:0 CA:1
|
||||
Smoothing: 1
|
||||
Face 90: A:13 B:45 C:46 AB:0 BC:1 CA:0
|
||||
Smoothing: 1
|
||||
Face 91: A:13 B:46 C:14 AB:0 BC:0 CA:1
|
||||
Smoothing: 1
|
||||
Face 92: A:14 B:46 C:47 AB:0 BC:1 CA:0
|
||||
Smoothing: 1
|
||||
Face 93: A:14 B:47 C:15 AB:0 BC:0 CA:1
|
||||
Smoothing: 1
|
||||
Face 94: A:15 B:47 C:32 AB:0 BC:1 CA:0
|
||||
Smoothing: 1
|
||||
Face 95: A:15 B:32 C:0 AB:0 BC:0 CA:1
|
||||
Smoothing: 1
|
||||
Face 96: A:16 B:17 C:49 AB:1 BC:0 CA:0
|
||||
Smoothing: 2
|
||||
Face 97: A:16 B:49 C:48 AB:0 BC:1 CA:0
|
||||
Smoothing: 2
|
||||
Face 98: A:17 B:18 C:50 AB:1 BC:0 CA:0
|
||||
Smoothing: 2
|
||||
Face 99: A:17 B:50 C:49 AB:0 BC:1 CA:0
|
||||
Smoothing: 2
|
||||
Face 100: A:18 B:19 C:51 AB:1 BC:0 CA:0
|
||||
Smoothing: 2
|
||||
Face 101: A:18 B:51 C:50 AB:0 BC:1 CA:0
|
||||
Smoothing: 2
|
||||
Face 102: A:19 B:20 C:52 AB:1 BC:0 CA:0
|
||||
Smoothing: 2
|
||||
Face 103: A:19 B:52 C:51 AB:0 BC:1 CA:0
|
||||
Smoothing: 2
|
||||
Face 104: A:20 B:21 C:53 AB:1 BC:0 CA:0
|
||||
Smoothing: 2
|
||||
Face 105: A:20 B:53 C:52 AB:0 BC:1 CA:0
|
||||
Smoothing: 2
|
||||
Face 106: A:21 B:22 C:54 AB:1 BC:0 CA:0
|
||||
Smoothing: 2
|
||||
Face 107: A:21 B:54 C:53 AB:0 BC:1 CA:0
|
||||
Smoothing: 2
|
||||
Face 108: A:22 B:23 C:55 AB:1 BC:0 CA:0
|
||||
Smoothing: 2
|
||||
Face 109: A:22 B:55 C:54 AB:0 BC:1 CA:0
|
||||
Smoothing: 2
|
||||
Face 110: A:23 B:24 C:56 AB:1 BC:0 CA:0
|
||||
Smoothing: 2
|
||||
Face 111: A:23 B:56 C:55 AB:0 BC:1 CA:0
|
||||
Smoothing: 2
|
||||
Face 112: A:24 B:25 C:57 AB:1 BC:0 CA:0
|
||||
Smoothing: 2
|
||||
Face 113: A:24 B:57 C:56 AB:0 BC:1 CA:0
|
||||
Smoothing: 2
|
||||
Face 114: A:25 B:26 C:58 AB:1 BC:0 CA:0
|
||||
Smoothing: 2
|
||||
Face 115: A:25 B:58 C:57 AB:0 BC:1 CA:0
|
||||
Smoothing: 2
|
||||
Face 116: A:26 B:27 C:59 AB:1 BC:0 CA:0
|
||||
Smoothing: 2
|
||||
Face 117: A:26 B:59 C:58 AB:0 BC:1 CA:0
|
||||
|
||||
Page 5
|
||||
|
||||
|
||||
|
||||
Smoothing: 2
|
||||
Face 118: A:27 B:28 C:60 AB:1 BC:0 CA:0
|
||||
Smoothing: 2
|
||||
Face 119: A:27 B:60 C:59 AB:0 BC:1 CA:0
|
||||
Smoothing: 2
|
||||
Face 120: A:28 B:29 C:61 AB:1 BC:0 CA:0
|
||||
Smoothing: 2
|
||||
Face 121: A:28 B:61 C:60 AB:0 BC:1 CA:0
|
||||
Smoothing: 2
|
||||
Face 122: A:29 B:30 C:62 AB:1 BC:0 CA:0
|
||||
Smoothing: 2
|
||||
Face 123: A:29 B:62 C:61 AB:0 BC:1 CA:0
|
||||
Smoothing: 2
|
||||
Face 124: A:30 B:31 C:63 AB:1 BC:0 CA:0
|
||||
Smoothing: 2
|
||||
Face 125: A:30 B:63 C:62 AB:0 BC:1 CA:0
|
||||
Smoothing: 2
|
||||
Face 126: A:31 B:16 C:48 AB:1 BC:0 CA:0
|
||||
Smoothing: 2
|
||||
Face 127: A:31 B:48 C:63 AB:0 BC:1 CA:0
|
||||
Smoothing: 2
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Page 6
|
||||
|
||||
|
||||
|
2
src/glut/ggi/EXPSYMS
Normal file
2
src/glut/ggi/EXPSYMS
Normal file
@@ -0,0 +1,2 @@
|
||||
glutInit
|
||||
glutSwapBuffers
|
840
src/glut/ggi/ggiglut.c
Normal file
840
src/glut/ggi/ggiglut.c
Normal file
@@ -0,0 +1,840 @@
|
||||
/* **************************************************************************
|
||||
* ggiglut.c
|
||||
* **************************************************************************
|
||||
*
|
||||
* Copyright (C) 1998 Uwe Maurer - uwe_maurer@t-online.de
|
||||
* Copyright (C) 1999 James Simmons
|
||||
* Copyright (C) 1999 Jon Taylor
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the Free
|
||||
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*
|
||||
* **************************************************************************
|
||||
* To-do:
|
||||
* - Make everything use the portable ggi_* types
|
||||
*
|
||||
*/
|
||||
|
||||
#define WIDTH 640
|
||||
#define HEIGHT 480
|
||||
#define GRAPHTYPE_RGB GT_16BIT
|
||||
#define GRAPHTYPE_INDEX GT_8BIT
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glu.h>
|
||||
#include <GL/glut.h>
|
||||
#include <malloc.h>
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
#include "GL/ggimesa.h"
|
||||
|
||||
#include <ggi/ggi.h>
|
||||
#include <ggi/gii.h>
|
||||
|
||||
char *__glutProgramName = "GGI";
|
||||
|
||||
static ggi_visual_t __glut_vis;
|
||||
|
||||
static GGIMesaContext __glut_ctx;
|
||||
|
||||
static int __glut_width = WIDTH;
|
||||
static int __glut_height = HEIGHT;
|
||||
static ggi_graphtype __glut_gt_rgb = GRAPHTYPE_RGB;
|
||||
static ggi_graphtype __glut_gt_index = GRAPHTYPE_INDEX;
|
||||
static int __glut_init = GL_FALSE;
|
||||
|
||||
static int mousex = WIDTH / 2;
|
||||
static int mousey = HEIGHT / 2;
|
||||
static int mouse_moved = GL_FALSE;
|
||||
static int mouse_down = GL_FALSE;
|
||||
static int mouse_showcursor = GL_FALSE;
|
||||
|
||||
static void (*__glut_reshape)(int, int);
|
||||
static void (*__glut_display)(void);
|
||||
static void (*__glut_idle)(void);
|
||||
static void (*__glut_keyboard)(unsigned char, int, int);
|
||||
static void (*__glut_special)(int, int, int);
|
||||
static void (*__glut_mouse)(int, int, int, int);
|
||||
static void (*__glut_motion)(int, int);
|
||||
static void (*__glut_passive_motion)(int, int);
|
||||
static void (*__glut_visibility)(int);
|
||||
|
||||
static unsigned int __glut_mode = GLUT_RGB | GLUT_SINGLE | GLUT_DEPTH;
|
||||
|
||||
static int __glut_mod_keys = 0;
|
||||
|
||||
static int __glut_redisplay = GL_FALSE;
|
||||
|
||||
/* Menu */
|
||||
static int __glut_menubutton = -1;
|
||||
static int __glut_menuactive = GL_FALSE;
|
||||
|
||||
#define MAX_ENTRIES 64
|
||||
|
||||
typedef struct menu_s
|
||||
{
|
||||
char *label[MAX_ENTRIES];
|
||||
int value[MAX_ENTRIES];
|
||||
struct menu_s * submenu[MAX_ENTRIES];
|
||||
void (*func)(int);
|
||||
int max_strlen;
|
||||
int num_entries;
|
||||
} menu_t;
|
||||
|
||||
static menu_t *mainmenu;
|
||||
static menu_t *curmenu;
|
||||
static menu_t *activemenu;
|
||||
|
||||
int glut_ggi_debug = GL_FALSE;
|
||||
|
||||
void glut_ggiPRINT(char *format, ...)
|
||||
{
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
fprintf(stderr, "GGIGLUT: ");
|
||||
vfprintf(stderr, format, args);
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
void glut_ggiDEBUG(char *format, ...)
|
||||
{
|
||||
va_list args;
|
||||
if (glut_ggi_debug)
|
||||
{
|
||||
va_start(args, format);
|
||||
fprintf(stderr, "GGIGLUT: ");
|
||||
vfprintf(stderr, format, args);
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void glutInit(int *argc, char **argv)
|
||||
{
|
||||
ggi_graphtype gt;
|
||||
int i, k;
|
||||
char *s;
|
||||
|
||||
#define REMOVE {for (k=i;k<*argc-1;k++) argv[k]=argv[k+1]; \
|
||||
(*argc)--; i--; }
|
||||
|
||||
if (__glut_init) return;
|
||||
|
||||
s = getenv("GGIGLUT_DEBUG");
|
||||
glut_ggi_debug = (s && atoi(s));
|
||||
|
||||
if (argc && argv)
|
||||
{
|
||||
|
||||
for (i = 1; i < *argc; i++)
|
||||
{
|
||||
if (strcmp(argv[i], "-mouse") == 0)
|
||||
{
|
||||
mouse_showcursor = GL_TRUE;
|
||||
REMOVE;
|
||||
}
|
||||
else
|
||||
if (strcmp(argv[i], "-bpp") == 0 && (i + 1) < (*argc))
|
||||
{
|
||||
switch(atoi(argv[i + 1]))
|
||||
{
|
||||
case 4: gt = GT_4BIT; break;
|
||||
case 8: gt = GT_8BIT; break;
|
||||
case 15: gt = GT_15BIT; break;
|
||||
case 16: gt = GT_16BIT; break;
|
||||
case 24: gt = GT_24BIT; break;
|
||||
case 32: gt = GT_32BIT; break;
|
||||
default:
|
||||
glut_ggiDEBUG("\"%s\" bits per pixel?\n",
|
||||
argv[i+1]);
|
||||
|
||||
exit(1);
|
||||
}
|
||||
__glut_gt_rgb = __glut_gt_index = gt;
|
||||
REMOVE;
|
||||
REMOVE;
|
||||
}
|
||||
else
|
||||
if (strcmp(argv[i], "-size") == 0 && (i + 2) < (*argc))
|
||||
{
|
||||
__glut_width=atoi(argv[i+1]);
|
||||
__glut_height=atoi(argv[i+2]);
|
||||
REMOVE;
|
||||
REMOVE;
|
||||
REMOVE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (ggiInit()<0)
|
||||
{
|
||||
ggiPanic("ggiInit() failed!\n");
|
||||
}
|
||||
__glut_init=GL_TRUE;
|
||||
|
||||
#undef REMOVE
|
||||
}
|
||||
|
||||
void glutInitWindowPosition(int x, int y)
|
||||
{
|
||||
}
|
||||
|
||||
void glutInitWindowSize(int x, int y)
|
||||
{
|
||||
}
|
||||
|
||||
void glutFullScreen(void)
|
||||
{
|
||||
}
|
||||
|
||||
void glutInitDisplayMode(unsigned int mode)
|
||||
{
|
||||
__glut_mode = mode;
|
||||
}
|
||||
|
||||
void glutInitDisplayString(const char *string)
|
||||
{
|
||||
glut_ggiPRINT("glutInitDisplayString: %s\n", string);
|
||||
}
|
||||
|
||||
int glutCreateWindow(const char *title)
|
||||
{
|
||||
ggi_graphtype gt;
|
||||
ggi_mode mode =
|
||||
{
|
||||
1,
|
||||
{ GGI_AUTO, GGI_AUTO },
|
||||
{ GGI_AUTO, GGI_AUTO },
|
||||
{ 0, 0 },
|
||||
GT_AUTO,
|
||||
{ GGI_AUTO, GGI_AUTO }
|
||||
};
|
||||
int frames;
|
||||
int rgb;
|
||||
int err;
|
||||
|
||||
if (!__glut_init)
|
||||
glutInit(NULL, NULL);
|
||||
|
||||
glut_ggiPRINT("GGIGLUT: %s\n", title);
|
||||
|
||||
rgb = !(__glut_mode & GLUT_INDEX);
|
||||
frames = (__glut_mode & GLUT_DOUBLE) ? 2 : 1;
|
||||
gt = (rgb) ? __glut_gt_rgb : __glut_gt_index;
|
||||
|
||||
__glut_ctx = GGIMesaCreateContext();
|
||||
|
||||
if (__glut_ctx == NULL)
|
||||
ggiPanic("Can't create mesa-context\n");
|
||||
|
||||
__glut_vis = ggiOpen(NULL);
|
||||
if (__glut_vis == NULL)
|
||||
{
|
||||
ggiPanic("ggiOpen() failed!\n");
|
||||
/* return GL_FALSE; */
|
||||
}
|
||||
|
||||
ggiSetFlags(__glut_vis, GGIFLAG_ASYNC);
|
||||
|
||||
ggiCheckMode(__glut_vis, &mode);
|
||||
|
||||
err = ggiSetMode(__glut_vis, &mode);
|
||||
if (err < 0)
|
||||
{
|
||||
ggiPanic("Can't set graphic mode!\n");
|
||||
/* return GL_FALSE; */
|
||||
}
|
||||
|
||||
ggiGetMode(__glut_vis, &mode);
|
||||
|
||||
if (GGIMesaSetVisual(__glut_ctx, __glut_vis, rgb, frames > 1) < 0)
|
||||
{
|
||||
ggiPanic("GGIMesaSetVisual failed!\n");
|
||||
}
|
||||
|
||||
GGIMesaMakeCurrent(__glut_ctx);
|
||||
|
||||
if (__glut_reshape)
|
||||
__glut_reshape(__glut_width, __glut_height);
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
void glutReshapeFunc(void (*func)(int, int))
|
||||
{
|
||||
__glut_reshape = func;
|
||||
if (__glut_vis && __glut_reshape)
|
||||
__glut_reshape(__glut_width, __glut_height);
|
||||
}
|
||||
|
||||
void glutKeyboardFunc(void (*keyboard)(unsigned char key, int x, int y))
|
||||
{
|
||||
__glut_keyboard = keyboard;
|
||||
}
|
||||
|
||||
int glutGetModifiers(void)
|
||||
{
|
||||
return __glut_mod_keys;
|
||||
}
|
||||
|
||||
void glutEntryFunc(void (*func)(int state))
|
||||
{
|
||||
}
|
||||
|
||||
void glutVisibilitFunc(void (*func)(int state))
|
||||
{
|
||||
}
|
||||
|
||||
void glutTimerFunc(unsigned int millis, void (*func)(int value), int value)
|
||||
{
|
||||
}
|
||||
|
||||
void glutMenuStateFunc(void (*func)(int state))
|
||||
{
|
||||
}
|
||||
|
||||
int glutGet(GLenum type)
|
||||
{
|
||||
switch(type)
|
||||
{
|
||||
case GLUT_WINDOW_X:
|
||||
return 0;
|
||||
case GLUT_WINDOW_Y:
|
||||
return 0;
|
||||
case GLUT_WINDOW_WIDTH:
|
||||
return __glut_width;
|
||||
case GLUT_WINDOW_HEIGHT:
|
||||
return __glut_height;
|
||||
case GLUT_MENU_NUM_ITEMS:
|
||||
if (curmenu)
|
||||
return curmenu->num_entries;
|
||||
else
|
||||
return 0;
|
||||
default:
|
||||
glut_ggiDEBUG("glutGet: unknown type %i\n", type);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void glutSpecialFunc(void (*special)(int key, int x, int y))
|
||||
{
|
||||
__glut_special=special;
|
||||
}
|
||||
|
||||
void glutDisplayFunc(void (*disp)(void))
|
||||
{
|
||||
__glut_display=disp;
|
||||
}
|
||||
|
||||
void glutSetColor(int index, GLfloat red, GLfloat green, GLfloat blue)
|
||||
{
|
||||
ggi_color c;
|
||||
GLfloat max;
|
||||
|
||||
if (red > 1.0) red = 1.0;
|
||||
if (red < 0.0) red = 0.0;
|
||||
if (green > 1.0) green = 1.0;
|
||||
if (green < 0.0) green = 0.0;
|
||||
if (blue > 1.0) blue = 1.0;
|
||||
if (blue < 0.0) blue = 0.0;
|
||||
|
||||
max = (float)((1 << GGI_COLOR_PRECISION) - 1);
|
||||
|
||||
c.r = (int)(max * red);
|
||||
c.g = (int)(max * green);
|
||||
c.b = (int)(max * blue);
|
||||
ggiSetPalette(__glut_vis, index, 1, &c);
|
||||
}
|
||||
|
||||
void glutPostRedisplay(void)
|
||||
{
|
||||
__glut_redisplay = GL_TRUE;
|
||||
}
|
||||
|
||||
void glutPostWindowRedisplay(int win)
|
||||
{
|
||||
__glut_redisplay = GL_TRUE;
|
||||
}
|
||||
|
||||
void glutSwapBuffers(void)
|
||||
{
|
||||
GGIMesaSwapBuffers();
|
||||
}
|
||||
|
||||
void glutIdleFunc(void (*idle)(void))
|
||||
{
|
||||
__glut_idle = idle;
|
||||
}
|
||||
|
||||
static void keyboard(ggi_event *ev)
|
||||
{
|
||||
int sym;
|
||||
int modifer = 0, key = 0;
|
||||
|
||||
sym = ev->key.sym;
|
||||
|
||||
modifer = ev->key.modifiers;
|
||||
if (modifer == GII_KM_SHIFT)
|
||||
__glut_mod_keys |= GLUT_ACTIVE_SHIFT;
|
||||
if (modifer == GII_KM_CTRL)
|
||||
__glut_mod_keys |= GLUT_ACTIVE_CTRL;
|
||||
if (modifer == GII_KM_ALT)
|
||||
__glut_mod_keys |= GLUT_ACTIVE_ALT;
|
||||
|
||||
/* if (__glut_special && key) __glut_special(GII_KTYP(key),0,0); */
|
||||
|
||||
if (__glut_keyboard)
|
||||
// __glut_keyboard(GII_UNICODE(sym), 0, 0);
|
||||
__glut_keyboard(sym, 0, 0);
|
||||
}
|
||||
|
||||
static void mouseabs(ggi_event *ev)
|
||||
{
|
||||
int oldx=mousex;
|
||||
int oldy=mousey;
|
||||
|
||||
mousex=ev->pmove.x;
|
||||
mousey=ev->pmove.y;
|
||||
|
||||
if (mousex<0) mousex=0;
|
||||
if (mousey<0) mousey=0;
|
||||
if (mousex>=__glut_width) mousex=__glut_width-1;
|
||||
if (mousey>=__glut_height) mousey=__glut_height-1;
|
||||
|
||||
if (mousex!=oldx || mousey!=oldy) mouse_moved=GL_TRUE;
|
||||
}
|
||||
|
||||
static void mouse(ggi_event *ev)
|
||||
{
|
||||
int oldx=mousex;
|
||||
int oldy=mousey;
|
||||
|
||||
mousex+=ev->pmove.x>>1;
|
||||
mousey+=ev->pmove.y>>1;
|
||||
|
||||
if (mousex<0) mousex=0;
|
||||
if (mousey<0) mousey=0;
|
||||
if (mousex>=__glut_width) mousex=__glut_width-1;
|
||||
if (mousey>=__glut_height) mousey=__glut_height-1;
|
||||
|
||||
if (mousex!=oldx || mousey!=oldy) mouse_moved=GL_TRUE;
|
||||
|
||||
}
|
||||
|
||||
/* FIXME: Prototypes belong in headers, not here! [JMT] */
|
||||
static void showmenu(void);
|
||||
static int clickmenu(void);
|
||||
static void updatemouse(void);
|
||||
static void drawmouse(void);
|
||||
|
||||
static void mousemove(void)
|
||||
{
|
||||
if (mouse_moved) {
|
||||
if (__glut_motion && mouse_down) {
|
||||
__glut_motion(mousex,mousey);
|
||||
}
|
||||
|
||||
if (__glut_passive_motion && (!mouse_down)) {
|
||||
__glut_passive_motion(mousex,mousey);
|
||||
}
|
||||
|
||||
if (__glut_menuactive) updatemouse();
|
||||
mouse_moved=GL_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
static void button(ggi_event *ev)
|
||||
{
|
||||
int i;
|
||||
int btn[4]={0,GLUT_LEFT_BUTTON,GLUT_RIGHT_BUTTON,GLUT_MIDDLE_BUTTON};
|
||||
mousemove();
|
||||
|
||||
if (ev->pbutton.button <= 3) { /* GGI can have >3 buttons ! */
|
||||
char state = ev->any.type == evPtrButtonPress ?GLUT_DOWN:GLUT_UP;
|
||||
if (__glut_menuactive) {
|
||||
if (state==GLUT_UP && clickmenu()) {
|
||||
glutPostRedisplay();
|
||||
__glut_menuactive=GL_FALSE;
|
||||
}
|
||||
} else
|
||||
if (btn[ev->pbutton.button]==__glut_menubutton) {
|
||||
__glut_menuactive=GL_TRUE;
|
||||
activemenu=mainmenu;
|
||||
showmenu();
|
||||
} else
|
||||
if (__glut_mouse) {
|
||||
__glut_mouse(btn[ev->pbutton.button],state,mousex,mousey);
|
||||
}
|
||||
if (state==GLUT_DOWN) {
|
||||
mouse_down|=(1<<(ev->pbutton.button-1));
|
||||
}
|
||||
else mouse_down&=~(1<<(ev->pbutton.button-1));
|
||||
}
|
||||
}
|
||||
|
||||
void glutMainLoop(void)
|
||||
{
|
||||
ggi_event ev;
|
||||
ggi_event_mask evmask = (emKeyPress | emKeyRepeat | emPtrMove | emPtrButton);
|
||||
|
||||
ggiSetEventMask(__glut_vis, evmask);
|
||||
|
||||
glutPostRedisplay();
|
||||
|
||||
if (__glut_visibility)
|
||||
__glut_visibility(GLUT_VISIBLE);
|
||||
|
||||
while (1)
|
||||
{
|
||||
if (!__glut_menuactive)
|
||||
{
|
||||
if (__glut_idle)
|
||||
__glut_idle();
|
||||
if (__glut_redisplay && __glut_display)
|
||||
{
|
||||
__glut_redisplay = GL_FALSE;
|
||||
__glut_display();
|
||||
}
|
||||
}
|
||||
|
||||
while (1)
|
||||
{
|
||||
struct timeval t = {0, 0};
|
||||
|
||||
if (ggiEventPoll(__glut_vis, evmask, &t) == 0)
|
||||
break;
|
||||
|
||||
ggiEventRead(__glut_vis, &ev, evmask);
|
||||
|
||||
switch (ev.any.type)
|
||||
{
|
||||
case evKeyPress:
|
||||
case evKeyRepeat:
|
||||
keyboard(&ev);
|
||||
break;
|
||||
case evPtrAbsolute:
|
||||
mouseabs(&ev);
|
||||
break;
|
||||
case evPtrRelative:
|
||||
mouse(&ev);
|
||||
break;
|
||||
case evPtrButtonPress:
|
||||
case evPtrButtonRelease:
|
||||
button(&ev);
|
||||
break;
|
||||
}
|
||||
}
|
||||
mousemove();
|
||||
}
|
||||
}
|
||||
|
||||
static void showmenu()
|
||||
{
|
||||
int y,i;
|
||||
ggi_color col={0xffff,0xffff,0xffff};
|
||||
|
||||
ggiSetGCForeground(__glut_vis,ggiMapColor(__glut_vis,&col));
|
||||
ggiSetOrigin(__glut_vis,0,0);
|
||||
|
||||
for (y=i=0;i<activemenu->num_entries;i++,y+=8) {
|
||||
ggiPuts(__glut_vis,0,y,activemenu->label[i]);
|
||||
}
|
||||
drawmouse();
|
||||
}
|
||||
|
||||
static int clickmenu(void)
|
||||
{
|
||||
int i;
|
||||
int w,h;
|
||||
|
||||
i=mousey/8;
|
||||
|
||||
if (i>=activemenu->num_entries) return GL_TRUE;
|
||||
if (mousex>=8*strlen(activemenu->label[i])) return GL_TRUE;
|
||||
|
||||
if (activemenu->submenu[i]) {
|
||||
ggi_color col={0,0,0};
|
||||
ggiSetGCForeground(__glut_vis,ggiMapColor(__glut_vis,&col));
|
||||
h=activemenu->num_entries*8;
|
||||
w=activemenu->max_strlen*8;
|
||||
ggiDrawBox(__glut_vis,0,0,w,h);
|
||||
activemenu=activemenu->submenu[i];
|
||||
showmenu();
|
||||
return GL_FALSE;
|
||||
}
|
||||
curmenu=activemenu;
|
||||
activemenu->func(activemenu->value[i]);
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
static int oldx=-1;
|
||||
static int oldy=-1;
|
||||
static char buffer[16*16*4];
|
||||
|
||||
static void updatemouse()
|
||||
{
|
||||
ggiPutBox(__glut_vis,oldx,oldy,16,16,buffer);
|
||||
drawmouse();
|
||||
}
|
||||
|
||||
static void drawmouse()
|
||||
{
|
||||
int x,y;
|
||||
x=mousex-8;
|
||||
if (x<0) x=0;
|
||||
y=mousey-8;
|
||||
if (y<0) y=0;
|
||||
ggiGetBox(__glut_vis,x,y,16,16,buffer);
|
||||
ggiDrawLine(__glut_vis,mousex-2,mousey,mousex+2,mousey);
|
||||
ggiDrawLine(__glut_vis,mousex,mousey-2,mousex,mousey+2);
|
||||
oldx=x;
|
||||
oldy=y;
|
||||
}
|
||||
|
||||
int glutCreateMenu(void(*func)(int))
|
||||
{
|
||||
menu_t *m;
|
||||
m=malloc(sizeof(menu_t));
|
||||
memset(m,0,sizeof(menu_t));
|
||||
curmenu=m;
|
||||
curmenu->func=func;
|
||||
return (int)curmenu;
|
||||
}
|
||||
|
||||
static void addEntry(const char *label,int value,menu_t *submenu)
|
||||
{
|
||||
int i=curmenu->num_entries;
|
||||
/* printf("%i %i %s %p\n",i,value,label,submenu); */
|
||||
if (i<MAX_ENTRIES) {
|
||||
curmenu->label[i]=strdup(label);
|
||||
curmenu->value[i]=value;
|
||||
curmenu->submenu[i]=submenu;
|
||||
|
||||
if (strlen(label)>curmenu->max_strlen)
|
||||
curmenu->max_strlen=strlen(label);
|
||||
curmenu->num_entries++;
|
||||
}
|
||||
}
|
||||
|
||||
void glutAddMenuEntry(const char *label,int value)
|
||||
{
|
||||
addEntry(label,value,NULL);
|
||||
}
|
||||
|
||||
void glutAddSubMenu(const char *label,int submenu)
|
||||
{
|
||||
char text[100];
|
||||
|
||||
if (!curmenu) return;
|
||||
strncpy(text,label,98);
|
||||
text[98]=0;
|
||||
text[strlen(text)+1]=0;
|
||||
text[strlen(text)]='>';
|
||||
|
||||
addEntry(text,0,(menu_t *) submenu);
|
||||
}
|
||||
|
||||
void glutAttachMenu(int button)
|
||||
{
|
||||
mainmenu=curmenu;
|
||||
__glut_menubutton=button;
|
||||
}
|
||||
|
||||
void glutDetachMenu(int button)
|
||||
{
|
||||
}
|
||||
|
||||
void glutVisibilityFunc(void (*func)(int state))
|
||||
{
|
||||
__glut_visibility=func;
|
||||
}
|
||||
|
||||
void glutMouseFunc(void (*mouse)(int, int, int, int))
|
||||
{
|
||||
__glut_mouse=mouse;
|
||||
}
|
||||
|
||||
void glutMotionFunc(void (*motion)(int,int))
|
||||
{
|
||||
__glut_motion=motion;
|
||||
}
|
||||
|
||||
void glutPassiveMotionFunc(void (*motion)(int,int))
|
||||
{
|
||||
__glut_passive_motion=motion;
|
||||
}
|
||||
|
||||
void glutSetWindowTitle(const char *title)
|
||||
{
|
||||
}
|
||||
|
||||
void glutSetIconTitle(const char *title)
|
||||
{
|
||||
}
|
||||
|
||||
void glutChangeToMenuEntry(int item,const char *label,int value)
|
||||
{
|
||||
if (item>0 && item<=curmenu->num_entries) {
|
||||
item--;
|
||||
free(curmenu->label[item]);
|
||||
curmenu->label[item]=strdup(label);
|
||||
curmenu->value[item]=value;
|
||||
curmenu->submenu[item]=NULL;
|
||||
}
|
||||
}
|
||||
void glutChangeToSubMenu(int item,const char *label,int submenu)
|
||||
{
|
||||
if (item>0 && item<=curmenu->num_entries) {
|
||||
item--;
|
||||
free(curmenu->label[item]);
|
||||
curmenu->label[item]=strdup(label);
|
||||
curmenu->value[item]=0;
|
||||
curmenu->submenu[item]=(menu_t *)submenu;
|
||||
}
|
||||
}
|
||||
|
||||
void glutDestroyMenu(int menu)
|
||||
{
|
||||
menu_t *m=(menu_t *)menu;
|
||||
int i;
|
||||
|
||||
for (i=0;i<m->num_entries;i++) {
|
||||
free(m->label[i]);
|
||||
}
|
||||
free(m);
|
||||
}
|
||||
|
||||
int glutCreateSubWindow(int win,int x,int y,int w,int h)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void glutDestroyWindow(int win)
|
||||
{
|
||||
}
|
||||
|
||||
int glutGetWindow(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void glutSetWindow(int win)
|
||||
{
|
||||
}
|
||||
|
||||
void glutPositionWindow(int x,int y)
|
||||
{
|
||||
}
|
||||
|
||||
void glutReshapeWindow(int x,int y)
|
||||
{
|
||||
}
|
||||
|
||||
void glutPushWindow(void)
|
||||
{
|
||||
}
|
||||
|
||||
void glutPopWindow(void)
|
||||
{
|
||||
}
|
||||
|
||||
void glutIconifyWindow(void)
|
||||
{
|
||||
}
|
||||
|
||||
void glutShowWindow()
|
||||
{
|
||||
}
|
||||
|
||||
void glutHideWindow()
|
||||
{
|
||||
}
|
||||
|
||||
void glutSetCursor(int cursor)
|
||||
{
|
||||
}
|
||||
|
||||
void glutWarpPointer(int x,int y)
|
||||
{
|
||||
}
|
||||
|
||||
void glutEstablishOverlay(void)
|
||||
{
|
||||
}
|
||||
|
||||
void glutRemoveOverlay(void)
|
||||
{
|
||||
}
|
||||
|
||||
void glutUseLayer(GLenum layer)
|
||||
{
|
||||
}
|
||||
|
||||
int glutLayerGet(GLenum type)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void glutPostOverlayRedisplay(void)
|
||||
{
|
||||
}
|
||||
|
||||
void glutPostWindowOverlayRedisplay(int w)
|
||||
{
|
||||
}
|
||||
|
||||
void glutShowOverlay(void)
|
||||
{
|
||||
}
|
||||
|
||||
void glutHideOverlay(void)
|
||||
{
|
||||
}
|
||||
|
||||
int glutGetMenu(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void glutSetMenu(int menu)
|
||||
{
|
||||
}
|
||||
|
||||
void glutRemoveMenuItem(int item)
|
||||
{
|
||||
}
|
||||
|
||||
void glutSpaceBallMotionFunc(void (*func)(int key,int x,int y))
|
||||
{
|
||||
}
|
||||
|
||||
void glutSpaceBallRotateFunc(void (*func)(int x,int y,int z))
|
||||
{
|
||||
}
|
||||
|
||||
void glutSpaceBallButtonFunc(void (*func)(int button,int state))
|
||||
{
|
||||
}
|
||||
|
||||
void glutCopyColormap(int win)
|
||||
{
|
||||
}
|
||||
|
||||
int glutDeviceGet(GLenum param)
|
||||
{
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user