Transform.h
上传用户:lin85885
上传日期:2013-04-27
资源大小:796k
文件大小:3k
源码类别:

3D图形编程

开发平台:

Visual C++

  1. #if !defined (TRANSFORM_H)
  2. #define  TRANSFORM_H
  3. struct VECTOR
  4. {
  5.   float x, y, z;
  6. };
  7. struct TrackballStruct
  8. {
  9. float  centerX, centerY;   // sphere center
  10. float  radius ;            // sphere radius   
  11. float  pointX1, pointY1;   // the first  mouse  position
  12. float  pointX2, pointY2;   // the second mouse  position
  13. float  pointX3, pointY3;   // release mouse     position
  14. };
  15. struct EYE
  16. {
  17.   VECTOR origin;  // eye point
  18.   VECTOR center;  // refrence point
  19.   VECTOR up;      // up vector
  20.   VECTOR axisX;   // X-Axis vector of the eye coordinate
  21.   VECTOR axisY;   // Y-Axis vector of the eye coordinate
  22.   VECTOR axisZ;   // Z-Axis vector of the eye coordinate
  23. };
  24. //---------------- vector & matrix operation -----------------------
  25. // V = ( x, y, z )  or  V = A 
  26. void VectorCopy(VECTOR & V, float x, float y, float z);
  27. void VectorCopy(VECTOR & V, VECTOR A);
  28. // V = A + B
  29. void VectorAdd(VECTOR & V, VECTOR A, VECTOR B);
  30. // V = A - B
  31. void VectorSub(VECTOR & V, VECTOR A, VECTOR B);
  32. // V = s * V
  33. void VectorScale(VECTOR & V, float s);
  34. // V = A x B
  35. void VectorCross(VECTOR & V, VECTOR A, VECTOR B);
  36. // dot = A . B
  37. void VectorDot(float & dot, VECTOR A, VECTOR B);
  38. // len = |V|
  39. void VectorLength(float & len, VECTOR V);
  40. // V = V/(|V|)
  41. void VectorNormalize(VECTOR & V);
  42. // M = M1*M2
  43. void MultMatrixf( float *M,  float *M1, float *M2,
  44.  int m1Row, int m1Col, int m2Row, int m2Col);
  45. // transpose matrix
  46. void TransMatrix( float *M, int row, int col);
  47. // "inverse" of matrix M
  48. int  InvMatrixf(float *M, int n);
  49. //---------------- world coordinate -------------------------------------
  50. // transform point P(x,y,z) from object coordinate to world coordinate
  51. void ObjectToWorld(float point[3], float result[3]);
  52. // transform point P(x,y,z) from world coordinate to object coordinate
  53. void WorldToObject(float point[3], float result[3]);
  54. // translate in world coordinate, d[3]=(dx, dy, dz)
  55. void WorldTranslate(float d[3]); 
  56. // rotate in world coordinate
  57. void WorldRotate(float point[3], float normal[3], float angle);
  58. //----------------- eye coordinate -------------------------------------- 
  59. // eye is in the world coordinate
  60. // calculate eye axes vectors
  61. void SetEyeStruct(float eyeX,    float eyeY,    float eyeZ, 
  62.  float centerX, float centerY, float centerZ, 
  63.  float upX,     float upY,     float upZ,
  64.  EYE  & eye);
  65. // transform point P(x,y,z) from world coordinate to eye coordinate
  66. void WorldToEye(float point[3], float result[3], EYE eye);
  67. // transform point P(x,y,z) from eye coordinate to world coordinate
  68. void EyeToWorld(float point[3], float result[3], EYE eye);
  69. // translate in eye coordinate, d[3]=(dx, dy, dz)
  70. void EyeTranslate(float d[3], EYE eye);
  71. // rotate in eye coordinate
  72. void EyeRotate(float point[3], float normal[3], float angle, 
  73.   EYE eye);
  74. //TrackBall Algorithm
  75. void Trackball(int   event,   float radius ,
  76.   float centerX, float centerY, float mouseX, float mouseY,
  77.   float &axisX , float &axisY , float &axisZ, float &angle );
  78. #endif