home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / libs / sphigs / sph_dos.lha / dos / sphdemo / view.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-11-26  |  5.2 KB  |  256 lines

  1. #include "SPHDEMO.h"
  2. #include "view.h"
  3.  
  4.  
  5.  
  6.    /* WARNING: must be reset to zero whenever camera restored to default */
  7.    int totalpitch, totalyaw;   /* in degrees */
  8.  
  9.    matrix temp;
  10.  
  11.    /* DEFAULT VALUES */
  12.    point vrpdef={35.0,60.0,30.0}, prpdef={0.0,0.0,80.0};
  13.    vector vpndef={0.0,0.0,1.0}, vupvdef={0.0,1.0,0.0};
  14.    double umindef=-50.0, umaxdef=50.0, vmindef=-50.0, vmaxdef=50.0;
  15.    double fplanedef=-30.0, bplanedef=-160.0;
  16.    short persptypedef=PERSPECTIVE;
  17.  
  18.    /* CURRENT PERSPECTIVE VIEW */
  19.    point vrp1, prp1;
  20.    double umin1, umax1, vmin1, vmax1;
  21.    double fplane1, bplane1;
  22.    vector vpn1, vupv1;
  23.    double viewportxmin, viewportxmax, viewportymin, viewportymax;
  24.    short persptype1;
  25.  
  26.    /* CURRENT INVERSE OF ViewOrientation MATRIX FOR RENDERED VIEW */
  27.    matrix inverseVO;
  28.  
  29.  
  30. void FullScreenRenderView ()
  31. {
  32.    viewportxmin = viewportymin = (double)0;
  33.    viewportxmax = viewportymax = (double)1;
  34. }
  35.  
  36. void PartialScreenRenderView ()
  37. {
  38.    viewportxmin = viewportymin = (double)0;
  39.    viewportxmax = viewportymax = 0.7;
  40. }
  41.  
  42.  
  43.  
  44. void ShowUsingNewView1 (void)
  45. {
  46.    matrix vo_matrix, vm_matrix;
  47.    
  48.    SPH_evaluateViewOrientationMatrix 
  49.       (vrp1,
  50.        vpn1,
  51.        vupv1,
  52.        vo_matrix);
  53.  
  54.    MAT3invert (inverseVO, vo_matrix);
  55.  
  56.    SPH_evaluateViewMappingMatrix
  57.       (umin1, umax1,   vmin1, vmax1, persptype1,
  58.        prp1,
  59.        fplane1, bplane1,
  60.        viewportxmin,viewportxmax, viewportymin,viewportymax, 0.0,1.0,
  61.        vm_matrix);
  62.  
  63.    SPH_setViewRepresentation
  64.       (PERSPECTIVE_VIEW,
  65.        vo_matrix, vm_matrix,
  66.        viewportxmin,viewportxmax, viewportymin,viewportymax, 0.0,1.0);
  67.        
  68.    CreateCameraStructure ();
  69. }
  70.  
  71.  
  72. void InitTextView (void)
  73. {  
  74.    /* KIDS: Don't try this at home! */
  75.    SPH_setViewRepresentation
  76.       (TEXT_VIEW,
  77.        SPH_viewTable[TEXT_VIEW].vo_matrix, SPH_viewTable[TEXT_VIEW].vm_matrix,
  78.        0.0,0.8,  0.75,1.0, 0.0,1.0);
  79. }
  80.  
  81.  
  82.  
  83. void InitSideOrthoView (void)
  84. {
  85.    matrix vo_matrix, vm_matrix;
  86.    vector vpnvec = {1.0,0.0,0.0};
  87.    vector vrpvec = {100.0,0.0,-50.0};
  88.  
  89.    SPH_evaluateViewOrientationMatrix 
  90.       (vrpvec,
  91.        vpnvec,
  92.        vupvdef,
  93.        vo_matrix);
  94.  
  95. #define RADIUS 165.0
  96.    SPH_evaluateViewMappingMatrix
  97.       (-RADIUS,RADIUS, -RADIUS,RADIUS,  ORTHOGRAPHIC,
  98.        prpdef,
  99.        fplanedef, bplanedef,
  100.        0.8,1.28,  0.0,0.48, 0.0,1.0,
  101.        vm_matrix);
  102. #undef RADIUS
  103.  
  104.    SPH_setViewRepresentation
  105.       (SIDE_ORTHO_VIEW,
  106.        vo_matrix, vm_matrix,
  107.        0.8,1.28,  0.0,0.48, 0.0,1.0);
  108. }
  109.  
  110.  
  111.  
  112. void InitTopOrthoView (void)
  113. {
  114.    matrix vo_matrix, vm_matrix;
  115.    vector vpnvec = {0.0,1.0,0.0};
  116.    vector vupvec = {0.0,0.0,-1.0};
  117.    vector vrpvec = {50.0,100.0,-50.0};
  118.  
  119.    SPH_evaluateViewOrientationMatrix 
  120.       (vrpvec,
  121.        vpnvec,
  122.        vupvec,
  123.        vo_matrix);
  124.  
  125. #define RADIUS 165.0
  126.    SPH_evaluateViewMappingMatrix
  127.       (-RADIUS,RADIUS, -RADIUS,RADIUS,  ORTHOGRAPHIC,
  128.        prpdef,
  129.        fplanedef, bplanedef,
  130.        0.8,1.28,  0.50,1.0, 0.0,1.0,
  131.        vm_matrix);
  132. #undef RADIUS
  133.  
  134.    SPH_setViewRepresentation
  135.       (TOP_ORTHO_VIEW,
  136.        vo_matrix, vm_matrix,
  137.        0.8,1.28,  0.50,1.0, 0.0,1.0);
  138. }
  139.  
  140.  
  141.  
  142. void RestoreCameraToDefault (void)
  143. {
  144.    /* COPY DEFAULTS INTO VIEW 1's DATA */
  145.    MAT3_COPY_VEC (vrp1, vrpdef);
  146.    MAT3_COPY_VEC (vpn1, vpndef);
  147.    MAT3_COPY_VEC (vupv1, vupvdef);
  148.    MAT3_COPY_VEC (prp1, prpdef);
  149.    fplane1 = fplanedef;
  150.    bplane1 = bplanedef;
  151.    umin1 = umindef;
  152.    vmin1 = vmindef;
  153.    umax1 = umaxdef;
  154.    vmax1 = vmaxdef;
  155.    persptype1 = persptypedef;
  156.  
  157.    totalpitch = totalyaw = 0;
  158. }
  159.  
  160.  
  161.  
  162. void InitAllViews()
  163. {
  164.    RestoreCameraToDefault();
  165.    InitSideOrthoView();
  166.    InitTopOrthoView();
  167.    InitTextView();
  168.  
  169.    SPH_setViewBackgroundColor (PERSPECTIVE_VIEW, grey);
  170.    SPH_setViewBackgroundColor (SIDE_ORTHO_VIEW, grey);
  171.    SPH_setViewBackgroundColor (TOP_ORTHO_VIEW, grey);
  172.    
  173.    SPH_setRenderingMode (PERSPECTIVE_VIEW, LIT_FLAT); 
  174.    SPH_setRenderingMode (SIDE_ORTHO_VIEW, WIREFRAME_RAW); 
  175.    SPH_setRenderingMode (TOP_ORTHO_VIEW, WIREFRAME_RAW);
  176.    SPH_setRenderingMode (TEXT_VIEW, WIREFRAME_RAW);
  177.  
  178.    SPH_setViewPointLightSource (PERSPECTIVE_VIEW,   0.0, 195000.0, 195000.0);
  179. }
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186. void ChangeVRP_relativeUVN (double delta, int whichaxis)
  187. {
  188.    vector deltavecUVN={0.0,0.0,0.0};
  189.    
  190.    deltavecUVN[whichaxis] = delta;
  191.    MAT3mult_vec (vrp1, deltavecUVN, inverseVO);
  192. }
  193.  
  194. void ChangeVRP_relativeWC (double delta, int whichaxis)
  195. {
  196.    vrp1[whichaxis] += delta;
  197. }
  198.  
  199. void ChangeFrontClipPlane (double delta)
  200. {
  201.      fplane1 += delta; 
  202.      if (fplane1 >= prp1[Z])
  203.         fplane1 = prp1[Z]-1.0;
  204.      if (fplane1 <= bplane1)
  205.         fplane1 = bplane1+1.0;
  206. }
  207.  
  208. void ChangeBackClipPlane (double delta)
  209. {
  210.      bplane1 += delta; 
  211.      if (bplane1 >= fplane1)
  212.         bplane1 = fplane1-1.0;
  213. }
  214.  
  215.  
  216.  
  217. void ChangeVPN (double pitch, double yaw)
  218. {
  219.    double alpha, beta;
  220.    
  221.    totalpitch+=pitch;
  222.    if (totalpitch > 89)
  223.       totalpitch = 89;
  224.    else if (totalpitch < -89)
  225.       totalpitch = -89;
  226.    totalyaw = (totalyaw+=yaw)%360;
  227.    alpha = totalyaw*PI/180.0;
  228.    beta = totalpitch*PI/180.0;
  229.    MAT3_SET_VEC (vpn1, 
  230.                sin(alpha)*cos(beta),
  231.                sin(beta)*cos(alpha),
  232.                cos(alpha) );
  233. }
  234.  
  235.  
  236. void ChangePRP (double delta)
  237. {
  238.      prp1[2] += delta;
  239.      if (prp1[2] <= 0.0) {
  240.         prp1[2] = 0.1;
  241.      }
  242. }
  243.  
  244. void ChangePRPforOrtho (void)
  245. {
  246.    persptype1 = ORTHOGRAPHIC;
  247.    prp1[Z] = HUGE_VAL;
  248. }
  249.  
  250. void ChangePRPforClosestPerspective (void)
  251. {
  252.    persptype1 = PERSPECTIVE;
  253.    prp1[Z] = (double)10;
  254. }
  255.  
  256.