home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 5 / FreshFish_July-August1994.bin / bbs / gfx / earth-1.0.lha / Earth-1.0 / globe.c < prev    next >
C/C++ Source or Header  |  1994-05-22  |  3KB  |  107 lines

  1. //===============================================================
  2. // Picture on Sphere Mapper.            (C) DEC 1993 L.Vanhelsuwe
  3. // -------------------------
  4. // History
  5. // -------
  6. // Sat Dec 11:    started this file
  7. // Fri Dec 24:    improved loop to avoid writing out vertices with identical xyz
  8. //===============================================================
  9.  
  10. //#include    <m68881.h>
  11. #include    <math.h>
  12. #include    <stdio.h>
  13. #include    <strings.h>
  14.  
  15. #include    <exec/types.h>
  16. #include    <intuition/intuition.h>
  17.  
  18. #include    <proto/exec.h>
  19. #include    <proto/dos.h>
  20. #include    <proto/intuition.h>
  21. #include    <proto/graphics.h>
  22.  
  23. #define        BALLRAD            150
  24.  
  25. #define        SCREEN_WIDTH    320
  26. #define        SCREEN_HEIGHT    256
  27. #define        IM_WIDTH        320
  28. #define        IM_HEIGHT        200
  29.  
  30. struct NewScreen ns = {0,0,SCREEN_WIDTH,SCREEN_HEIGHT,2,
  31.                         0,1,0,0,
  32.                         NULL,"World Map Sphere Mapper",NULL,NULL};
  33. struct Screen *myscreen;
  34.  
  35. struct IntuitionBase *IntuitionBase;
  36. struct GfxBase *GfxBase;
  37.  
  38. struct RastPort *rp;
  39.  
  40. void    load_picture( char * filename);
  41.  
  42. //=====================================================
  43. main() {
  44.  
  45. LONG fh1;
  46. char outstr[256];
  47.  
  48. float    xnorm, ynorm;
  49. int        sx,sy, x,y,z, ox,oy,oz;
  50.  
  51.     IntuitionBase    = (void*) OpenLibrary("intuition.library",0);
  52.     GfxBase            = (void*) OpenLibrary("graphics.library",0);
  53.     myscreen        = (void*) OpenScreen(&ns);
  54.     rp                = &myscreen->RastPort;
  55.  
  56.     load_picture("GLOBE.raw");
  57.  
  58.     fh1 = Open("RAM:3D.Globe", MODE_NEWFILE);
  59.  
  60.     ox = oy = oz = PI;
  61.  
  62.     // Sample entire 2-D picture for non-background pixels and convert all
  63.     // those into mapped 3-D pixels
  64.  
  65.     for (sy=0; sy < IM_HEIGHT; sy++) {
  66.         for (sx=0; sx < IM_WIDTH; sx++) {        //    printf("(%d,%d) = ", sx, sy);
  67.  
  68.             if (ReadPixel(rp,sx,sy)) {            // transform all non-background
  69.  
  70.                 xnorm = 2*PI*((float)sx)/IM_WIDTH;            // normalize to 
  71.                 ynorm = PI/2 - (PI*((float)sy)/IM_HEIGHT);    // spherical range
  72.  
  73. //                printf("(%3.2f,%3.2f)\n", xnorm, ynorm);
  74.  
  75.                 x = (int) (0.5+ BALLRAD*sin(xnorm)*cos(ynorm));
  76.                 y = (int) (0.5+ BALLRAD*sin(ynorm));
  77.                 z = (int) (0.5+ BALLRAD*cos(xnorm)*cos(ynorm));
  78.  
  79.                 if (x != ox || y != oy || z != oz) {
  80.                     sprintf(outstr,"    DC.W    %d,%d,%d\n", x,y,z);
  81. //                     printf(        "    DC.W    %d,%d,%d", x,y,z);
  82.                     Write(fh1, outstr, strlen(outstr));
  83.  
  84.                     ox = x; oy = y; oz = z;
  85.                 }
  86.             }
  87.             WritePixel(rp,sx,sy);            // erase pixel as progress feedback
  88.         }
  89.     }
  90.  
  91.     Close(fh1);                                // close generated file.
  92.  
  93.     Execute("C:COPY RAM:3D.Globe 3d:WORLDS", NULL, NULL);
  94.     Execute("C:DELETE RAM:3D.globe", NULL, NULL);
  95.  
  96.     CloseScreen(myscreen);
  97. }
  98. //=====================================================
  99. //=====================================================
  100. void load_picture(char * filename) {
  101. LONG fh1;
  102.  
  103.     fh1 = Open(filename, MODE_OLDFILE);
  104.     Read(fh1, myscreen->BitMap.Planes[0], IM_WIDTH/8*IM_HEIGHT);
  105.     Close(fh1);
  106. }
  107.