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

其他游戏

开发平台:

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. inline hkMatrix3::hkMatrix3( const hkMatrix3& other )
  9. {
  10. m_col0 = other.m_col0;
  11. m_col1 = other.m_col1;
  12. m_col2 = other.m_col2;
  13. }
  14. #ifndef HK_MATRIX3_getColumn
  15. #define HK_MATRIX3_getColumn
  16. inline hkVector4& hkMatrix3::getColumn(int x)
  17. {
  18. return (&m_col0)[x];
  19. }
  20. inline const hkVector4& hkMatrix3::getColumn(int x) const
  21. {
  22. return (&m_col0)[x];
  23. }
  24. #endif
  25. inline hkReal& hkMatrix3::operator() (int r, int c)
  26. {
  27. return getColumn(c)(r);
  28. }
  29. inline const hkReal& hkMatrix3::operator() (int r, int c) const
  30. {
  31. return getColumn(c)(r);
  32. }
  33. inline void hkMatrix3::setRows( const hkVector4& r0,
  34. const hkVector4& r1,
  35. const hkVector4& r2)
  36. {
  37. getColumn(0).set( r0(0), r1(0), r2(0) );
  38. getColumn(1).set( r0(1), r1(1), r2(1) );
  39. getColumn(2).set( r0(2), r1(2), r2(2) );
  40. }
  41. inline void hkMatrix3::getRows( hkVector4& r0,
  42. hkVector4& r1,
  43. hkVector4& r2) const
  44. {
  45. r0.set( getColumn(0)(0), getColumn(1)(0), getColumn(2)(0) );
  46. r1.set( getColumn(0)(1), getColumn(1)(1), getColumn(2)(1) );
  47. r2.set( getColumn(0)(2), getColumn(1)(2), getColumn(2)(2) );
  48. }
  49. inline void hkMatrix3::setCols( const hkVector4& r0,
  50. const hkVector4& r1,
  51. const hkVector4& r2)
  52. {
  53. m_col0 = r0;
  54. m_col1 = r1;
  55. m_col2 = r2;
  56. }
  57. inline void hkMatrix3::operator= ( const hkMatrix3& a )
  58. {
  59. m_col0 = a.getColumn(0);
  60. m_col1 = a.getColumn(1);
  61. m_col2 = a.getColumn(2);
  62. }
  63. inline void hkMatrix3::getCols( hkVector4& r0,
  64. hkVector4& r1,
  65. hkVector4& r2) const
  66. {
  67. r0 = getColumn(0);
  68. r1 = getColumn(1);
  69. r2 = getColumn(2);
  70. }
  71. inline void hkMatrix3::getRow( int row, hkVector4& r) const
  72. {
  73. r.set( getColumn(0)(row), getColumn(1)(row), getColumn(2)(row) );
  74. }
  75. /// copy and transpose 
  76. inline void hkMatrix3::_setTranspose( const hkMatrix3& s )
  77. {
  78. hkMatrix3& d = *this;
  79. d(0,0) = s(0,0);
  80. d(1,1) = s(1,1);
  81. d(2,2) = s(2,2);
  82. d(3,0) = 0.0f;
  83. d(3,1) = 0.0f;
  84. d(3,2) = 0.0f;
  85. d(1,0) = s(0,1);
  86. d(0,1) = s(1,0);
  87. d(2,0) = s(0,2);
  88. d(0,2) = s(2,0);
  89. d(2,1) = s(1,2);
  90. d(1,2) = s(2,1);
  91. }
  92. /// aTc = aTb * bTc
  93. inline void hkMatrix3::_setMul( const hkMatrix3& aTb, const hkMatrix3& bTc )
  94. {
  95. hkMatrix3_setMulMat3Mat3( this, aTb, bTc );
  96. }
  97. inline void hkMatrix3::_setMul( hkSimdRealParameter scale, const hkMatrix3& a)
  98. {
  99. getColumn(0).setMul4(scale, a.getColumn(0));
  100. getColumn(1).setMul4(scale, a.getColumn(1));
  101. getColumn(2).setMul4(scale, a.getColumn(2));
  102. }
  103. inline void hkMatrix3::_add( const hkMatrix3& a )
  104. {
  105. getColumn(0).add4( a.getColumn(0) );
  106. getColumn(1).add4( a.getColumn(1) );
  107. getColumn(2).add4( a.getColumn(2) );
  108. }
  109. inline void hkMatrix3::_sub( const hkMatrix3& a )
  110. {
  111. getColumn(0).sub4( a.getColumn(0) );
  112. getColumn(1).sub4( a.getColumn(1) );
  113. getColumn(2).sub4( a.getColumn(2) );
  114. }
  115. inline void hkMatrix3::_invertSymmetric()
  116. {
  117. hkVector4 r0; r0.setCross( getColumn(1), getColumn(2) );
  118.     hkVector4 r1; r1.setCross( getColumn(2), getColumn(0) );
  119.     hkVector4 r2; r2.setCross( getColumn(0), getColumn(1) );
  120.     hkSimdReal determinant = getColumn(0).dot3(r0);
  121. HK_ASSERT2( 0xf0140200, hkReal(determinant) > 0.0f, "You cannot invert this matrix");
  122.     
  123. hkSimdReal dinv = hkSimdReal(1.0f) / determinant;
  124. getColumn(0).setMul4(dinv, r0);
  125. getColumn(1).setMul4(dinv, r1);
  126. getColumn(2).setMul4(dinv, r2);
  127. }
  128. inline void hkMatrix3::multiplyVector (const hkVector4& v, hkVector4& resultOut) const
  129. {
  130. hkVector4 xb; xb.setBroadcast(v, 0);
  131. hkVector4 yb; yb.setBroadcast(v, 1);
  132. hkVector4 zb; zb.setBroadcast(v, 2);
  133. hkVector4 t0;
  134. t0.setMul4( xb, m_col0 );
  135. t0.addMul4( yb, m_col1 );
  136. t0.addMul4( zb, m_col2 );
  137. resultOut = t0;
  138. }
  139. // has the default implementation be overridden?
  140. #if !defined( HK_MATRIX3_setZero )
  141. inline void hkMatrix3::setZero()
  142. {
  143. hkVector4 zero; zero.setZero4();
  144. getColumn(0) = zero;
  145. getColumn(1) = zero;
  146. getColumn(2) = zero;
  147. }
  148. #endif
  149. #if !defined( HK_MATRIX3_setDiagonal )
  150. inline void hkMatrix3::setDiagonal( hkReal m00, hkReal m11, hkReal m22 )
  151. {
  152. setZero();
  153. (*this)(0,0) = m00;
  154. (*this)(1,1) = m11;
  155. (*this)(2,2) = m22;
  156. }
  157. #endif
  158. #if !defined( HK_MATRIX3_setIdentity )
  159. inline void hkMatrix3::setIdentity()
  160. {
  161. setZero();
  162. hkReal one = 1.0f;
  163. (*this)(0,0) = one;
  164. (*this)(1,1) = one;
  165. (*this)(2,2) = one;
  166. }
  167. #endif
  168. /*
  169. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  170. * Confidential Information of Havok.  (C) Copyright 1999-2009
  171. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  172. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  173. * rights, and intellectual property rights in the Havok software remain in
  174. * Havok and/or its suppliers.
  175. * Use of this software for evaluation purposes is subject to and indicates
  176. * acceptance of the End User licence Agreement for this product. A copy of
  177. * the license is included with this software and is also available at www.havok.com/tryhavok.
  178. */