From 96cd7ac13106f65d309538672376a3cc6617753e Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Thu, 28 Dec 2017 13:17:16 -0500 Subject: [PATCH] mode7: more work on starfield --- gr-sim/starfield.c | 133 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 110 insertions(+), 23 deletions(-) diff --git a/gr-sim/starfield.c b/gr-sim/starfield.c index bc05a6de..28b3d647 100644 --- a/gr-sim/starfield.c +++ b/gr-sim/starfield.c @@ -4,59 +4,146 @@ #include "gr-sim.h" -#define NUMSTARS 64 +#define NUMSTARS 16 + +struct fixed_type { + char i; + unsigned char f; +}; + struct star_type { - double x; - double y; - double z; + struct fixed_type x; + struct fixed_type y; + struct fixed_type z; + int color; }; +static void double_to_fixed(double d, struct fixed_type *f) { + + int temp; + + temp=d*256; + + f->i=(temp>>8)&0xff; + + f->f=temp&0xff; + + +} + +static void print_fixed(struct fixed_type *f) { + + printf("%02X.%02X",f->i,f->f); +} + +static void fixed_add(struct fixed_type *x, struct fixed_type *y, struct fixed_type *z) { + int carry; + short sum; + + sum=(short)(x->f)+(short)(y->f); + + if (sum>=256) carry=1; + else carry=0; + + z->f=sum&0xff; + + z->i=x->i+y->i+carry; +} + +static double fixed_to_double(struct fixed_type *f) { + + double d; + + d=f->i; + d+=((double)(f->f))/256.0; + +// printf("(%02x.%02x)=%lf\n",f->i,f->f,*d); + + return d; +} + + static struct star_type stars[NUMSTARS]; int main(int argc, char **argv) { int ch,i; - int spreadx=40; - int spready=40; - int spreadz=5; + int spreadx=256; + int spready=256; + int spreadz=16; + struct fixed_type speedz; + + double_to_fixed(-0.25,&speedz); grsim_init(); for(i=0;i=40) || + (tempy>=40)) { + + double_to_fixed((drand48()-0.5)*spreadx, + &stars[i].x); + double_to_fixed((drand48()-0.5)*spready, + &stars[i].y); + stars[i].z.i=spreadz; + } + else { + color_equals(stars[i].color); + basic_plot(tempx,tempy); + } + + } + + /* Move stars */ + for(i=0;i