void display() { computePos(deltaForwardMove, deltaSideMove); if(deltaAnglex){ computeDir(deltaAnglex, deltaAngley); } glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); gluLookAt(camx, 1.0f, camz, camx+lx, 1.0+ly, camz+lz, 0.0f, 1.0f, 0.0f); makelighting(); makewalls(); // make balls for (int i = 0; i < numballs; i++) { makeball(balls[i]); } makecubes(); glutSwapBuffers(); }
main() { char device[10], *p; float x, y, tdir = TRANS; int but, nplanes; int i, n; char buf[10][128]; fprintf(stderr,"Enter output device: "); gets(device); prefposition(50, 50); vinit(device); window(-800.0, 800.0, -800.0, 800.0, -800.0, 800.0); lookat(0.0, 0.0, 1500.0, 0.0, 0.0, 0.0, 0.0); makeobj(1); makepoly(); rect(-CUBE_SIZE, -CUBE_SIZE, CUBE_SIZE, CUBE_SIZE); closepoly(); closeobj(); if ((nplanes = getdepth()) == 1) makecubes(0); makecubes(1); backface(1); if (backbuffer() < 0) { vexit(); fprintf(stderr, "lcube: device doesn't support double buffering.\n"); exit(0); } while((but = slocator(&x, &y)) != 44) { pushmatrix(); rotate(100.0 * x, 'y'); rotate(100.0 * y, 'x'); color(BLACK); clear(); callobj(3); if (nplanes == 1) callobj(2); popmatrix(); swapbuffers(); switch (but = checkkey()) { case 'x': translate(tdir, 0.0, 0.0); break; case 'y': translate(0.0, tdir, 0.0); break; case 'z': translate(0.0, 0.0, tdir); break; case '-': tdir = -tdir; break; case '+': tdir = TRANS; break; case 27: /* ESC */ case 'q': vexit(); exit(0); default: ; } } vexit(); }
main() { char *p; float tdir = TRANS; float scal = 1.0 + SCAL; int but, nplanes; int x, y, i, n; short val; int bf = 1; int fill = 1; prefsize(500L, 500L); vinit("mswin"); winopen("lcube"); unqdevice(INPUTCHANGE); qdevice(SKEY); qdevice(XKEY); qdevice(YKEY); qdevice(ZKEY); qdevice(EQUALKEY); qdevice(MINUSKEY); qdevice(ESCKEY); qdevice(QKEY); qdevice(FKEY); qdevice(BKEY); /* * Wait for REDRAW event ... */ while (qread(&val) != REDRAW) ; window(-800.0, 800.0, -800.0, 800.0, -800.0, 800.0); lookat(0.0, 0.0, 1500.0, 0.0, 0.0, 0.0, 0); if ((nplanes = getplanes()) == 1) makecubes(0); makecubes(1); backface(1); doublebuffer(); gconfig(); /* * Doublebuffer does a backbuffer(TRUE).... */ while(1) { x = 500 - (int)getvaluator(MOUSEX); y = 500 - (int)getvaluator(MOUSEY); x *= 3; y *= 3; pushmatrix(); rotate(x, 'y'); rotate(y, 'x'); color(BLACK); clear(); callobj((Object)3); if (nplanes == 1) callobj((Object)2); popmatrix(); swapbuffers(); if (qtest()) { but = qread(&val); but = qread(&val); /* swallow up event */ switch (but) { case SKEY: scale(scal, scal, scal); break; case XKEY: translate(tdir, 0.0, 0.0); break; case YKEY: translate(0.0, tdir, 0.0); break; case ZKEY: translate(0.0, 0.0, tdir); break; case MINUSKEY: tdir = -tdir; if (scal < 1.0) scal = 1.0 + SCAL; else scal = 1.0 - SCAL; break; case EQUALKEY: tdir = TRANS; break; case BKEY: bf = !bf; backface(bf); break; case FKEY: fill = !fill; if (fill) polymode(PYM_FILL); else polymode(PYM_LINE); break; case ESCKEY: case QKEY: gexit(); exit(0); default: ; } } } }