123
100
static float _waveHeight = 1.0;
124
101
static float _waveFreq = 3.0;
103
static trackball_state *trackball;
104
static Bool button_down_p = False;
126
106
#define WIDTH 320
127
107
#define HEIGHT 240
129
109
static XrmOptionDescRec opts[] = {
130
{"-squares", ".gflux.squares", XrmoptionSepArg, (caddr_t) NULL},
131
{"-resolution", ".gflux.resolution", XrmoptionSepArg, (caddr_t) NULL},
132
{"-draw", ".gflux.draw", XrmoptionSepArg, (caddr_t) NULL},
133
{"-flat", ".gflux.flat", XrmoptionSepArg, (caddr_t) NULL},
134
{"-speed", ".gflux.speed", XrmoptionSepArg, (caddr_t) NULL},
135
{"-rotationx", ".gflux.rotationx", XrmoptionSepArg, (caddr_t) NULL},
136
{"-rotationy", ".gflux.rotationy", XrmoptionSepArg, (caddr_t) NULL},
137
{"-rotationz", ".gflux.rotationz", XrmoptionSepArg, (caddr_t) NULL},
138
{"-waves", ".gflux.waves", XrmoptionSepArg, (caddr_t) NULL},
139
{"-waveChange", ".gflux.waveChange", XrmoptionSepArg, (caddr_t) NULL},
140
{"-waveHeight", ".gflux.waveHeight", XrmoptionSepArg, (caddr_t) NULL},
141
{"-waveFreq", ".gflux.waveFreq", XrmoptionSepArg, (caddr_t) NULL},
142
{"-zoom", ".gflux.zoom", XrmoptionSepArg, (caddr_t) NULL},
110
{"-squares", ".gflux.squares", XrmoptionSepArg, 0},
111
{"-resolution", ".gflux.resolution", XrmoptionSepArg, 0},
112
/* {"-draw", ".gflux.draw", XrmoptionSepArg, 0},*/
113
{"-mode", ".gflux.mode", XrmoptionSepArg, 0},
114
{"-flat", ".gflux.flat", XrmoptionSepArg, 0},
115
{"-speed", ".gflux.speed", XrmoptionSepArg, 0},
116
{"-rotationx", ".gflux.rotationx", XrmoptionSepArg, 0},
117
{"-rotationy", ".gflux.rotationy", XrmoptionSepArg, 0},
118
{"-rotationz", ".gflux.rotationz", XrmoptionSepArg, 0},
119
{"-waves", ".gflux.waves", XrmoptionSepArg, 0},
120
{"-waveChange", ".gflux.waveChange", XrmoptionSepArg, 0},
121
{"-waveHeight", ".gflux.waveHeight", XrmoptionSepArg, 0},
122
{"-waveFreq", ".gflux.waveFreq", XrmoptionSepArg, 0},
123
{"-zoom", ".gflux.zoom", XrmoptionSepArg, 0},
146
127
static argtype vars[] = {
147
{(caddr_t *) & _squares, "squares", "Squares", "19", t_Int},
148
{(caddr_t *) & _resolution, "resolution", "Resolution", "4", t_Int},
149
{(caddr_t *) & _draw, "draw", "Draw", "2", t_Int},
150
{(caddr_t *) & _flat, "flat", "Flat", "0", t_Int},
151
{(caddr_t *) & _speed, "speed", "Speed", "0.05", t_Float},
152
{(caddr_t *) & _rotationx, "rotationx", "Rotationx", "0.01", t_Float},
153
{(caddr_t *) & _rotationy, "rotationy", "Rotationy", "0.0", t_Float},
154
{(caddr_t *) & _rotationz, "rotationz", "Rotationz", "0.1", t_Float},
155
{(caddr_t *) & _waves, "waves", "Waves", "3", t_Int},
156
{(caddr_t *) & _waveChange, "waveChange", "WaveChange", "50", t_Int},
157
{(caddr_t *) & _waveHeight, "waveHeight", "WaveHeight", "1.0", t_Float},
158
{(caddr_t *) & _waveFreq, "waveFreq", "WaveFreq", "3.0", t_Float},
159
{(caddr_t *) & _zoom, "zoom", "Zoom", "1.0", t_Float},
128
{&_squares, "squares", "Squares", "19", t_Int},
129
{&_resolution, "resolution", "Resolution", "4", t_Int},
130
/* {&_draw, "draw", "Draw", "2", t_Int},*/
131
{&_flat, "flat", "Flat", "0", t_Int},
132
{&_speed, "speed", "Speed", "0.05", t_Float},
133
{&_rotationx, "rotationx", "Rotationx", "0.01", t_Float},
134
{&_rotationy, "rotationy", "Rotationy", "0.0", t_Float},
135
{&_rotationz, "rotationz", "Rotationz", "0.1", t_Float},
136
{&_waves, "waves", "Waves", "3", t_Int},
137
{&_waveChange, "waveChange", "WaveChange", "50", t_Int},
138
{&_waveHeight, "waveHeight", "WaveHeight", "1.0", t_Float},
139
{&_waveFreq, "waveFreq", "WaveFreq", "3.0", t_Float},
140
{&_zoom, "zoom", "Zoom", "1.0", t_Float},
356
/* load pnm from stdin using pnm libs */
357
void loadTexture(void)
360
gflux->image = ppm_readppm( file,
361
&(gflux->imageHeight), &(gflux->imageWidth), &(gflux->imageMax) );
364
/* creates an image for texture mapping */
365
void createTexture(void)
370
gflux->imageHeight = gflux->imageWidth = 8;
372
result = ppm_allocarray(gflux->imageHeight,gflux->imageWidth);
373
for(i=0;i<gflux->imageHeight;i++) {
374
for(j=0;j<gflux->imageWidth;j++) {
375
c = (((i)%2 ^ (j)%2) ? 100 : 200 );
376
PPM_ASSIGN( result[i][j] , c, c, c );
379
gflux->image = result;
382
/* specifies image as texture */
383
void initTexture(void)
385
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
386
glGenTextures(1, &gflux->texName);
387
glBindTexture(GL_TEXTURE_2D, gflux->texName);
388
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
389
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
390
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
391
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
392
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, gflux->imageWidth,
393
gflux->imageHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, *(gflux->image));
397
#else /* HAVE_PPM FALSE */
399
#define presult(A,B,C) (*(result+(A)*(gflux->imageWidth)*4+(B)*4+(C)))
400
void loadTexture(void)
402
int i, j, levels, width, height;
411
if(!strncmp(s,"P6",2)) ppmType=6;
412
if(!strncmp(s,"P5",2)) ppmType=5;
413
if(!strncmp(s,"P3",2)) ppmType=3;
414
if(!strncmp(s,"P2",2)) ppmType=2;
417
while((i=getc(file))=='#')
419
while(getc(file)!='\n');
423
fscanf(file,"%d %d %d",&width,&height,&levels);
425
result = malloc(sizeof(GLubyte)*4*width*height);
426
gflux->imageWidth = width;
427
gflux->imageHeight = height;
430
case 2 : /* ASCII grey */
431
for(i=0;i<height;i++) {
432
for(j=0;j<width;j++) {
433
fscanf(file,"%d",&red);
434
presult(j,i,0) = red;
435
presult(j,i,1) = red;
436
presult(j,i,2) = red;
440
case 3 : /* ASCII rgb */
441
for(i=0;i<height;i++) {
442
for(j=0;j<width;j++) {
443
fscanf(file,"%d %d %d",&red,&green,&blue);
444
presult(j,i,0) = red;
445
presult(j,i,1) = green;
446
presult(j,i,2) = blue;
450
case 5 : /* Binary grey */
451
getc(file); /* seems nessessary */
452
for(i=0;i<height;i++) {
453
for(j=0;j<width;j++) {
455
presult(j,i,0) = red;
456
presult(j,i,1) = red;
457
presult(j,i,2) = red;
461
case 6 : /* Binary rgb */
462
getc(file); /* seems nessessary */
463
for(i=0;i<height;i++) {
464
for(j=0;j<width;j++) {
468
presult(j,i,0) = red;
469
presult(j,i,1) = green;
470
presult(j,i,2) = blue;
475
gflux->image = result;
478
void createTexture(void)
483
gflux->imageHeight = gflux->imageWidth = 8;
485
result = malloc(sizeof(GLubyte)*4*gflux->imageHeight*gflux->imageWidth);
486
for(i=0;i<gflux->imageHeight;i++) {
487
for(j=0;j<gflux->imageWidth;j++) {
488
c = (((i)%2 ^ (j)%2) ? 100 : 200 );
489
presult(i,j,0) = (GLubyte) c;
490
presult(i,j,1) = (GLubyte) c;
491
presult(i,j,2) = (GLubyte) c;
492
presult(i,j,3) = (GLubyte) 255;
495
gflux->image = result;
498
/* specifies image as texture */
499
void initTexture(void)
501
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
502
glGenTextures(1, &gflux->texName);
503
glBindTexture(GL_TEXTURE_2D, gflux->texName);
504
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
505
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
506
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
507
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
508
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, gflux->imageWidth,
509
gflux->imageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, gflux->image);
399
void createTexture(void)
402
unsigned int data[] = { 0xFFFFFFFF, 0xAAAAAAAA, 0xFFFFFFFF, 0xAAAAAAAA,
403
0xAAAAAAAA, 0xFFFFFFFF, 0xAAAAAAAA, 0xFFFFFFFF,
404
0xFFFFFFFF, 0xAAAAAAAA, 0xFFFFFFFF, 0xAAAAAAAA,
405
0xAAAAAAAA, 0xFFFFFFFF, 0xAAAAAAAA, 0xFFFFFFFF };
407
gflux->tex_xscale = size;
408
gflux->tex_yscale = size;
410
glGenTextures (1, &gflux->texName);
411
glBindTexture (GL_TEXTURE_2D, gflux->texName);
413
glTexImage2D (GL_TEXTURE_2D, 0, 3, size, size, 0,
414
GL_RGBA, GL_UNSIGNED_BYTE, data);
416
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
417
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
419
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
420
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
427
Bool mipmap_p = True;
430
if (MI_IS_WIREFRAME(gflux->modeinfo))
433
if (! screen_to_texture (gflux->modeinfo->xgwa.screen,
434
gflux->modeinfo->window, 0, 0, mipmap_p,
435
NULL, &gflux->img_geom, &iw, &ih, &tw, &th))
438
gflux->tex_xscale = (GLfloat) iw / tw;
439
gflux->tex_yscale = -(GLfloat) ih / th;
440
gflux->img_width = iw;
441
gflux->img_height = ih;
443
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
444
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
445
(mipmap_p ? GL_LINEAR_MIPMAP_LINEAR : GL_LINEAR));
516
449
void initLighting(void)