home *** CD-ROM | disk | FTP | other *** search
/ Apple Developer Connection 1998 Fall: Game Toolkit / Disc.iso / SDKs / QuickTime Mac / PInterfaces / QD3DMath.p < prev    next >
Encoding:
Text File  |  1998-04-09  |  23.4 KB  |  349 lines  |  [TEXT/MPS ]

  1. {
  2.      File:        QD3DMath.p
  3.  
  4.      Contains:    Math & matrix routines and definitions.                            
  5.  
  6.      Version:    Technology:    Quickdraw 3D 1.5.4
  7.                  Release:    QuickTime 3.0
  8.  
  9.      Copyright:    © 1995-1998 by Apple Computer, Inc., all rights reserved.
  10.  
  11.      Bugs?:        Please include the the file and version information (from above) with
  12.                  the problem description.  Developers belonging to one of the Apple
  13.                  developer programs can submit bug reports to:
  14.  
  15.                      devsupport@apple.com
  16.  
  17. }
  18. {$IFC UNDEFINED UsingIncludes}
  19. {$SETC UsingIncludes := 0}
  20. {$ENDC}
  21.  
  22. {$IFC NOT UsingIncludes}
  23.  UNIT QD3DMath;
  24.  INTERFACE
  25. {$ENDC}
  26.  
  27. {$IFC UNDEFINED __QD3DMATH__}
  28. {$SETC __QD3DMATH__ := 1}
  29.  
  30. {$I+}
  31. {$SETC QD3DMathIncludes := UsingIncludes}
  32. {$SETC UsingIncludes := 1}
  33.  
  34. {$IFC UNDEFINED __QD3D__}
  35. {$I QD3D.p}
  36. {$ENDC}
  37.  
  38.  
  39. {$PUSH}
  40. {$ALIGN POWER}
  41. {$LibExport+}
  42.  
  43. {*****************************************************************************
  44.  **                                                                             **
  45.  **                            Constant Definitions                             **
  46.  **                                                                             **
  47.  ****************************************************************************}
  48. {
  49.  *  Real zero definition
  50.  }
  51. CONST
  52.     kQ3RealZero         = 1.19209290e-07;
  53.     kQ3MaxFloat         = 3.40282347e+38;
  54. {
  55.  *  Values of PI
  56.  }
  57.     kQ3Pi                 = 3.1415926535898;
  58.     kQ32Pi                 = 2.0 * 3.1415926535898;
  59.     kQ3PiOver2            = 3.1415926535898 / 2.0;
  60.     kQ33PiOver2         = 3.0 * 3.1415926535898 / 2.0;
  61.  
  62.  
  63. {*****************************************************************************
  64.  **                                                                             **
  65.  **                            Miscellaneous Functions                             **
  66.  **                                                                             **
  67.  ****************************************************************************}
  68.  
  69. {*****************************************************************************
  70.  **                                                                             **
  71.  **                            Point and Vector Creation                         **
  72.  **                                                                             **
  73.  ****************************************************************************}
  74. FUNCTION Q3Point2D_Set(VAR point2D: TQ3Point2D; x: Single; y: Single): TQ3Point2DPtr; C;
  75. FUNCTION Q3Param2D_Set(VAR param2D: TQ3Param2D; u: Single; v: Single): TQ3Param2DPtr; C;
  76. FUNCTION Q3Point3D_Set(VAR point3D: TQ3Point3D; x: Single; y: Single; z: Single): TQ3Point3DPtr; C;
  77. FUNCTION Q3RationalPoint3D_Set(VAR point3D: TQ3RationalPoint3D; x: Single; y: Single; w: Single): TQ3RationalPoint3DPtr; C;
  78. FUNCTION Q3RationalPoint4D_Set(VAR point4D: TQ3RationalPoint4D; x: Single; y: Single; z: Single; w: Single): TQ3RationalPoint4DPtr; C;
  79. FUNCTION Q3Vector2D_Set(VAR vector2D: TQ3Vector2D; x: Single; y: Single): TQ3Vector2DPtr; C;
  80. FUNCTION Q3Vector3D_Set(VAR vector3D: TQ3Vector3D; x: Single; y: Single; z: Single): TQ3Vector3DPtr; C;
  81. FUNCTION Q3PolarPoint_Set(VAR polarPoint: TQ3PolarPoint; r: Single; theta: Single): TQ3PolarPointPtr; C;
  82. FUNCTION Q3SphericalPoint_Set(VAR sphericalPoint: TQ3SphericalPoint; rho: Single; theta: Single; phi: Single): TQ3SphericalPointPtr; C;
  83.  
  84. {*****************************************************************************
  85.  **                                                                             **
  86.  **                    Point and Vector Dimension Conversion                     **
  87.  **                                                                             **
  88.  ****************************************************************************}
  89. FUNCTION Q3Point2D_To3D({CONST}VAR point2D: TQ3Point2D; VAR result: TQ3Point3D): TQ3Point3DPtr; C;
  90. FUNCTION Q3RationalPoint3D_To2D({CONST}VAR point3D: TQ3RationalPoint3D; VAR result: TQ3Point2D): TQ3Point2DPtr; C;
  91. FUNCTION Q3Point3D_To4D({CONST}VAR point3D: TQ3Point3D; VAR result: TQ3RationalPoint4D): TQ3RationalPoint4DPtr; C;
  92. FUNCTION Q3RationalPoint4D_To3D({CONST}VAR point4D: TQ3RationalPoint4D; VAR result: TQ3Point3D): TQ3Point3DPtr; C;
  93. FUNCTION Q3Vector2D_To3D({CONST}VAR vector2D: TQ3Vector2D; VAR result: TQ3Vector3D): TQ3Vector3DPtr; C;
  94. FUNCTION Q3Vector3D_To2D({CONST}VAR vector3D: TQ3Vector3D; VAR result: TQ3Vector2D): TQ3Vector2DPtr; C;
  95.  
  96. {*****************************************************************************
  97.  **                                                                             **
  98.  **                            Point Subtraction                                 **
  99.  **                                                                             **
  100.  ****************************************************************************}
  101. FUNCTION Q3Point2D_Subtract({CONST}VAR p1: TQ3Point2D; {CONST}VAR p2: TQ3Point2D; VAR result: TQ3Vector2D): TQ3Vector2DPtr; C;
  102. FUNCTION Q3Param2D_Subtract({CONST}VAR p1: TQ3Param2D; {CONST}VAR p2: TQ3Param2D; VAR result: TQ3Vector2D): TQ3Vector2DPtr; C;
  103. FUNCTION Q3Point3D_Subtract({CONST}VAR p1: TQ3Point3D; {CONST}VAR p2: TQ3Point3D; VAR result: TQ3Vector3D): TQ3Vector3DPtr; C;
  104.  
  105. {*****************************************************************************
  106.  **                                                                             **
  107.  **                            Point Distance                                     **
  108.  **                                                                             **
  109.  ****************************************************************************}
  110. FUNCTION Q3Point2D_Distance({CONST}VAR p1: TQ3Point2D; {CONST}VAR p2: TQ3Point2D): Single; C;
  111. FUNCTION Q3Point2D_DistanceSquared({CONST}VAR p1: TQ3Point2D; {CONST}VAR p2: TQ3Point2D): Single; C;
  112.  
  113. FUNCTION Q3Param2D_Distance({CONST}VAR p1: TQ3Param2D; {CONST}VAR p2: TQ3Param2D): Single; C;
  114. FUNCTION Q3Param2D_DistanceSquared({CONST}VAR p1: TQ3Param2D; {CONST}VAR p2: TQ3Param2D): Single; C;
  115.  
  116. FUNCTION Q3RationalPoint3D_Distance({CONST}VAR p1: TQ3RationalPoint3D; {CONST}VAR p2: TQ3RationalPoint3D): Single; C;
  117. FUNCTION Q3RationalPoint3D_DistanceSquared({CONST}VAR p1: TQ3RationalPoint3D; {CONST}VAR p2: TQ3RationalPoint3D): Single; C;
  118.  
  119. FUNCTION Q3Point3D_Distance({CONST}VAR p1: TQ3Point3D; {CONST}VAR p2: TQ3Point3D): Single; C;
  120. FUNCTION Q3Point3D_DistanceSquared({CONST}VAR p1: TQ3Point3D; {CONST}VAR p2: TQ3Point3D): Single; C;
  121.  
  122. FUNCTION Q3RationalPoint4D_Distance({CONST}VAR p1: TQ3RationalPoint4D; {CONST}VAR p2: TQ3RationalPoint4D): Single; C;
  123. FUNCTION Q3RationalPoint4D_DistanceSquared({CONST}VAR p1: TQ3RationalPoint4D; {CONST}VAR p2: TQ3RationalPoint4D): Single; C;
  124.  
  125. {*****************************************************************************
  126.  **                                                                             **
  127.  **                            Point Relative Ratio                             **
  128.  **                                                                             **
  129.  ****************************************************************************}
  130. FUNCTION Q3Point2D_RRatio({CONST}VAR p1: TQ3Point2D; {CONST}VAR p2: TQ3Point2D; r1: Single; r2: Single; VAR result: TQ3Point2D): TQ3Point2DPtr; C;
  131. FUNCTION Q3Param2D_RRatio({CONST}VAR p1: TQ3Param2D; {CONST}VAR p2: TQ3Param2D; r1: Single; r2: Single; VAR result: TQ3Param2D): TQ3Param2DPtr; C;
  132. FUNCTION Q3Point3D_RRatio({CONST}VAR p1: TQ3Point3D; {CONST}VAR p2: TQ3Point3D; r1: Single; r2: Single; VAR result: TQ3Point3D): TQ3Point3DPtr; C;
  133. FUNCTION Q3RationalPoint4D_RRatio({CONST}VAR p1: TQ3RationalPoint4D; {CONST}VAR p2: TQ3RationalPoint4D; r1: Single; r2: Single; VAR result: TQ3RationalPoint4D): TQ3RationalPoint4DPtr; C;
  134.  
  135. {*****************************************************************************
  136.  **                                                                             **
  137.  **                    Point / Vector Addition    & Subtraction                     **
  138.  **                                                                             **
  139.  ****************************************************************************}
  140. FUNCTION Q3Point2D_Vector2D_Add({CONST}VAR point2D: TQ3Point2D; {CONST}VAR vector2D: TQ3Vector2D; VAR result: TQ3Point2D): TQ3Point2DPtr; C;
  141. FUNCTION Q3Param2D_Vector2D_Add({CONST}VAR param2D: TQ3Param2D; {CONST}VAR vector2D: TQ3Vector2D; VAR result: TQ3Param2D): TQ3Param2DPtr; C;
  142. FUNCTION Q3Point3D_Vector3D_Add({CONST}VAR point3D: TQ3Point3D; {CONST}VAR vector3D: TQ3Vector3D; VAR result: TQ3Point3D): TQ3Point3DPtr; C;
  143. FUNCTION Q3Point2D_Vector2D_Subtract({CONST}VAR point2D: TQ3Point2D; {CONST}VAR vector2D: TQ3Vector2D; VAR result: TQ3Point2D): TQ3Point2DPtr; C;
  144. FUNCTION Q3Param2D_Vector2D_Subtract({CONST}VAR param2D: TQ3Param2D; {CONST}VAR vector2D: TQ3Vector2D; VAR result: TQ3Param2D): TQ3Param2DPtr; C;
  145. FUNCTION Q3Point3D_Vector3D_Subtract({CONST}VAR point3D: TQ3Point3D; {CONST}VAR vector3D: TQ3Vector3D; VAR result: TQ3Point3D): TQ3Point3DPtr; C;
  146.  
  147. {*****************************************************************************
  148.  **                                                                             **
  149.  **                                Vector Scale                                 **
  150.  **                                                                             **
  151.  ****************************************************************************}
  152. FUNCTION Q3Vector2D_Scale({CONST}VAR vector2D: TQ3Vector2D; scalar: Single; VAR result: TQ3Vector2D): TQ3Vector2DPtr; C;
  153. FUNCTION Q3Vector3D_Scale({CONST}VAR vector3D: TQ3Vector3D; scalar: Single; VAR result: TQ3Vector3D): TQ3Vector3DPtr; C;
  154.  
  155. {*****************************************************************************
  156.  **                                                                             **
  157.  **                                Vector Length                                 **
  158.  **                                                                             **
  159.  ****************************************************************************}
  160. FUNCTION Q3Vector2D_Length({CONST}VAR vector2D: TQ3Vector2D): Single; C;
  161. FUNCTION Q3Vector3D_Length({CONST}VAR vector3D: TQ3Vector3D): Single; C;
  162.  
  163. {*****************************************************************************
  164.  **                                                                             **
  165.  **                                Vector Normalize                             **
  166.  **                                                                             **
  167.  ****************************************************************************}
  168. FUNCTION Q3Vector2D_Normalize({CONST}VAR vector2D: TQ3Vector2D; VAR result: TQ3Vector2D): TQ3Vector2DPtr; C;
  169. FUNCTION Q3Vector3D_Normalize({CONST}VAR vector3D: TQ3Vector3D; VAR result: TQ3Vector3D): TQ3Vector3DPtr; C;
  170.  
  171. {*****************************************************************************
  172.  **                                                                             **
  173.  **                    Vector/Vector Addition and Subtraction                     **
  174.  **                                                                             **
  175.  ****************************************************************************}
  176. FUNCTION Q3Vector2D_Add({CONST}VAR v1: TQ3Vector2D; {CONST}VAR v2: TQ3Vector2D; VAR result: TQ3Vector2D): TQ3Vector2DPtr; C;
  177. FUNCTION Q3Vector3D_Add({CONST}VAR v1: TQ3Vector3D; {CONST}VAR v2: TQ3Vector3D; VAR result: TQ3Vector3D): TQ3Vector3DPtr; C;
  178.  
  179. FUNCTION Q3Vector2D_Subtract({CONST}VAR v1: TQ3Vector2D; {CONST}VAR v2: TQ3Vector2D; VAR result: TQ3Vector2D): TQ3Vector2DPtr; C;
  180. FUNCTION Q3Vector3D_Subtract({CONST}VAR v1: TQ3Vector3D; {CONST}VAR v2: TQ3Vector3D; VAR result: TQ3Vector3D): TQ3Vector3DPtr; C;
  181.  
  182. {*****************************************************************************
  183.  **                                                                             **
  184.  **                                Cross Product                                 **
  185.  **                                                                             **
  186.  ****************************************************************************}
  187. FUNCTION Q3Vector2D_Cross({CONST}VAR v1: TQ3Vector2D; {CONST}VAR v2: TQ3Vector2D): Single; C;
  188. FUNCTION Q3Vector3D_Cross({CONST}VAR v1: TQ3Vector3D; {CONST}VAR v2: TQ3Vector3D; VAR result: TQ3Vector3D): TQ3Vector3DPtr; C;
  189. FUNCTION Q3Point3D_CrossProductTri({CONST}VAR point1: TQ3Point3D; {CONST}VAR point2: TQ3Point3D; {CONST}VAR point3: TQ3Point3D; VAR crossVector: TQ3Vector3D): TQ3Vector3DPtr; C;
  190.  
  191. {*****************************************************************************
  192.  **                                                                             **
  193.  **                                Dot Product                                     **
  194.  **                                                                             **
  195.  ****************************************************************************}
  196. FUNCTION Q3Vector2D_Dot({CONST}VAR v1: TQ3Vector2D; {CONST}VAR v2: TQ3Vector2D): Single; C;
  197. FUNCTION Q3Vector3D_Dot({CONST}VAR v1: TQ3Vector3D; {CONST}VAR v2: TQ3Vector3D): Single; C;
  198.  
  199. {*****************************************************************************
  200.  **                                                                             **
  201.  **                        Point and Vector Transformation                         **
  202.  **                                                                             **
  203.  ****************************************************************************}
  204. FUNCTION Q3Vector2D_Transform({CONST}VAR vector2D: TQ3Vector2D; {CONST}VAR matrix3x3: TQ3Matrix3x3; VAR result: TQ3Vector2D): TQ3Vector2DPtr; C;
  205. FUNCTION Q3Vector3D_Transform({CONST}VAR vector3D: TQ3Vector3D; {CONST}VAR matrix4x4: TQ3Matrix4x4; VAR result: TQ3Vector3D): TQ3Vector3DPtr; C;
  206. FUNCTION Q3Point2D_Transform({CONST}VAR point2D: TQ3Point2D; {CONST}VAR matrix3x3: TQ3Matrix3x3; VAR result: TQ3Point2D): TQ3Point2DPtr; C;
  207. FUNCTION Q3Param2D_Transform({CONST}VAR param2D: TQ3Param2D; {CONST}VAR matrix3x3: TQ3Matrix3x3; VAR result: TQ3Param2D): TQ3Param2DPtr; C;
  208. FUNCTION Q3Point3D_Transform({CONST}VAR point3D: TQ3Point3D; {CONST}VAR matrix4x4: TQ3Matrix4x4; VAR result: TQ3Point3D): TQ3Point3DPtr; C;
  209. FUNCTION Q3RationalPoint4D_Transform({CONST}VAR point4D: TQ3RationalPoint4D; {CONST}VAR matrix4x4: TQ3Matrix4x4; VAR result: TQ3RationalPoint4D): TQ3RationalPoint4DPtr; C;
  210. FUNCTION Q3Point3D_To3DTransformArray({CONST}VAR inPoint3D: TQ3Point3D; {CONST}VAR matrix: TQ3Matrix4x4; VAR outPoint3D: TQ3Point3D; numPoints: LONGINT; inStructSize: UInt32; outStructSize: UInt32): TQ3Status; C;
  211. FUNCTION Q3Point3D_To4DTransformArray({CONST}VAR inPoint3D: TQ3Point3D; {CONST}VAR matrix: TQ3Matrix4x4; VAR outPoint4D: TQ3RationalPoint4D; numPoints: LONGINT; inStructSize: UInt32; outStructSize: UInt32): TQ3Status; C;
  212. FUNCTION Q3RationalPoint4D_To4DTransformArray({CONST}VAR inPoint4D: TQ3RationalPoint4D; {CONST}VAR matrix: TQ3Matrix4x4; VAR outPoint4D: TQ3RationalPoint4D; numPoints: LONGINT; inStructSize: UInt32; outStructSize: UInt32): TQ3Status; C;
  213.  
  214. {*****************************************************************************
  215.  **                                                                             **
  216.  **                                Vector Negation                                 **
  217.  **                                                                             **
  218.  ****************************************************************************}
  219. FUNCTION Q3Vector2D_Negate({CONST}VAR vector2D: TQ3Vector2D; VAR result: TQ3Vector2D): TQ3Vector2DPtr; C;
  220. FUNCTION Q3Vector3D_Negate({CONST}VAR vector3D: TQ3Vector3D; VAR result: TQ3Vector3D): TQ3Vector3DPtr; C;
  221.  
  222. {*****************************************************************************
  223.  **                                                                             **
  224.  **                    Point conversion from cartesian to polar                 **
  225.  **                                                                             **
  226.  ****************************************************************************}
  227. FUNCTION Q3Point2D_ToPolar({CONST}VAR point2D: TQ3Point2D; VAR result: TQ3PolarPoint): TQ3PolarPointPtr; C;
  228. FUNCTION Q3PolarPoint_ToPoint2D({CONST}VAR polarPoint: TQ3PolarPoint; VAR result: TQ3Point2D): TQ3Point2DPtr; C;
  229. FUNCTION Q3Point3D_ToSpherical({CONST}VAR point3D: TQ3Point3D; VAR result: TQ3SphericalPoint): TQ3SphericalPointPtr; C;
  230. FUNCTION Q3SphericalPoint_ToPoint3D({CONST}VAR sphericalPoint: TQ3SphericalPoint; VAR result: TQ3Point3D): TQ3Point3DPtr; C;
  231.  
  232. {*****************************************************************************
  233.  **                                                                             **
  234.  **                            Point Affine Combinations                         **
  235.  **                                                                             **
  236.  ****************************************************************************}
  237. FUNCTION Q3Point2D_AffineComb({CONST}VAR points2D: TQ3Point2D; {CONST}VAR weights: Single; nPoints: UInt32; VAR result: TQ3Point2D): TQ3Point2DPtr; C;
  238. FUNCTION Q3Param2D_AffineComb({CONST}VAR params2D: TQ3Param2D; {CONST}VAR weights: Single; nPoints: UInt32; VAR result: TQ3Param2D): TQ3Param2DPtr; C;
  239. FUNCTION Q3RationalPoint3D_AffineComb({CONST}VAR points3D: TQ3RationalPoint3D; {CONST}VAR weights: Single; numPoints: UInt32; VAR result: TQ3RationalPoint3D): TQ3RationalPoint3DPtr; C;
  240. FUNCTION Q3Point3D_AffineComb({CONST}VAR points3D: TQ3Point3D; {CONST}VAR weights: Single; numPoints: UInt32; VAR result: TQ3Point3D): TQ3Point3DPtr; C;
  241. FUNCTION Q3RationalPoint4D_AffineComb({CONST}VAR points4D: TQ3RationalPoint4D; {CONST}VAR weights: Single; numPoints: UInt32; VAR result: TQ3RationalPoint4D): TQ3RationalPoint4DPtr; C;
  242.  
  243. {*****************************************************************************
  244.  **                                                                             **
  245.  **                                Matrix Functions                             **
  246.  **                                                                             **
  247.  ****************************************************************************}
  248. FUNCTION Q3Matrix3x3_Copy({CONST}VAR matrix3x3: TQ3Matrix3x3; VAR result: TQ3Matrix3x3): TQ3Matrix3x3Ptr; C;
  249. FUNCTION Q3Matrix4x4_Copy({CONST}VAR matrix4x4: TQ3Matrix4x4; VAR result: TQ3Matrix4x4): TQ3Matrix4x4Ptr; C;
  250.  
  251. FUNCTION Q3Matrix3x3_SetIdentity(VAR matrix3x3: TQ3Matrix3x3): TQ3Matrix3x3Ptr; C;
  252. FUNCTION Q3Matrix4x4_SetIdentity(VAR matrix4x4: TQ3Matrix4x4): TQ3Matrix4x4Ptr; C;
  253.  
  254. FUNCTION Q3Matrix3x3_Transpose({CONST}VAR matrix3x3: TQ3Matrix3x3; VAR result: TQ3Matrix3x3): TQ3Matrix3x3Ptr; C;
  255. FUNCTION Q3Matrix4x4_Transpose({CONST}VAR matrix4x4: TQ3Matrix4x4; VAR result: TQ3Matrix4x4): TQ3Matrix4x4Ptr; C;
  256.  
  257. FUNCTION Q3Matrix3x3_Invert({CONST}VAR matrix3x3: TQ3Matrix3x3; VAR result: TQ3Matrix3x3): TQ3Matrix3x3Ptr; C;
  258. FUNCTION Q3Matrix4x4_Invert({CONST}VAR matrix4x4: TQ3Matrix4x4; VAR result: TQ3Matrix4x4): TQ3Matrix4x4Ptr; C;
  259.  
  260. FUNCTION Q3Matrix3x3_Adjoint({CONST}VAR matrix3x3: TQ3Matrix3x3; VAR result: TQ3Matrix3x3): TQ3Matrix3x3Ptr; C;
  261.  
  262. FUNCTION Q3Matrix3x3_Multiply({CONST}VAR matrixA: TQ3Matrix3x3; {CONST}VAR matrixB: TQ3Matrix3x3; VAR result: TQ3Matrix3x3): TQ3Matrix3x3Ptr; C;
  263. FUNCTION Q3Matrix4x4_Multiply({CONST}VAR matrixA: TQ3Matrix4x4; {CONST}VAR matrixB: TQ3Matrix4x4; VAR result: TQ3Matrix4x4): TQ3Matrix4x4Ptr; C;
  264.  
  265. FUNCTION Q3Matrix3x3_SetTranslate(VAR matrix3x3: TQ3Matrix3x3; xTrans: Single; yTrans: Single): TQ3Matrix3x3Ptr; C;
  266. FUNCTION Q3Matrix3x3_SetScale(VAR matrix3x3: TQ3Matrix3x3; xScale: Single; yScale: Single): TQ3Matrix3x3Ptr; C;
  267.  
  268. FUNCTION Q3Matrix3x3_SetRotateAboutPoint(VAR matrix3x3: TQ3Matrix3x3; {CONST}VAR origin: TQ3Point2D; angle: Single): TQ3Matrix3x3Ptr; C;
  269. FUNCTION Q3Matrix4x4_SetTranslate(VAR matrix4x4: TQ3Matrix4x4; xTrans: Single; yTrans: Single; zTrans: Single): TQ3Matrix4x4Ptr; C;
  270. FUNCTION Q3Matrix4x4_SetScale(VAR matrix4x4: TQ3Matrix4x4; xScale: Single; yScale: Single; zScale: Single): TQ3Matrix4x4Ptr; C;
  271.  
  272. FUNCTION Q3Matrix4x4_SetRotateAboutPoint(VAR matrix4x4: TQ3Matrix4x4; {CONST}VAR origin: TQ3Point3D; xAngle: Single; yAngle: Single; zAngle: Single): TQ3Matrix4x4Ptr; C;
  273. FUNCTION Q3Matrix4x4_SetRotateAboutAxis(VAR matrix4x4: TQ3Matrix4x4; {CONST}VAR origin: TQ3Point3D; {CONST}VAR orientation: TQ3Vector3D; angle: Single): TQ3Matrix4x4Ptr; C;
  274. FUNCTION Q3Matrix4x4_SetRotate_X(VAR matrix4x4: TQ3Matrix4x4; angle: Single): TQ3Matrix4x4Ptr; C;
  275. FUNCTION Q3Matrix4x4_SetRotate_Y(VAR matrix4x4: TQ3Matrix4x4; angle: Single): TQ3Matrix4x4Ptr; C;
  276. FUNCTION Q3Matrix4x4_SetRotate_Z(VAR matrix4x4: TQ3Matrix4x4; angle: Single): TQ3Matrix4x4Ptr; C;
  277. FUNCTION Q3Matrix4x4_SetRotate_XYZ(VAR matrix4x4: TQ3Matrix4x4; xAngle: Single; yAngle: Single; zAngle: Single): TQ3Matrix4x4Ptr; C;
  278. FUNCTION Q3Matrix4x4_SetRotateVectorToVector(VAR matrix4x4: TQ3Matrix4x4; {CONST}VAR v1: TQ3Vector3D; {CONST}VAR v2: TQ3Vector3D): TQ3Matrix4x4Ptr; C;
  279. FUNCTION Q3Matrix4x4_SetQuaternion(VAR matrix: TQ3Matrix4x4; {CONST}VAR quaternion: TQ3Quaternion): TQ3Matrix4x4Ptr; C;
  280. FUNCTION Q3Matrix3x3_Determinant({CONST}VAR matrix3x3: TQ3Matrix3x3): Single; C;
  281. FUNCTION Q3Matrix4x4_Determinant({CONST}VAR matrix4x4: TQ3Matrix4x4): Single; C;
  282.  
  283. {*****************************************************************************
  284.  **                                                                             **
  285.  **                                Quaternion Routines                             **
  286.  **                                                                             **
  287.  ****************************************************************************}
  288. FUNCTION Q3Quaternion_Set(VAR quaternion: TQ3Quaternion; w: Single; x: Single; y: Single; z: Single): TQ3QuaternionPtr; C;
  289. FUNCTION Q3Quaternion_SetIdentity(VAR quaternion: TQ3Quaternion): TQ3QuaternionPtr; C;
  290. FUNCTION Q3Quaternion_Copy({CONST}VAR quaternion: TQ3Quaternion; VAR result: TQ3Quaternion): TQ3QuaternionPtr; C;
  291. FUNCTION Q3Quaternion_IsIdentity({CONST}VAR quaternion: TQ3Quaternion): TQ3Boolean; C;
  292. FUNCTION Q3Quaternion_Invert({CONST}VAR quaternion: TQ3Quaternion; VAR result: TQ3Quaternion): TQ3QuaternionPtr; C;
  293. FUNCTION Q3Quaternion_Normalize({CONST}VAR quaternion: TQ3Quaternion; VAR result: TQ3Quaternion): TQ3QuaternionPtr; C;
  294. FUNCTION Q3Quaternion_Dot({CONST}VAR q1: TQ3Quaternion; {CONST}VAR q2: TQ3Quaternion): Single; C;
  295. FUNCTION Q3Quaternion_Multiply({CONST}VAR q1: TQ3Quaternion; {CONST}VAR q2: TQ3Quaternion; VAR result: TQ3Quaternion): TQ3QuaternionPtr; C;
  296. FUNCTION Q3Quaternion_SetRotateAboutAxis(VAR quaternion: TQ3Quaternion; {CONST}VAR axis: TQ3Vector3D; angle: Single): TQ3QuaternionPtr; C;
  297. FUNCTION Q3Quaternion_SetRotate_XYZ(VAR quaternion: TQ3Quaternion; xAngle: Single; yAngle: Single; zAngle: Single): TQ3QuaternionPtr; C;
  298. FUNCTION Q3Quaternion_SetRotate_X(VAR quaternion: TQ3Quaternion; angle: Single): TQ3QuaternionPtr; C;
  299. FUNCTION Q3Quaternion_SetRotate_Y(VAR quaternion: TQ3Quaternion; angle: Single): TQ3QuaternionPtr; C;
  300. FUNCTION Q3Quaternion_SetRotate_Z(VAR quaternion: TQ3Quaternion; angle: Single): TQ3QuaternionPtr; C;
  301.  
  302. FUNCTION Q3Quaternion_SetMatrix(VAR quaternion: TQ3Quaternion; {CONST}VAR matrix: TQ3Matrix4x4): TQ3QuaternionPtr; C;
  303. FUNCTION Q3Quaternion_SetRotateVectorToVector(VAR quaternion: TQ3Quaternion; {CONST}VAR v1: TQ3Vector3D; {CONST}VAR v2: TQ3Vector3D): TQ3QuaternionPtr; C;
  304. FUNCTION Q3Quaternion_MatchReflection({CONST}VAR q1: TQ3Quaternion; {CONST}VAR q2: TQ3Quaternion; VAR result: TQ3Quaternion): TQ3QuaternionPtr; C;
  305. FUNCTION Q3Quaternion_InterpolateFast({CONST}VAR q1: TQ3Quaternion; {CONST}VAR q2: TQ3Quaternion; t: Single; VAR result: TQ3Quaternion): TQ3QuaternionPtr; C;
  306. FUNCTION Q3Quaternion_InterpolateLinear({CONST}VAR q1: TQ3Quaternion; {CONST}VAR q2: TQ3Quaternion; t: Single; VAR result: TQ3Quaternion): TQ3QuaternionPtr; C;
  307. FUNCTION Q3Vector3D_TransformQuaternion({CONST}VAR vector3D: TQ3Vector3D; {CONST}VAR quaternion: TQ3Quaternion; VAR result: TQ3Vector3D): TQ3Vector3DPtr; C;
  308. FUNCTION Q3Point3D_TransformQuaternion({CONST}VAR point3D: TQ3Point3D; {CONST}VAR quaternion: TQ3Quaternion; VAR result: TQ3Point3D): TQ3Point3DPtr; C;
  309.  
  310. {*****************************************************************************
  311.  **                                                                             **
  312.  **                                Volume Routines                                 **
  313.  **                                                                             **
  314.  ****************************************************************************}
  315. FUNCTION Q3BoundingBox_Copy({CONST}VAR src: TQ3BoundingBox; VAR dest: TQ3BoundingBox): TQ3BoundingBoxPtr; C;
  316. FUNCTION Q3BoundingBox_Union({CONST}VAR v1: TQ3BoundingBox; {CONST}VAR v2: TQ3BoundingBox; VAR result: TQ3BoundingBox): TQ3BoundingBoxPtr; C;
  317. FUNCTION Q3BoundingBox_Set(VAR bBox: TQ3BoundingBox; {CONST}VAR min: TQ3Point3D; {CONST}VAR max: TQ3Point3D; isEmpty: TQ3Boolean): TQ3BoundingBoxPtr; C;
  318. FUNCTION Q3BoundingBox_UnionPoint3D({CONST}VAR bBox: TQ3BoundingBox; {CONST}VAR point3D: TQ3Point3D; VAR result: TQ3BoundingBox): TQ3BoundingBoxPtr; C;
  319. FUNCTION Q3BoundingBox_UnionRationalPoint4D({CONST}VAR bBox: TQ3BoundingBox; {CONST}VAR point4D: TQ3RationalPoint4D; VAR result: TQ3BoundingBox): TQ3BoundingBoxPtr; C;
  320. FUNCTION Q3BoundingBox_SetFromPoints3D(VAR bBox: TQ3BoundingBox; {CONST}VAR points3D: TQ3Point3D; numPoints: UInt32; structSize: UInt32): TQ3BoundingBoxPtr; C;
  321. FUNCTION Q3BoundingBox_SetFromRationalPoints4D(VAR bBox: TQ3BoundingBox; {CONST}VAR points4D: TQ3RationalPoint4D; numPoints: UInt32; structSize: UInt32): TQ3BoundingBoxPtr; C;
  322.  
  323. {*****************************************************************************
  324.  **                                                                             **
  325.  **                                Sphere Routines                                 **
  326.  **                                                                             **
  327.  ****************************************************************************}
  328. FUNCTION Q3BoundingSphere_Copy({CONST}VAR src: TQ3BoundingSphere; VAR dest: TQ3BoundingSphere): TQ3BoundingSpherePtr; C;
  329. FUNCTION Q3BoundingSphere_Union({CONST}VAR s1: TQ3BoundingSphere; {CONST}VAR s2: TQ3BoundingSphere; VAR result: TQ3BoundingSphere): TQ3BoundingSpherePtr; C;
  330. FUNCTION Q3BoundingSphere_Set(VAR bSphere: TQ3BoundingSphere; {CONST}VAR origin: TQ3Point3D; radius: Single; isEmpty: TQ3Boolean): TQ3BoundingSpherePtr; C;
  331. FUNCTION Q3BoundingSphere_UnionPoint3D({CONST}VAR bSphere: TQ3BoundingSphere; {CONST}VAR point3D: TQ3Point3D; VAR result: TQ3BoundingSphere): TQ3BoundingSpherePtr; C;
  332. FUNCTION Q3BoundingSphere_UnionRationalPoint4D({CONST}VAR bSphere: TQ3BoundingSphere; {CONST}VAR point4D: TQ3RationalPoint4D; VAR result: TQ3BoundingSphere): TQ3BoundingSpherePtr; C;
  333.  
  334. FUNCTION Q3BoundingSphere_SetFromPoints3D(VAR bSphere: TQ3BoundingSphere; {CONST}VAR points3D: TQ3Point3D; numPoints: UInt32; structSize: UInt32): TQ3BoundingSpherePtr; C;
  335. FUNCTION Q3BoundingSphere_SetFromRationalPoints4D(VAR bSphere: TQ3BoundingSphere; {CONST}VAR points4D: TQ3RationalPoint4D; numPoints: UInt32; structSize: UInt32): TQ3BoundingSpherePtr; C;
  336.  
  337.  
  338.  
  339. {$ALIGN RESET}
  340. {$POP}
  341.  
  342. {$SETC UsingIncludes := QD3DMathIncludes}
  343.  
  344. {$ENDC} {__QD3DMATH__}
  345.  
  346. {$IFC NOT UsingIncludes}
  347.  END.
  348. {$ENDC}
  349.