home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Programming / MiniGL / src / glu.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-04-11  |  2.4 KB  |  84 lines

  1. /*
  2.  * $Id: glu.c,v 1.1.1.1 2000/04/07 19:44:51 tfrieden Exp $
  3.  *
  4.  * $Date: 2000/04/07 19:44:51 $
  5.  * $Revision: 1.1.1.1 $
  6.  *
  7.  * (C) 1999 by Hyperion
  8.  * All rights reserved
  9.  *
  10.  * This file is part of the MiniGL library project
  11.  * See the file Licence.txt for more details
  12.  *
  13.  */
  14.  
  15. #include <mgl/gl.h>
  16. #include <math.h>
  17. #include <stdio.h>
  18.  
  19. #define VEC_NORM(v)                                      \
  20. {                                                        \
  21.     GLfloat m = sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]); \
  22.     v[0] /= m;                                           \
  23.     v[1] /= m;                                           \
  24.     v[2] /= m;                                           \
  25. }
  26.  
  27. #define VEC_CROSS(v, a, b)                               \
  28.     v[0] = a[1] * b[2] - a[2] * b[1];                    \
  29.     v[1] = a[2] * b[0] - a[0] * b[2];                    \
  30.     v[2] = a[0] * b[1] - a[1] * b[0];
  31.  
  32. #define VEC_SUB(v, a, b)                                 \
  33.     v[0] = a[0] - b[0];                                  \
  34.     v[1] = a[1] - b[1];                                  \
  35.     v[2] = a[2] - b[2];
  36.  
  37. #define VEC_ADD(v, a, b)                                 \
  38.     v[0] = a[0] + b[0];                                  \
  39.     v[1] = a[1] + b[1];                                  \
  40.     v[2] = a[2] + b[2];
  41.  
  42. #define VEC_PRINT(v)                                     \
  43.     printf("<%f, %f, %f>\n", v[0], v[1], v[2]);
  44.  
  45. static char rcsid[] = "$Id: glu.c,v 1.1.1.1 2000/04/07 19:44:51 tfrieden Exp $ ";
  46.  
  47.  
  48. void GLULookAt(GLfloat ex, GLfloat ey, GLfloat ez, GLfloat cx, GLfloat cy, GLfloat cz, GLfloat ux, GLfloat uy, GLfloat uz)
  49. {
  50.     GLfloat u[3], v[3], w[3];
  51.     GLfloat m[16];
  52.  
  53.     w[0] = ex - cx;     w[1] = ey - cy;     w[2] = ez - cz;
  54.     v[0] = ux;          v[1] = uy;          v[2] = uz;
  55.  
  56.     VEC_NORM(w);
  57.     VEC_CROSS(u, v, w);
  58.     VEC_CROSS(v, w, u);
  59.     VEC_NORM(u);
  60.     VEC_NORM(v);
  61.  
  62.     m[ 0] = u[0];   m[ 1] = v[0];   m[ 2] = w[0];   m[ 3] = 0.0;
  63.     m[ 4] = u[1];   m[ 5] = v[1];   m[ 6] = w[1];   m[ 7] = 0.0;
  64.     m[ 8] = u[2];   m[ 9] = v[2];   m[10] = w[2];   m[11] = 0.0;
  65.     m[12] = 0.0;    m[13] = 0.0;    m[14] = 0.0;    m[15] = 1.0;
  66.  
  67.     glMultMatrixf(m);
  68.     glTranslatef(-ex, -ey, -ez);
  69. }
  70.  
  71. void GLUPerspective(GLfloat fovy, GLfloat aspect, GLfloat znear, GLfloat zfar)
  72. {
  73.    GLfloat xmin, xmax, ymin, ymax;
  74.  
  75.    ymax = znear * tan(fovy * 0.008726646);
  76.    ymin = -ymax;
  77.    xmin = ymin * aspect;
  78.    xmax = ymax * aspect;
  79.  
  80.    glFrustum(xmin, xmax, ymin, ymax, znear, zfar);
  81. }
  82.  
  83.  
  84.