home *** CD-ROM | disk | FTP | other *** search
/ Amiga Developer CD 1.2 / amidev_cd_12.iso / contrib / cgx3dvirge / examples / virgindemo.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-02-02  |  22.3 KB  |  770 lines

  1. /*
  2. **    $VER: VirginDemo.c 1.1 (02-Feb-1998)
  3. **
  4. **    This is an example program for cgx3dvirgin.library
  5. **
  6. **      Written by Frank Mariak
  7. **
  8. **    Copyright © 1996-1998 by phase5 digital products
  9. **      All Rights reserved.
  10. **
  11. */
  12.  
  13. #include <math.h>
  14. #include <stdio.h>
  15. #include <stdlib.h>
  16.  
  17. #include <cybergraphx/cybergraphics.h>
  18. #include <cybergraphx/cgx3dvirgin.h>
  19. #include <dos/dos.h>
  20. #include <exec/execbase.h>
  21. #include <exec/memory.h>
  22. #include <intuition/intuition.h>
  23. #include <libraries/lowlevel.h>
  24.  
  25. #include <proto/cybergraphics.h>
  26. #include <proto/cgx3dvirgin.h>
  27. #include <proto/dos.h>
  28. #include <proto/exec.h>
  29. #include <proto/graphics.h>
  30. #include <proto/lowlevel.h>
  31.  
  32. #ifndef DEMO1 // textured demo with z-buffering
  33. #ifndef DEMO2 // textured demo without z-buffering
  34. #ifndef DEMO3 // lit textured demo without z-buffering
  35. #ifndef DEMO4 // goroud shaded demo without z-buffering
  36.         You need to specify at least one of the above defines!
  37. #else
  38. #ifdef LUTMODE
  39.         Demo4 does not work in LUTMODE !
  40. #endif
  41. #endif
  42. #else
  43. #ifdef LUTMODE
  44.         Demo3 does not work in LUTMODE !
  45. #endif
  46. #endif
  47. #endif
  48. #endif
  49.  
  50.  
  51. #define DISPLAYWIDTH    640
  52. #define DISPLAYHEIGHT   480
  53. #define WINX    DISPLAYWIDTH
  54. #define WINY    DISPLAYHEIGHT
  55. #define FOCUS 400.0 // 400.0
  56.  
  57. #define Up      0x4c
  58. #define Left    0x4f
  59. #define Down    0x4d
  60. #define Right   0x4e
  61.  
  62. #define AUp     0x3e
  63. #define ALeft   0x2d
  64. #define ADown   0x1e
  65. #define ARight  0x2f
  66. #define AAxUp   0x1d
  67. #define AAxDown 0x3f
  68. #define Plus    0x5e
  69. #define Minus   0x4a
  70. #define Help    0x5f
  71. #define esc     0x45
  72.  
  73. #ifdef LUTMODE
  74. #define TEXMAPNAME      (STRPTR)"tex128.lut8"
  75. #define TEXMAPSIZE      128*128
  76. #else
  77. #define TEXMAPNAME      (STRPTR)"tex128.argb8888"
  78. #define TEXMAPSIZE      128*128*4
  79. #endif
  80.  
  81. void CloseAll(void);
  82. void LocalWorld(Triangle3D *,int,float,float,float,int);
  83.  
  84.  
  85. Triangle3D    polydata[] =
  86.         {
  87. #ifdef DEMO1
  88. #include    "obj_ring.cdat"
  89. #else
  90. #include        "obj_cylinder.cdat"
  91. #endif
  92.         };
  93.  
  94. #ifdef LUTMODE
  95.  
  96. ULONG PaletteRGB32[770] =
  97. {
  98.     0x01000000,
  99.     0x00000000,0x00000000,0x00000000,
  100.     0x08888888,0x00000000,0x00000000,
  101.     0x04444444,0x08888888,0x00000000,
  102.     0x08888888,0x08888888,0x08888888,
  103.     0x10000000,0x08888888,0x00000000,
  104.     0x10000000,0x0CCCCCCC,0x08888888,
  105.     0x18888888,0x08888888,0x04444444,
  106.     0x08888888,0x18888888,0x0CCCCCCC,
  107.     0x18888888,0x10000000,0x08888888,
  108.     0x14444444,0x18888888,0x08888888,
  109.     0x20000000,0x14444444,0x08888888,
  110.     0x10000000,0x20000000,0x0CCCCCCC,
  111.     0x1CCCCCCC,0x18888888,0x10000000,
  112.     0x28888888,0x10000000,0x08888888,
  113.     0x1CCCCCCC,0x20000000,0x10000000,
  114.     0x1CCCCCCC,0x20000000,0x14444444,
  115.     0x2DDDDDDD,0x18888888,0x08888888,
  116.     0x31111111,0x10000000,0x08888888,
  117.     0x2DDDDDDD,0x18888888,0x10000000,
  118.     0x18888888,0x28888888,0x1CCCCCCC,
  119.     0x28888888,0x20000000,0x10000000,
  120.     0x2DDDDDDD,0x24444444,0x10000000,
  121.     0x24444444,0x28888888,0x18888888,
  122.     0x20000000,0x31111111,0x18888888,
  123.     0x39999999,0x18888888,0x08888888,
  124.     0x24444444,0x28888888,0x20000000,
  125.     0x35555555,0x20000000,0x0CCCCCCC,
  126.     0x31111111,0x28888888,0x14444444,
  127.     0x28888888,0x31111111,0x18888888,
  128.     0x39999999,0x20000000,0x10000000,
  129.     0x41111111,0x18888888,0x0CCCCCCC,
  130.     0x39999999,0x28888888,0x10000000,
  131.     0x31111111,0x31111111,0x18888888,
  132.     0x39999999,0x2DDDDDDD,0x18888888,
  133.     0x35555555,0x31111111,0x20000000,
  134.     0x49999999,0x18888888,0x0CCCCCCC,
  135.     0x45555555,0x20000000,0x10000000,
  136.     0x41111111,0x28888888,0x10000000,
  137.     0x31111111,0x31111111,0x28888888,
  138.     0x35555555,0x39999999,0x1CCCCCCC,
  139.     0x41111111,0x31111111,0x18888888,
  140.     0x39999999,0x39999999,0x24444444,
  141.     0x51111111,0x18888888,0x0CCCCCCC,
  142.     0x51111111,0x20000000,0x10000000,
  143.     0x4DDDDDDD,0x28888888,0x10000000,
  144.     0x4DDDDDDD,0x2DDDDDDD,0x18888888,
  145.     0x45555555,0x35555555,0x1CCCCCCC,
  146.     0x41111111,0x39999999,0x24444444,
  147.     0x59999999,0x18888888,0x0CCCCCCC,
  148.     0x41111111,0x39999999,0x28888888,
  149.     0x49999999,0x39999999,0x18888888,
  150.     0x39999999,0x41111111,0x28888888,
  151.     0x59999999,0x20000000,0x10000000,
  152.     0x51111111,0x31111111,0x14444444,
  153.     0x49999999,0x39999999,0x20000000,
  154.     0x59999999,0x28888888,0x14444444,
  155.     0x51111111,0x39999999,0x18888888,
  156.     0x41111111,0x41111111,0x2DDDDDDD,
  157.     0x51111111,0x3DDDDDDD,0x20000000,
  158.     0x59999999,0x31111111,0x14444444,
  159.     0x51111111,0x39999999,0x2DDDDDDD,
  160.     0x61111111,0x28888888,0x10000000,
  161.     0x65555555,0x20000000,0x10000000,
  162.     0x51111111,0x41111111,0x24444444,
  163.     0x41111111,0x45555555,0x39999999,
  164.     0x4DDDDDDD,0x45555555,0x31111111,
  165.     0x59999999,0x39999999,0x20000000,
  166.     0x61111111,0x31111111,0x18888888,
  167.     0x5DDDDDDD,0x39999999,0x18888888,
  168.     0x51111111,0x41111111,0x31111111,
  169.     0x5DDDDDDD,0x3DDDDDDD,0x20000000,
  170.     0x6DDDDDDD,0x28888888,0x14444444,
  171.     0x4DDDDDDD,0x49999999,0x31111111,
  172.     0x59999999,0x41111111,0x28888888,
  173.     0x71111111,0x20000000,0x14444444,
  174.     0x69999999,0x31111111,0x14444444,
  175.     0x59999999,0x41111111,0x31111111,
  176.     0x59999999,0x49999999,0x28888888,
  177.     0x71111111,0x28888888,0x18888888,
  178.     0x61111111,0x41111111,0x24444444,
  179.     0x51111111,0x4DDDDDDD,0x39999999,
  180.     0x71111111,0x31111111,0x18888888,
  181.     0x6DDDDDDD,0x39999999,0x18888888,
  182.     0x59999999,0x49999999,0x35555555,
  183.     0x79999999,0x20000000,0x14444444,
  184.     0x65555555,0x49999999,0x24444444,
  185.     0x6DDDDDDD,0x39999999,0x20000000,
  186.     0x79999999,0x28888888,0x14444444,
  187.     0x61111111,0x49999999,0x31111111,
  188.     0x71111111,0x41111111,0x18888888,
  189.     0x51111111,0x51111111,0x45555555,
  190.     0x79999999,0x31111111,0x10000000,
  191.     0x79999999,0x31111111,0x18888888,
  192.     0x59999999,0x51111111,0x3DDDDDDD,
  193.     0x71111111,0x41111111,0x24444444,
  194.     0x69999999,0x49999999,0x28888888,
  195.     0x51111111,0x59999999,0x3DDDDDDD,
  196.     0x79999999,0x39999999,0x1CCCCCCC,
  197.     0x61111111,0x4DDDDDDD,0x39999999,
  198.     0x69999999,0x4DDDDDDD,0x31111111,
  199.     0x86666666,0x28888888,0x18888888,
  200.     0x79999999,0x41111111,0x20000000,
  201.     0x75555555,0x49999999,0x28888888,
  202.     0x86666666,0x31111111,0x18888888,
  203.     0x86666666,0x2DDDDDDD,0x20000000,
  204.     0x65555555,0x51111111,0x3DDDDDDD,
  205.     0x5DDDDDDD,0x59999999,0x45555555,
  206.     0x82222222,0x39999999,0x18888888,
  207.     0x82222222,0x39999999,0x28888888,
  208.     0x79999999,0x4DDDDDDD,0x28888888,
  209.     0x71111111,0x51111111,0x31111111,
  210.     0x65555555,0x59999999,0x3DDDDDDD,
  211.     0x69999999,0x51111111,0x45555555,
  212.     0x82222222,0x41111111,0x20000000,
  213.     0x8EEEEEEE,0x31111111,0x1CCCCCCC,
  214.     0x7DDDDDDD,0x51111111,0x28888888,
  215.     0x69999999,0x59999999,0x45555555,
  216.     0x5DDDDDDD,0x59999999,0x51111111,
  217.     0x8EEEEEEE,0x39999999,0x1CCCCCCC,
  218.     0x75555555,0x51111111,0x35555555,
  219.     0x82222222,0x49999999,0x24444444,
  220.     0x75555555,0x59999999,0x31111111,
  221.     0x8AAAAAAA,0x41111111,0x20000000,
  222.     0x8EEEEEEE,0x39999999,0x28888888,
  223.     0x75555555,0x59999999,0x35555555,
  224.     0x75555555,0x51111111,0x41111111,
  225.     0x61111111,0x61111111,0x4DDDDDDD,
  226.     0x6DDDDDDD,0x59999999,0x49999999,
  227.     0x86666666,0x51111111,0x2DDDDDDD,
  228.     0x75555555,0x59999999,0x3DDDDDDD,
  229.     0x96666666,0x3DDDDDDD,0x1CCCCCCC,
  230.     0x8EEEEEEE,0x49999999,0x20000000,
  231.     0x92222222,0x3DDDDDDD,0x28888888,
  232.     0x8EEEEEEE,0x49999999,0x28888888,
  233.     0x8AAAAAAA,0x51111111,0x20000000,
  234.     0x96666666,0x41111111,0x20000000,
  235.     0x69999999,0x61111111,0x4DDDDDDD,
  236.     0x86666666,0x59999999,0x35555555,
  237.     0x92222222,0x49999999,0x20000000,
  238.     0x79999999,0x61111111,0x41111111,
  239.     0x92222222,0x51111111,0x24444444,
  240.     0x79999999,0x61111111,0x49999999,
  241.     0x8EEEEEEE,0x59999999,0x28888888,
  242.     0x71111111,0x61111111,0x51111111,
  243.     0x92222222,0x51111111,0x28888888,
  244.     0x9AAAAAAA,0x49999999,0x24444444,
  245.     0x86666666,0x61111111,0x35555555,
  246.     0x92222222,0x59999999,0x2DDDDDDD,
  247.     0x75555555,0x69999999,0x51111111,
  248.     0x86666666,0x61111111,0x45555555,
  249.     0x92222222,0x59999999,0x35555555,
  250.     0x79999999,0x61111111,0x55555555,
  251.     0x8AAAAAAA,0x61111111,0x39999999,
  252.     0x9EEEEEEE,0x51111111,0x20000000,
  253.     0x71111111,0x69999999,0x59999999,
  254.     0x9EEEEEEE,0x49999999,0x2DDDDDDD,
  255.     0x9EEEEEEE,0x51111111,0x28888888,
  256.     0x8AAAAAAA,0x65555555,0x41111111,
  257.     0x7DDDDDDD,0x65555555,0x51111111,
  258.     0x96666666,0x59999999,0x39999999,
  259.     0x96666666,0x61111111,0x2DDDDDDD,
  260.     0x9EEEEEEE,0x59999999,0x28888888,
  261.     0x79999999,0x69999999,0x59999999,
  262.     0x8AAAAAAA,0x69999999,0x45555555,
  263.     0x82222222,0x69999999,0x51111111,
  264.     0x79999999,0x69999999,0x61111111,
  265.     0x9EEEEEEE,0x61111111,0x2DDDDDDD,
  266.     0x9AAAAAAA,0x69999999,0x2DDDDDDD,
  267.     0x8AAAAAAA,0x69999999,0x4DDDDDDD,
  268.     0x82222222,0x69999999,0x59999999,
  269.     0x9AAAAAAA,0x69999999,0x35555555,
  270.     0x9EEEEEEE,0x69999999,0x31111111,
  271.     0x9AAAAAAA,0x69999999,0x3DDDDDDD,
  272.     0x75555555,0x71111111,0x69999999,
  273.     0x8AAAAAAA,0x71111111,0x51111111,
  274.     0x8EEEEEEE,0x69999999,0x59999999,
  275.     0x9AAAAAAA,0x71111111,0x31111111,
  276.     0x86666666,0x71111111,0x61111111,
  277.     0x9AAAAAAA,0x69999999,0x45555555,
  278.     0xA6666666,0x6DDDDDDD,0x28888888,
  279.     0x9EEEEEEE,0x71111111,0x39999999,
  280.     0x8EEEEEEE,0x71111111,0x59999999,
  281.     0x9AAAAAAA,0x71111111,0x45555555,
  282.     0x82222222,0x79999999,0x65555555,
  283.     0xA2222222,0x75555555,0x31111111,
  284.     0x8EEEEEEE,0x71111111,0x5DDDDDDD,
  285.     0x9AAAAAAA,0x71111111,0x4DDDDDDD,
  286.     0xA2222222,0x75555555,0x39999999,
  287.     0x9EEEEEEE,0x79999999,0x3DDDDDDD,
  288.     0x82222222,0x79999999,0x6DDDDDDD,
  289.     0x8AAAAAAA,0x79999999,0x65555555,
  290.     0x9AAAAAAA,0x79999999,0x49999999,
  291.     0x9AAAAAAA,0x79999999,0x51111111,
  292.     0x96666666,0x79999999,0x59999999,
  293.     0xA6666666,0x79999999,0x3DDDDDDD,
  294.     0x8EEEEEEE,0x79999999,0x6DDDDDDD,
  295.     0x96666666,0x79999999,0x61111111,
  296.     0x92222222,0x86666666,0x5DDDDDDD,
  297.     0xA2222222,0x82222222,0x49999999,
  298.     0xA6666666,0x79999999,0x4DDDDDDD,
  299.     0x96666666,0x79999999,0x6DDDDDDD,
  300.     0xA6666666,0x86666666,0x41111111,
  301.     0x92222222,0x82222222,0x69999999,
  302.     0x9EEEEEEE,0x82222222,0x59999999,
  303.     0xA6666666,0x86666666,0x49999999,
  304.     0xA2222222,0x86666666,0x51111111,
  305.     0x92222222,0x82222222,0x6DDDDDDD,
  306.     0xAAAAAAAA,0x8AAAAAAA,0x41111111,
  307.     0x9EEEEEEE,0x86666666,0x5DDDDDDD,
  308.     0x92222222,0x7DDDDDDD,0x79999999,
  309.     0x96666666,0x86666666,0x71111111,
  310.     0xAAAAAAAA,0x8AAAAAAA,0x45555555,
  311.     0x9EEEEEEE,0x86666666,0x69999999,
  312.     0x92222222,0x86666666,0x79999999,
  313.     0xAAAAAAAA,0x8AAAAAAA,0x4DDDDDDD,
  314.     0xA2222222,0x8EEEEEEE,0x59999999,
  315.     0x9EEEEEEE,0x86666666,0x6DDDDDDD,
  316.     0x92222222,0x8EEEEEEE,0x7DDDDDDD,
  317.     0xAAAAAAAA,0x96666666,0x4DDDDDDD,
  318.     0xA2222222,0x8EEEEEEE,0x65555555,
  319.     0x9EEEEEEE,0x8AAAAAAA,0x75555555,
  320.     0xAAAAAAAA,0x92222222,0x59999999,
  321.     0xAAAAAAAA,0x9AAAAAAA,0x51111111,
  322.     0x9EEEEEEE,0x8EEEEEEE,0x79999999,
  323.     0xA6666666,0x92222222,0x69999999,
  324.     0x92222222,0x8EEEEEEE,0x86666666,
  325.     0xA6666666,0x9AAAAAAA,0x61111111,
  326.     0x9EEEEEEE,0x8EEEEEEE,0x7DDDDDDD,
  327.     0xA2222222,0x96666666,0x71111111,
  328.     0xAAAAAAAA,0x9AAAAAAA,0x69999999,
  329.     0x9EEEEEEE,0x92222222,0x86666666,
  330.     0xA6666666,0x96666666,0x7DDDDDDD,
  331.     0xA6666666,0x9EEEEEEE,0x75555555,
  332.     0xAEEEEEEE,0x9EEEEEEE,0x69999999,
  333.     0xAAAAAAAA,0x9EEEEEEE,0x75555555,
  334.     0xA2222222,0x9AAAAAAA,0x8AAAAAAA,
  335.     0xAAAAAAAA,0xA6666666,0x75555555,
  336.     0xB2222222,0xA6666666,0x69999999,
  337.     0xAAAAAAAA,0x9AAAAAAA,0x8AAAAAAA,
  338.     0xB2222222,0xA6666666,0x75555555,
  339.     0xAAAAAAAA,0xA6666666,0x82222222,
  340.     0xA2222222,0x9EEEEEEE,0x96666666,
  341.     0xAEEEEEEE,0x9EEEEEEE,0x8EEEEEEE,
  342.     0xAAAAAAAA,0xA6666666,0x8AAAAAAA,
  343.     0xAAAAAAAA,0xA6666666,0x96666666,
  344.     0xA2222222,0xAEEEEEEE,0xA6666666,
  345.     0xAEEEEEEE,0xAEEEEEEE,0x9AAAAAAA,
  346.     0xB6666666,0xAAAAAAAA,0x96666666,
  347.     0xAEEEEEEE,0xAEEEEEEE,0xA6666666,
  348.     0xB6666666,0xB2222222,0x9EEEEEEE,
  349.     0xB2222222,0xB2222222,0xA6666666,
  350.     0xAEEEEEEE,0xB6666666,0xAEEEEEEE,
  351.     0xB2222222,0xBEEEEEEE,0xAEEEEEEE,
  352.     0xB2222222,0xBEEEEEEE,0xB2222222,
  353.     0xB6666666,0xC6666666,0xB6666666,
  354.     0xBAAAAAAA,0xC6666666,0xBEEEEEEE,
  355.     0x00000000
  356. };
  357. #endif
  358.  
  359. #define NPOLY   ((sizeof(polydata)/sizeof(Triangle3D)))
  360.  
  361.  
  362. struct  IntuitionBase   *IntuitionBase = NULL;
  363. struct  GfxBase         *GfxBase = NULL;
  364. struct  Library         *CyberGfxBase = NULL;
  365. struct  Library         *CGX3DVirginBase=0;
  366. struct  Library         *LowLevelBase=0;
  367. View3D          v3d=0;
  368. TexHandle       th=0;
  369. UBYTE           BufNum=0;
  370. APTR            TexelMap=0;
  371.  
  372.  
  373.  
  374. void    main(int argc,char *argv[])
  375. {
  376.         float wz=0.0,wx=0.0,wy=0.0;
  377.         int    gz = 2000;
  378.         struct  ExecBase *ExecBase=(struct ExecBase *)*((ULONG *)4L);
  379.         struct MsgPort *eventmp;
  380.         BOOL Update=FALSE;
  381.         struct IntuiMessage *msg = NULL;
  382.  
  383. #ifdef _M68881
  384.         if(!(ExecBase->AttnFlags & AFF_68881))
  385.         {
  386.          printf("You need at least a 68881 floating point unit !\n");
  387.          return;
  388.         }
  389. #endif
  390.  
  391.     if (!(IntuitionBase=(struct IntuitionBase *)OpenLibrary("intuition.library",39L)))
  392.         { printf ("ERROR: Couldn't open intuition.library\n"); CloseAll(); }
  393.  
  394.       if (!(GfxBase=(struct GfxBase *)OpenLibrary("graphics.library",39L)))
  395.         { printf ("ERROR: Couldn't open graphics.library\n"); CloseAll(); }
  396.  
  397.  
  398.       if (!(CyberGfxBase=(struct Library *)OpenLibrary("cybergraphics.library",41L)))
  399.         { printf ("ERROR: Couldn't open cybergraphics.library\n"); CloseAll(); }
  400.  
  401.  
  402.     if (!(CGX3DVirginBase=(struct Library *)OpenLibrary("cgx3dvirgin.library",2L)))
  403.         { printf ("ERROR: Couldn't open cgx3dvirgin.library v2\n"); CloseAll(); }
  404.  
  405.         if(LowLevelBase = OpenLibrary("lowlevel.library",40L))
  406.         {
  407.          SetJoyPortAttrs(1L,
  408.                           SJA_Type, SJA_TYPE_GAMECTLR,
  409.                           TAG_DONE);
  410.         }
  411.  
  412. #ifndef DEMO4
  413.         if(TexelMap = AllocVec(TEXMAPSIZE,MEMF_CLEAR))
  414.         {
  415.          BPTR fh;
  416.          ULONG i;
  417.  
  418.      if(fh=Open(TEXMAPNAME,MODE_OLDFILE))
  419.       {
  420.       Read(fh,TexelMap,TEXMAPSIZE);
  421.       Close(fh);
  422.      }
  423.          else
  424.          {
  425.           printf("Unable to load texture datafile !\n");
  426.           CloseAll();
  427.          }
  428.  
  429.     for (i=0;i<NPOLY;i++)
  430.     {
  431.          polydata[i].p1.u *= 2;
  432.          polydata[i].p2.u *= 2;
  433.          polydata[i].p3.u *= 2;
  434. #ifdef DEMO1
  435.          polydata[i].p1.v *= 2;
  436.          polydata[i].p2.v *= 2;
  437.          polydata[i].p3.v *= 2;
  438. #else
  439.          polydata[i].p1.v *= 4;
  440.          polydata[i].p2.v *= 4;
  441.          polydata[i].p3.v *= 4;
  442. #endif
  443.         }
  444.  
  445.         }
  446. #endif
  447.  
  448.  
  449.         if(!(v3d=V3D_OpenViewTags(DISPLAYWIDTH,
  450.                                   DISPLAYHEIGHT,
  451. #ifdef LUTMODE
  452.                                   8,
  453.                                   V3DVA_Colors32,     PaletteRGB32,
  454. #else
  455.                                   15,
  456. #endif                               
  457.  
  458. #ifdef DEMO1
  459.                                   V3DVA_UseZBuffer,   TRUE,          // Demo1 needs zbuffering
  460. #else
  461.                                   V3DVA_UseZBuffer,   FALSE,
  462. #endif
  463.                                   TAG_DONE)))
  464.         {
  465.          printf("Unable to open a 3D view !\n");
  466.          CloseAll();
  467.         }
  468.  
  469.  
  470.         if(!(eventmp=V3D_CreateEventPort(v3d,IDCMP_RAWKEY|IDCMP_INTUITICKS)))
  471.         {
  472.          printf("Unable to create event port for idcmp messages !\n");
  473.          CloseAll();
  474.         }
  475.  
  476. #ifndef DEMO4
  477.         if(!(th=V3D_CreateTexHandleTags(v3d,
  478.                                         V3DTHA_TexelMap,     TexelMap,
  479.                                         V3DTHA_MapSize,      128,
  480. #ifdef LUTMODE
  481.                                         V3DTHA_TexClrFmt,    TEXFMT_LUT8,
  482.                                         V3DTHA_FilterMode,   FLTRMD_1TPP,
  483. #else
  484.                                         V3DTHA_TexClrFmt,    TEXFMT_ARGB8888,
  485.                                         V3DTHA_FilterMode,   FLTRMD_1TPP,
  486. #endif
  487.                                         V3DTHA_TexWrap,      TRUE,
  488. #ifdef DEMO3
  489.                                         V3DTHA_LitTexture,   TRUE,
  490. #else
  491.                                         V3DTHA_LitTexture,   FALSE,
  492. #endif
  493.                                         TAG_DONE)))
  494.         {
  495.          printf("Unable to create texture handle !\n");
  496.          CloseAll();
  497.         }
  498. #endif
  499.                          
  500.     LocalWorld(polydata,NPOLY,wx,wy,wz,gz);
  501.  
  502.     while(1)
  503.     {
  504. //         Wait(1L<<eventmp->mp_SigBit);
  505.  
  506.                      if(LowLevelBase)
  507.                       {
  508.                        ULONG state;
  509.  
  510.                        state=ReadJoyPort(1L);
  511.  
  512.                        if(state & JP_TYPE_GAMECTLR)
  513.                         {
  514.                          if(state & (JP_BUTTON_MASK|JP_DIRECTION_MASK))
  515.                          {
  516.  
  517.                          if(state & JPF_JOY_UP)
  518.                          {
  519.                           wx+= 3.14/18;
  520.                           Update = TRUE;
  521.                          }
  522.  
  523.                          if(state & JPF_JOY_DOWN)
  524.                          {
  525.                           wx-= 3.14/18;
  526.                           Update = TRUE;
  527.                          }
  528.  
  529.                          if(state & JPF_JOY_LEFT)
  530.                          {
  531.                           wy-= 3.14/18;
  532.                           Update = TRUE;
  533.                          }
  534.  
  535.                          if(state & JPF_JOY_RIGHT)
  536.                          {
  537.                           wy+= 3.14/18;
  538.                           Update = TRUE;
  539.                          }
  540.  
  541.                          if(state & JPF_BUTTON_FORWARD)
  542.                          {
  543.                           if( gz > 600)
  544.                           { gz-= 50;
  545.                             Update = TRUE;
  546.                           }
  547.                          }
  548.  
  549.                          if(state & JPF_BUTTON_REVERSE)
  550.                          {
  551.                           gz+= 50;
  552.                           Update = TRUE;
  553.                          }
  554.  
  555.  
  556.                          if(state & JPF_BUTTON_GREEN)
  557.                          {
  558.                           wz+= 3.14/18;
  559.                           Update = TRUE;
  560.                          }
  561.  
  562.                          if(state & JPF_BUTTON_YELLOW)
  563.                          {
  564.                           wz-= 3.14/18;
  565.                           Update = TRUE;
  566.                          }
  567.                          }
  568.                         }
  569.                         
  570.                       }
  571.  
  572.             while(msg=(struct IntuiMessage *)GetMsg(eventmp))
  573.             {
  574.              switch(msg->Class)
  575.              {
  576.                 case IDCMP_INTUITICKS:
  577.                      {
  578.                      }
  579.                      break;
  580.                 case IDCMP_RAWKEY:
  581.                      {
  582.                         int Code=msg->Code;
  583.  
  584.                         if(!(Code & 0x80))
  585.                         {
  586.                          Code&=0x7f;
  587.                        switch(Code)
  588.                        {
  589.                          case Up   : wx+= 3.14/36; Update=TRUE; break;
  590.                          case Down : wx-= 3.14/36; Update=TRUE; break;
  591.                          case Right: wy+= 3.14/36; Update=TRUE; break;
  592.                          case Left : wy-= 3.14/36; Update=TRUE; break;
  593.                          case AUp   : wx+= 3.14/18; Update=TRUE; break;
  594.                          case ADown : wx-= 3.14/18; Update=TRUE; break;
  595.                          case ARight: wy+= 3.14/18; Update=TRUE; break;
  596.                          case ALeft : wy-= 3.14/18; Update=TRUE; break;
  597.                          case AAxUp   : wz+= 3.14/18; Update=TRUE; break;
  598.                          case AAxDown : wz-= 3.14/18; Update=TRUE; break;
  599.                          case Plus   : if( gz > 600)
  600.                                         { gz-= 50; Update=TRUE; }
  601.                                        break;
  602.                          case Minus  : gz+= 50; Update=TRUE; break;
  603.         
  604.                          case esc:   CloseAll();
  605.                        }
  606.                      }
  607.                      break;
  608.              };
  609.  
  610.              }
  611.                ReplyMsg((struct Message *)msg);
  612.  
  613.     }
  614.          if(Update==TRUE) LocalWorld(polydata,NPOLY,wx,wy,wz,gz);
  615.          Update=FALSE;
  616.         }
  617.  
  618.     CloseAll();
  619. }
  620.  
  621.  
  622. /***********************************************************************************\
  623. *                                                                                                                *
  624. *        CloseAll                                                                                                *
  625. *                                                                                                                *
  626. \***********************************************************************************/
  627.  
  628. void CloseAll()
  629. {
  630.         if(th)  V3D_DeleteTexHandle(th);
  631.         if(TexelMap) FreeVec(TexelMap);
  632.         if(v3d) V3D_CloseView(v3d);
  633.     if (IntuitionBase) CloseLibrary ((struct Library *)IntuitionBase);
  634.     if (GfxBase) CloseLibrary ((struct Library *)GfxBase);
  635.     if (CGX3DVirginBase) CloseLibrary ((struct Library *)CGX3DVirginBase);
  636.     if (CyberGfxBase) CloseLibrary ((struct Library *)CyberGfxBase);
  637.         if (LowLevelBase) CloseLibrary ((struct Library *)LowLevelBase);
  638.     exit(0);
  639. }
  640.  
  641.  
  642. void LocalWorld(Triangle3D in[],int cnt,float wx,float wy,float wz,int z)
  643. {
  644.         int        i;
  645.         float        cosx,sinx,cosy,siny,cosz,sinz;
  646.         Triangle3D    zws1,zws2,zws3;
  647.  
  648.     cosx = cos(wx);
  649.     sinx = sin(wx);
  650.  
  651.     cosy = cos(wy);
  652.     siny = sin(wy);
  653.  
  654.     cosz = cos(wz);
  655.     sinz = sin(wz);
  656.  
  657.         if(V3D_LockView(v3d))
  658.         {
  659.  
  660.          V3D_ClearBuffer(v3d,BufNum);
  661.  
  662. #ifdef DEMO1
  663.          V3D_ClearZBuffer(v3d);
  664. #endif
  665.  
  666.      for (i=0;i<cnt;i++)                /* Index of In  Poligons */
  667.      {
  668.         /* rotate in Y  */
  669.  
  670.         zws1.p1.x    =    cosy*in[i].p1.x-siny*in[i].p1.z;
  671.         zws1.p2.x    =    cosy*in[i].p2.x-siny*in[i].p2.z;
  672.         zws1.p3.x    =    cosy*in[i].p3.x-siny*in[i].p3.z;
  673.  
  674.         zws1.p1.y    =    in[i].p1.y;
  675.         zws1.p2.y    =    in[i].p2.y;
  676.         zws1.p3.y    =    in[i].p3.y;
  677.  
  678.         zws1.p1.z    =    siny*in[i].p1.x+cosy*in[i].p1.z;
  679.         zws1.p2.z    =    siny*in[i].p2.x+cosy*in[i].p2.z;
  680.         zws1.p3.z    =    siny*in[i].p3.x+cosy*in[i].p3.z;
  681.  
  682.  
  683.         /* rotate in X  */
  684.  
  685.         zws2.p1.x    =    zws1.p1.x;
  686.         zws2.p2.x    =    zws1.p2.x;
  687.         zws2.p3.x    =    zws1.p3.x;
  688.  
  689.         zws2.p1.y    =    cosx*zws1.p1.y+sinx*zws1.p1.z;
  690.         zws2.p2.y    =    cosx*zws1.p2.y+sinx*zws1.p2.z;
  691.         zws2.p3.y    =    cosx*zws1.p3.y+sinx*zws1.p3.z;
  692.  
  693.         zws2.p1.z    =    -sinx*zws1.p1.y+cosx*zws1.p1.z;
  694.         zws2.p2.z    =    -sinx*zws1.p2.y+cosx*zws1.p2.z;
  695.         zws2.p3.z    =    -sinx*zws1.p3.y+cosx*zws1.p3.z;
  696.  
  697.  
  698.         /* rotate in Z  */
  699.  
  700.         zws1.p1.x    =    cosz*zws2.p1.x+sinz*zws2.p1.y;
  701.         zws1.p2.x    =    cosz*zws2.p2.x+sinz*zws2.p2.y;
  702.         zws1.p3.x    =    cosz*zws2.p3.x+sinz*zws2.p3.y;
  703.  
  704.         zws1.p1.y    =    -sinz*zws2.p1.x+cosz*zws2.p1.y;
  705.         zws1.p2.y    =    -sinz*zws2.p2.x+cosz*zws2.p2.y;
  706.         zws1.p3.y    =    -sinz*zws2.p3.x+cosz*zws2.p3.y;
  707.  
  708.         zws1.p1.z    =    zws2.p1.z;
  709.         zws1.p2.z    =    zws2.p2.z;
  710.         zws1.p3.z    =    zws2.p3.z;
  711.  
  712.  
  713.         /* move */
  714.  
  715.         zws3.p1.z    =    zws1.p1.z + z ;
  716.         zws3.p2.z    =    zws1.p2.z + z ;
  717.         zws3.p3.z    =    zws1.p3.z + z ;
  718.  
  719.         zws3.p1.x    =    ((zws1.p1.x*FOCUS)/(zws3.p1.z*1.0)+.5) + WINX/2;
  720.         zws3.p2.x    =    ((zws1.p2.x*FOCUS)/(zws3.p2.z*1.0)+.5) + WINX/2;
  721.         zws3.p3.x    =    ((zws1.p3.x*FOCUS)/(zws3.p3.z*1.0)+.5) + WINX/2;
  722.  
  723.         zws3.p1.y    =    ((zws1.p1.y*FOCUS)/(zws3.p1.z*1.0)+.5) + WINY/2;
  724.         zws3.p2.y    =    ((zws1.p2.y*FOCUS)/(zws3.p2.z*1.0)+.5) + WINY/2;
  725.         zws3.p3.y    =    ((zws1.p3.y*FOCUS)/(zws3.p3.z*1.0)+.5) + WINY/2;
  726.  
  727.  
  728.         zws3.p1.u    =    ((in[i].p1.u*1.0)+.5);
  729.         zws3.p2.u    =    ((in[i].p2.u*1.0)+.5);
  730.         zws3.p3.u    =    ((in[i].p3.u*1.0)+.5);
  731.  
  732.         zws3.p1.v    =    ((in[i].p1.v*1.0)+.5);
  733.         zws3.p2.v    =    ((in[i].p2.v*1.0)+.5);
  734.         zws3.p3.v    =    ((in[i].p3.v*1.0)+.5);
  735.  
  736.                 zws3.p1.color = in[i].p1.color;
  737.                 zws3.p2.color = in[i].p2.color;
  738.                 zws3.p3.color = in[i].p3.color;
  739.  
  740. #ifndef DEMO1
  741.         //       only draw visible triangle (area normal to viewer)
  742.         if (  ( (zws3.p2.x-zws3.p1.x) * (zws3.p3.y-zws3.p2.y) -
  743.             (zws3.p3.x-zws3.p2.x) * (zws3.p2.y-zws3.p1.y)
  744.                       ) <0)
  745. #endif
  746.         {
  747.                  zws3.th = th;
  748.  
  749.                  V3D_DrawTriangle3D(v3d,
  750.                                     &zws3,
  751. #ifndef DEMO3
  752.                                     BLENDMD_DECAL
  753. #else
  754.                                     BLENDMD_MODULATE
  755. #endif
  756.                                    );
  757.  
  758.          }
  759.      }
  760.  
  761.          V3D_UnLockView(v3d);
  762.         }
  763.         BufNum++;
  764.         BufNum&=1;
  765.  
  766.         V3D_FlipBuffer(v3d,BufNum);
  767. }
  768.  
  769.  
  770.