home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 113 / EnigmaAmiga113CD.iso / software / sviluppo / glquake_src / gl_test.c < prev    next >
Encoding:
C/C++ Source or Header  |  1999-12-28  |  3.4 KB  |  183 lines

  1. /*
  2. Copyright (C) 1996-1997 Id Software, Inc.
  3.  
  4. This program is free software; you can redistribute it and/or
  5. modify it under the terms of the GNU General Public License
  6. as published by the Free Software Foundation; either version 2
  7. of the License, or (at your option) any later version.
  8.  
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
  12.  
  13. See the GNU General Public License for more details.
  14.  
  15. You should have received a copy of the GNU General Public License
  16. along with this program; if not, write to the Free Software
  17. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  18.  
  19. */
  20.  
  21. #include "quakedef.h"
  22.  
  23. #ifdef GLTEST
  24.  
  25. typedef struct
  26. {
  27.   plane_t *plane;
  28.   vec3_t  origin;
  29.   vec3_t  normal;
  30.   vec3_t  up;
  31.   vec3_t  right;
  32.   vec3_t  reflect;
  33.   float length;
  34. } puff_t;
  35.  
  36. #define MAX_PUFFS 64
  37.  
  38. puff_t  puffs[MAX_PUFFS];
  39.  
  40.  
  41. void Test_Init (void)
  42. {
  43. }
  44.  
  45.  
  46.  
  47. plane_t junk;
  48. plane_t *HitPlane (vec3_t start, vec3_t end)
  49. {
  50.   trace_t   trace;
  51.  
  52. // fill in a default trace
  53.   memset (&trace, 0, sizeof(trace_t));
  54.   trace.fraction = 1;
  55.   trace.allsolid = true;
  56.   VectorCopy (end, trace.endpos);
  57.  
  58.   SV_RecursiveHullCheck (cl.worldmodel->hulls, 0, 0, 1, start, end, &trace);
  59.  
  60.   junk = trace.plane;
  61.   return &junk;
  62. }
  63.  
  64. void Test_Spawn (vec3_t origin)
  65. {
  66.   int   i;
  67.   puff_t  *p;
  68.   vec3_t  temp;
  69.   vec3_t  normal;
  70.   vec3_t  incoming;
  71.   plane_t *plane;
  72.   float d;
  73.  
  74.   for (i=0,p=puffs ; i<MAX_PUFFS ; i++,p++)
  75.   {
  76.     if (p->length <= 0)
  77.       break;
  78.   }
  79.   if (i == MAX_PUFFS)
  80.     return;
  81.  
  82.   VectorSubtract (r_refdef.vieworg, origin, incoming);
  83.   VectorSubtract (origin, incoming, temp);
  84.   plane = HitPlane (r_refdef.vieworg, temp);
  85.  
  86.   VectorNormalize (incoming);
  87.   d = DotProduct (incoming, plane->normal);
  88.   VectorSubtract (vec3_origin, incoming, p->reflect);
  89.   VectorMA (p->reflect, d*2, plane->normal, p->reflect);
  90.  
  91.   VectorCopy (origin, p->origin);
  92.   VectorCopy (plane->normal, p->normal);
  93.  
  94.   CrossProduct (incoming, p->normal, p->up);
  95.  
  96.   CrossProduct (p->up, p->normal, p->right);
  97.  
  98.   p->length = 8;
  99. }
  100.  
  101. void DrawPuff (puff_t *p)
  102. {
  103.   vec3_t  pts[2][3];
  104.   int   i, j;
  105.   float s, d;
  106.  
  107.   for (i=0 ; i<2 ; i++)
  108.   {
  109.     if (i == 1)
  110.     {
  111.       s = 6;
  112.       d = p->length;
  113.     }
  114.     else
  115.     {
  116.       s = 2;
  117.       d = 0;
  118.     }
  119.  
  120.     for (j=0 ; j<3 ; j++)
  121.     {
  122.       pts[i][0][j] = p->origin[j] + p->up[j]*s + p->reflect[j]*d;
  123.       pts[i][1][j] = p->origin[j] + p->right[j]*s + p->reflect[j]*d;
  124.       pts[i][2][j] = p->origin[j] + -p->right[j]*s + p->reflect[j]*d;
  125.     }
  126.   }
  127.  
  128.   glColor3f (1, 0, 0);
  129.  
  130. #if 0
  131.   glBegin (GL_LINES);
  132.   glVertex3fv (p->origin);
  133.   glVertex3f (p->origin[0] + p->length*p->reflect[0],
  134.     p->origin[1] + p->length*p->reflect[1],
  135.     p->origin[2] + p->length*p->reflect[2]);
  136.  
  137.   glVertex3fv (pts[0][0]);
  138.   glVertex3fv (pts[1][0]);
  139.  
  140.   glVertex3fv (pts[0][1]);
  141.   glVertex3fv (pts[1][1]);
  142.  
  143.   glVertex3fv (pts[0][2]);
  144.   glVertex3fv (pts[1][2]);
  145.  
  146.   glEnd ();
  147. #endif
  148.  
  149.   glBegin (GL_QUADS);
  150.   for (i=0 ; i<3 ; i++)
  151.   {
  152.     j = (i+1)%3;
  153.     glVertex3fv (pts[0][j]);
  154.     glVertex3fv (pts[1][j]);
  155.     glVertex3fv (pts[1][i]);
  156.     glVertex3fv (pts[0][i]);
  157.   }
  158.   glEnd ();
  159.  
  160.   glBegin (GL_TRIANGLES);
  161.   glVertex3fv (pts[1][0]);
  162.   glVertex3fv (pts[1][1]);
  163.   glVertex3fv (pts[1][2]);
  164.   glEnd ();
  165.  
  166.   p->length -= host_frametime*2;
  167. }
  168.  
  169.  
  170. void Test_Draw (void)
  171. {
  172.   int   i;
  173.   puff_t  *p;
  174.  
  175.   for (i=0, p=puffs ; i<MAX_PUFFS ; i++,p++)
  176.   {
  177.     if (p->length > 0)
  178.       DrawPuff (p);
  179.   }
  180. }
  181.  
  182. #endif
  183.