hkTransform.h
上传用户:yisoukefu
上传日期:2020-08-09
资源大小:39506k
文件大小:6k
源码类别:

其他游戏

开发平台:

Visual C++

  1. /* 
  2.  * 
  3.  * Confidential Information of Telekinesys Research Limited (t/a Havok). Not for disclosure or distribution without Havok's
  4.  * prior written consent. This software contains code, techniques and know-how which is confidential and proprietary to Havok.
  5.  * Level 2 and Level 3 source code contains trade secrets of Havok. Havok Software (C) Copyright 1999-2009 Telekinesys Research Limited t/a Havok. All Rights Reserved. Use of this software is subject to the terms of an end user license agreement.
  6.  * 
  7.  */
  8. #ifndef HK_MATH_TRANSFORM_H
  9. #define HK_MATH_TRANSFORM_H
  10. #ifndef HK_MATH_MATH_H
  11. # error Please include Common/Base/hkBase.h instead of this file.
  12. #endif
  13. /// Stores a rotation and translation.
  14. /// Note that valid hkTransforms always have an orthonormal rotation component.
  15. /// Note that the w component of the columns may not be set correctly. Havok
  16. /// implicitly assumes that the shear components are all 0 and that the w
  17. /// component of the translation is 1. To get a 4x4 matrix suitable for rendering
  18. /// use the get4x4ColumnMajor method.
  19. ///
  20. /// The following conventions are adopted:<br>
  21. /// Internal representation of rotation is column-major<br>
  22. /// Applying matrix multiplication to a vector is done by premultiplying
  23. /// by the matrix<p>
  24. ///
  25. /// IMPORTANT NOTE ON SCALING: <br>
  26. /// This class is not designed to represent a full transformation including
  27. /// skewing and scaling components. The assumption is that skewing will not be
  28. /// used and that scaling is not meaningful in a simulation of rigid bodies.
  29. /// that only change their position and orientation.<p>
  30. /// Do not attempt to put scaling into the rows or columns of the
  31. /// rotation matrix. it must remain orthogonal at all times.<br>
  32. class hkTransform
  33. {
  34. public:
  35. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR(HK_MEMORY_CLASS_MATH, hkTransform);
  36. /// Default constructor - all elements are uninitialized.
  37. HK_FORCE_INLINE hkTransform() { }
  38. /// Creates a new hkTransform using the rotation r and translation t.
  39. HK_FORCE_INLINE hkTransform(const hkRotation& r, const hkVector4& t);
  40. /// Copy constructor
  41. HK_FORCE_INLINE hkTransform(const hkTransform& r);
  42. /// Creates a new hkTransform using the rotation quaternion q and translation t.
  43. HK_FORCE_INLINE hkTransform(const hkQuaternion& q, const hkVector4& t);
  44. /// Read-write access element at (row, column)
  45. HK_FORCE_INLINE hkReal& operator() (int row, int column);
  46. /// Read-only access element at (row, column)
  47. HK_FORCE_INLINE const hkReal& operator() (int row, int column) const;
  48. /// Sets the hkTransform's values using the rotation quaternion q and translation t.
  49. HK_FORCE_INLINE void set(const hkQuaternion& q, const hkVector4& t);
  50. /// Sets this hkTransform to be the identity transform.
  51. HK_FORCE_INLINE void setIdentity();
  52. /// Returns a global identity transform.
  53. HK_FORCE_INLINE static const hkTransform& HK_CALL getIdentity();
  54. /// Checks if this transform is the identity within an optional epsilon
  55. hkBool isApproximatelyEqual( const hkTransform& t, hkReal epsilon=1e-3f ) const;
  56. /// Gets a writable translation component.
  57. HK_FORCE_INLINE hkVector4& getTranslation();
  58. /// Gets the translation component.
  59. HK_FORCE_INLINE const hkVector4& getTranslation() const;
  60. /// Sets the translation component.
  61. HK_FORCE_INLINE void setTranslation(const hkVector4& t);
  62. /// Gets a writable rotation component.
  63. HK_FORCE_INLINE hkRotation& getRotation();
  64. /// Gets the rotation component.
  65. HK_FORCE_INLINE const hkRotation& getRotation() const;
  66. /// Sets the rotation component (using a hkRotation).
  67. HK_FORCE_INLINE void setRotation(const hkRotation& rotation);
  68. /// Sets the rotation component (using a hkQuaternion).
  69. HK_FORCE_INLINE void setRotation(const hkQuaternion& quatRotation);
  70. /// Sets this transform to be the inverse of the given transform t.
  71. void setInverse( const hkTransform &t );
  72. /// Sets this transform to be the product of t1 and t2.  (this = t1 * t2)
  73. void setMul( const hkTransform &t1, const hkTransform &t2 );
  74. /// Sets this transform to be the product of t1 and t2.  (this = t1 * t2)
  75. void setMul( const hkQsTransform &t1, const hkTransform &t2 );
  76. /// Sets this transform to be the product of the inverse of t1 by t2.  (this = t1^-1 * t2)
  77. void setMulInverseMul( const hkTransform& bTa, const hkTransform &bTc );
  78. /// Sets this transform to be the product of itself and the transform b.  (this *= b)
  79. void setMulEq( const hkTransform& b );
  80. /// Writes a 4x4 matrix suitable for rendering into p. P must be aligned if you have SIMD enabled.
  81. void get4x4ColumnMajor(hkReal* p) const;
  82. /// Reads a 4x4 matrix from p. There should be no scaling and the rotation should be orthonormal. P must be aligned if you have SIMD enabled.
  83. void set4x4ColumnMajor(const hkReal* p);
  84. /// Sets all 4 rows at once (including the .w component)
  85. HK_FORCE_INLINE void setRows4( const hkVector4& r0, const hkVector4& r1, const hkVector4& r2, const hkVector4& r3);
  86. /// Sets this transform to be the product of a and the inverse of b. (this = a * b^-1)
  87. void setMulMulInverse( const hkTransform &a, const hkTransform &b );
  88. /// Checks for bad values (denormals or infinities).
  89. hkBool isOk() const;
  90. /// Gets a read-write reference to the i'th column.
  91. HK_FORCE_INLINE hkVector4& getColumn(int i);
  92. /// Gets a read-only reference to the i'th column.
  93. HK_FORCE_INLINE const hkVector4& getColumn(int i) const;
  94. private:
  95. hkRotation m_rotation;
  96. hkVector4 m_translation;
  97. };
  98. #endif //HK_MATH_TRANSFORM_H
  99. /*
  100. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  101. * Confidential Information of Havok.  (C) Copyright 1999-2009
  102. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  103. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  104. * rights, and intellectual property rights in the Havok software remain in
  105. * Havok and/or its suppliers.
  106. * Use of this software for evaluation purposes is subject to and indicates
  107. * acceptance of the End User licence Agreement for this product. A copy of
  108. * the license is included with this software and is also available at www.havok.com/tryhavok.
  109. */