home *** CD-ROM | disk | FTP | other *** search
/ gondwana.ecr.mu.oz.au/pub/ / Graphics.tar / Graphics / fermiVogle.tar.Z / fermiVogle.tar / devel / src / scale.c < prev    next >
C/C++ Source or Header  |  1996-02-07  |  875b  |  49 lines

  1. #include "vogle.h"
  2.  
  3. /*
  4.  * scale
  5.  * 
  6.  * Set up a scale matrix and premultiply it and 
  7.  * the top matrix on the stack.
  8.  *
  9.  */
  10. void
  11. scale(float x, float y, float z)
  12. {
  13.     Token    *tok;
  14.  
  15.     if (!vdevice.initialised)
  16.         verror("scale: vogle not initialised");
  17.  
  18.     if (vdevice.inobject) {
  19.         tok = newtokens(4);
  20.  
  21.         tok[0].i = SCALE;
  22.         tok[1].f = x;
  23.         tok[2].f = y;
  24.         tok[3].f = z;
  25.  
  26.         return;
  27.     }
  28.  
  29.     /*
  30.      * Do the operations directly on the top matrix of
  31.      * the stack to speed things up.
  32.      */
  33.  
  34.     vdevice.transmat->m[0][0] *= x;
  35.     vdevice.transmat->m[0][1] *= x;
  36.     vdevice.transmat->m[0][2] *= x;
  37.     vdevice.transmat->m[0][3] *= x;
  38.  
  39.     vdevice.transmat->m[1][0] *= y;
  40.     vdevice.transmat->m[1][1] *= y;
  41.     vdevice.transmat->m[1][2] *= y;
  42.     vdevice.transmat->m[1][3] *= y;
  43.  
  44.     vdevice.transmat->m[2][0] *= z;
  45.     vdevice.transmat->m[2][1] *= z;
  46.     vdevice.transmat->m[2][2] *= z;
  47.     vdevice.transmat->m[2][3] *= z;
  48. }
  49.