home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 February / Chip_2001-02_cd1.bin / bonus / demos / CS / exp / SOURCES / DEMO / turtle.cpp < prev    next >
C/C++ Source or Header  |  2000-08-05  |  2KB  |  129 lines

  1. #include <cstdlib>
  2. #include "api3ds.h"
  3. #include "turtle.h"
  4.  
  5. TURTLE::~TURTLE() {}
  6.  
  7. TURTLE::TURTLE()
  8. {
  9.   U.x= 0.0;U.y=-1.0;U.z= 0.0;
  10.   V.x=-1.0;V.y= 0.0;V.z= 0.0;
  11.   N.x= 0.0;N.y= 0.0;N.z= -1.0;
  12.  
  13.   POS.x=0.0;
  14.   POS.y=0.0;
  15.   POS.z=0.0;
  16. }
  17.  
  18. void TURTLE::SetPos(float x,float y,float z)
  19. {
  20.   POS.x=x;
  21.   POS.y=y;
  22.   POS.z=z;
  23. }
  24.  
  25. void TURTLE::SetVectors(Vector3f x,Vector3f y,Vector3f z)
  26. {
  27.   U=x;V=y;N=z;
  28. }
  29.  
  30. void TURTLE::SaveVectors(void)
  31. {
  32.   X=U;Y=V;Z=N;
  33. }
  34.  
  35. void TURTLE::RestoreVectors(void)
  36. {
  37.   U=X;V=Y;N=Z;
  38. }
  39.  
  40.  
  41. void TURTLE::Move(float s)
  42. {
  43.   POS.x+=s*U.x;
  44.   POS.y+=s*U.y;
  45.   POS.z+=s*U.z;
  46. }
  47.  
  48. void TURTLE::Fly(float s)
  49. {
  50.   POS.x+=s*V.x;
  51.   POS.y+=s*V.y;
  52.   POS.z+=s*V.z;
  53. }
  54.  
  55. void TURTLE::Strafe(float s)
  56. {
  57.   POS.x+=s*N.x;
  58.   POS.y+=s*N.y;
  59.   POS.z+=s*N.z;
  60. }
  61.  
  62.  
  63.  
  64. void TURTLE::RotateVector(Vector3f& U,float Nroll,float Vroll,float Uroll)
  65. {
  66.             float sp = sin(Nroll);
  67.             float cp = cos(Nroll);
  68.  
  69.             float sf = sin(Vroll);
  70.             float cf = cos(Vroll);
  71.  
  72.             float sg = sin(Uroll);
  73.             float cg = cos(Uroll);
  74.  
  75.             float x,y,z;
  76.  
  77.             x=U.x;
  78.             y=U.y;
  79.             z=U.z;
  80.             U.x=x;
  81.             U.y=cp*y+sp*z;
  82.             U.z=-sp*y+cp*z;
  83.  
  84.             x=U.x;
  85.             y=U.y;
  86.             z=U.z;
  87.             U.x=cf*x-sf*z;
  88.             U.y=y;
  89.             U.z=sf*x+cf*z;
  90.  
  91.             x=U.x;
  92.             y=U.y;
  93.             z=U.z;
  94.             U.x=cg*x+sg*y;
  95.             U.y=-sg*x+cg*y;
  96.             U.z=z;
  97. }
  98.  
  99. void TURTLE::ChangeBase(Vector3f& U,Vector3f& I,Vector3f& J,Vector3f& K)
  100. {
  101.             float x=U.x;
  102.             float y=U.y;
  103.             float z=U.z;
  104.  
  105.             U.x= x*I.x+ y*J.x+ z*K.x;
  106.             U.y= x*I.y+ y*J.y+ z*K.y;
  107.             U.z= x*I.z+ y*J.z+ z*K.z;
  108. }
  109.  
  110. void TURTLE::Rotate(float a, float b, float c)
  111. {
  112.  
  113.   Vector3f I=U;
  114.   Vector3f J=V;
  115.   Vector3f K=N;
  116.  
  117.   U.x=1;U.y=0;U.z=0;
  118.   V.x=0;V.y=1;V.z=0;
  119.   N.x=0;N.y=0;N.z=1;
  120.  
  121.  
  122.   RotateVector(U,a,b,c);
  123.   RotateVector(V,a,b,c);
  124.   RotateVector(N,a,b,c);
  125.  
  126.   ChangeBase(U,I,J,K);
  127.   ChangeBase(V,I,J,K);
  128.   ChangeBase(N,I,J,K);
  129. }