hkpConstraintQueryIn.h
上传用户: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. #ifndef HK_CONSTRAINTSOLVER2_CONSTRAINT_QUERY_IN_H
  9. #define HK_CONSTRAINTSOLVER2_CONSTRAINT_QUERY_IN_H
  10. #include <Common/Base/hkBase.h>
  11. #include <Common/Base/Types/Physics/hkStepInfo.h>
  12. #include <Physics/ConstraintSolver/Solve/hkpSolverInfo.h>
  13. class hkpVelocityAccumulator;
  14. /// The time information, the constraints get access to
  15. class hkpConstraintQueryStepInfo
  16. {
  17. public:
  18. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_CONSTRAINT_SOLVER, hkpConstraintQueryStepInfo );
  19. /// The delta time of each solvers substep
  20. HK_ALIGN16( hkPadSpu<float> m_substepDeltaTime );
  21. hkPadSpu<float> m_microStepDeltaTime;
  22. /// The 1.0f/m_substepDeltaTime
  23. hkPadSpu<float> m_substepInvDeltaTime;
  24. hkPadSpu<float> m_frameDeltaTime;
  25. hkPadSpu<float> m_frameInvDeltaTime;
  26. hkPadSpu<float> m_invNumSteps;
  27. hkPadSpu<float> m_invNumStepsTimesMicroSteps; // = 1.0f/(numSubsteps*numMicroSteps)
  28. // a factor all rhs should be multiplied
  29. hkPadSpu<float> m_rhsFactor;
  30. // a factor all invMasses should be multiplied
  31. hkPadSpu<float> m_virtMassFactor;
  32. // a factor for all rhs used for friction calculations
  33. hkPadSpu<float> m_frictionRhsFactor;
  34. };
  35. #define HK_ACCUMULATOR_OFFSET_TO_INDEX(offset) hkObjectIndex(unsigned(offset) / sizeof(hkpVelocityAccumulator))
  36. /// The input structure to hkConstraints::buildJacobian.
  37. class hkpConstraintQueryIn: public hkpConstraintQueryStepInfo
  38. {
  39. public:
  40. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_CONSTRAINT_SOLVER, hkpConstraintQueryIn );
  41. hkpConstraintQueryIn() { }
  42. /// The velocity accumulator of bodyA. Typically this is a hkpVelocityAccumulator
  43. HK_ALIGN16( hkPadSpu<const hkpVelocityAccumulator*> m_bodyA );
  44. /// The velocity accumulator of bodyB. Typically this is a hkpVelocityAccumulator
  45. hkPadSpu<const hkpVelocityAccumulator*> m_bodyB;
  46. /// the transform of rigid body A, identity transform if not available
  47. hkPadSpu<const hkTransform*> m_transformA;
  48. /// the transform of rigid body B, identity transform if not available
  49. hkPadSpu<const hkTransform*> m_transformB;
  50. /// the current global solver settings
  51. hkPadSpu<hkReal> m_tau;
  52. /// the current global solver settings
  53. hkPadSpu<hkReal> m_damping;
  54. /// if this class is used with the hkdynamics library, this points to an hkpConstraintInstance
  55. hkPadSpu<class hkpConstraintInstance*> m_constraintInstance;
  56. /// if this class is used with the hkdynamics library, this points to an hkpConstraintRuntime
  57. hkPadSpu<void*> m_constraintRuntime;
  58. // Data to be written to the header schema
  59. hkPadSpu<hkUint32> m_accumulatorAIndex;
  60. hkPadSpu<hkUint32> m_accumulatorBIndex;
  61. hkPadSpu<HK_CPU_PTR(void*)> m_constraintRuntimeInMainMemory;
  62. inline void set( const hkpSolverInfo& si, const hkStepInfo& stepInfo )
  63. {
  64. m_substepDeltaTime    = si.m_deltaTime;
  65. m_microStepDeltaTime  = si.m_deltaTime * si.m_invNumMicroSteps;
  66. m_substepInvDeltaTime = si.m_invDeltaTime;
  67. m_invNumSteps   = si.m_invNumSteps;
  68. m_invNumStepsTimesMicroSteps   = si.m_invNumSteps * si.m_invNumMicroSteps;
  69. m_tau       = si.m_tau;
  70. m_damping       = si.m_damping;
  71. m_rhsFactor   = si.m_tauDivDamp * si.m_invDeltaTime;
  72. m_virtMassFactor      = si.m_damping;
  73. m_frictionRhsFactor   = si.m_frictionTauDivDamp * si.m_invDeltaTime;
  74. m_frameDeltaTime      = stepInfo.m_deltaTime;
  75. m_frameInvDeltaTime   = stepInfo.m_invDeltaTime;
  76. }
  77. };
  78. #endif // HK_CONSTRAINTSOLVER2_CONSTRAINT_QUERY_IN_H
  79. /*
  80. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  81. * Confidential Information of Havok.  (C) Copyright 1999-2009
  82. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  83. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  84. * rights, and intellectual property rights in the Havok software remain in
  85. * Havok and/or its suppliers.
  86. * Use of this software for evaluation purposes is subject to and indicates
  87. * acceptance of the End User licence Agreement for this product. A copy of
  88. * the license is included with this software and is also available at www.havok.com/tryhavok.
  89. */