home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 1995 January / pcw-0195.iso / polyray / dat / animate / flying / fig8.inc < prev    next >
Encoding:
Text File  |  1994-12-31  |  1.6 KB  |  54 lines

  1. define start_times [0, total_frames/4, total_frames/2, 3*total_frames/4]
  2. define end_times [total_frames/4, total_frames/2,
  3.           3*total_frames/4, total_frames]
  4. define segment floor(4 * frame / total_frames)
  5.  
  6. define t0 start_times[segment]
  7. define t1 end_times[segment]
  8. //
  9. // Figure out how far along we are in the animation
  10. //
  11. define increment (frame - t0) / (t1 - t0)
  12. //
  13. // Define some values for the movement
  14. //
  15. define start_positions [<-10, 5, 0>, <0, 5, 0>, <10, 5, 0>, <0, 5, 0>]
  16. define end_positions [<0, 5, 0>, <10, 5, 0>, <0, 5, 0>, <-10, 5, 0>]
  17.  
  18. define start_velocities [<0, 0, 10>, <20, 0, -20>, <0, 0, 10>, <-20, 0, -20>]
  19. define end_velocities [<20, 0, -20>, <0, 0, 10>, <-20, 0, -20>, <0, 0, 10>]
  20.  
  21. define start_banks [-80, 0, 80, 0]
  22. define end_banks [0, 80, 0, -80]
  23.  
  24. define pos0 start_positions[segment]
  25. define pos1 end_positions[segment]
  26. define vel0 start_velocities[segment]
  27. define vel1 end_velocities[segment]
  28. define bank0 start_banks[segment]
  29. define bank1 end_banks[segment]
  30. //
  31. // Calculate the various coefficients of the spline path
  32. //
  33. define u  increment
  34. define u2 (u * u)
  35. define u3 (u2 * u)
  36. define a0 (2 * u3 - 3 * u2 + 1)
  37. define a1 (-2 * u3 + 3 * u2)
  38. define a2 (u3 - 2 * u2 + u)
  39. define a3 (u3 - u2)
  40. //
  41. // Finally the position is calculated from the coefficients:
  42. //
  43. define pos (a0 * pos0 + a1 * pos1 + a2 * vel0 + a3 * vel1)
  44. //
  45. // Now move the object
  46. //
  47. define increment_vel (a0 * vel0 + a1 * vel1)
  48. define norm_vel increment_vel / fabs(increment_vel)
  49. define half_angle (norm_vel + <1, 0, 0>) / 2
  50. if (|half_angle| < 0.001)
  51.    define half_angle <0, 0, 1>
  52.  
  53. define bank_angle (a0 * bank0 + a1 * bank1)
  54.