|
|
1.1 ! root 1: #include <CC/jerq.h> ! 2: #include "frame.pri" ! 3: #include "camera.pub" ! 4: ! 5: Hcoord direct(short, short, short); ! 6: ! 7: #define Z(x,y) data[(x)+m->nx*(y)] ! 8: #define SEG(x1,y1,x2,y2) {if((Z(x1,y1)>m->floor)&&(Z(x2,y2)>m->floor))seg(x1,y1,x2,y2);} ! 9: ! 10: void ! 11: Frame.view(short vlat, short vlon, short vdist, short valat, short valon, short vpersp) ! 12: { ! 13: register i; ! 14: ! 15: if((vlat != lat) || (vlon != lon) || (vdist != dist) || (valat != alat) ! 16: || (valon != alon) || (vpersp != persp)) ! 17: { ! 18: lat = vlat; ! 19: lon = vlon; ! 20: dist = vdist; ! 21: alat = valat; ! 22: alon = valon; ! 23: persp = vpersp; ! 24: draw(); ! 25: } ! 26: show(); ! 27: } ! 28: ! 29: void ! 30: Frame.draw() ! 31: { ! 32: register x, y; ! 33: ! 34: transdata(); ! 35: rectf(b, b->rect, F_CLR); ! 36: for(y = 0; y < m->ny; y++) ! 37: { ! 38: for(x = 0; x < m->nx; x++) ! 39: { ! 40: if(y) SEG(x, y-1, x, y); ! 41: if(x) SEG(x-1, y, x, y); ! 42: } ! 43: wait(CPU); ! 44: } ! 45: } ! 46: ! 47: void ! 48: Frame.show() ! 49: { ! 50: bitblt(b, b->rect, &display, m->ctr, F_STORE); ! 51: } ! 52: ! 53: void ! 54: Frame.rd(int n) ! 55: { ! 56: register short *s; ! 57: extern int getn(); ! 58: ! 59: alon = -1; ! 60: gets(time); ! 61: s = data = (short *)alloc(n*2); ! 62: while(n--) ! 63: *s++ = getn(); ! 64: b = balloc(m->bound); ! 65: } ! 66: /* ! 67: the data will always fall in the cube 1000*1000*1000 ! 68: centered at the origin ! 69: */ ! 70: ! 71: #define SCALE 1000 ! 72: ! 73: void ! 74: Frame.transdata() ! 75: { ! 76: register x, y; ! 77: register Hcoord *h; ! 78: short *d; ! 79: int scaly; ! 80: int scale = max(m->nx, m->ny)-1; ! 81: Hcoord e = direct(lat, lon, dist*SCALE/100); ! 82: Hcoord l = direct(alat, alon, ONE*2); ! 83: extern long vscale; ! 84: ! 85: init3(b, 1, 1); ! 86: look3(e, l, Hcoord((l.x == 0) && (l.y == 0), 0, 1, 1)); ! 87: clip3scale = (1-persp)*SCALE; ! 88: scaly = muldiv(SCALE/2, vscale, 32768); ! 89: h = (Hcoord *)m->tdata; ! 90: for(y = 0, d = data; y < m->ny; y++) ! 91: for(x = 0; x < m->nx; x++, h++) ! 92: { ! 93: *h = Hcoord(muldiv(x, SCALE, scale)-SCALE/2, ! 94: muldiv(y, SCALE, scale)-SCALE/2, ! 95: muldiv(*d++, scaly, 32768), 1); ! 96: } ! 97: } ! 98: ! 99: void ! 100: Frame.seg(short x1, short y1, short x2, short y2) ! 101: { ! 102: register Hcoord *h = (Hcoord *)m->tdata; ! 103: ! 104: move3(h[x1+y1*m->nx]); ! 105: line3(h[x2+y2*m->nx]); ! 106: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.