hkpMotorConstraintInfo.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_MOTOR_CONSTRAINT_PUBLIC_H
  9. #define HK_CONSTRAINTSOLVER2_MOTOR_CONSTRAINT_PUBLIC_H
  10. class hkpConstraintQueryIn;
  11. class hkpConstraintQueryOut;
  12. class hkpSolverResults;
  13. class hkpConstraintMotor;
  14. class hkp2AngJacobian;
  15. class hkp1Lin2AngJacobian;
  16. /// A structure which is used for building jacobian elements
  17. class hkp1dBilateralConstraintStatus
  18. {
  19. public:
  20. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_CONSTRAINT_SOLVER, hkp1dBilateralConstraintStatus );
  21.     /// The relative mass of the two objects in constraint space
  22.     hkPadSpu<hkReal> m_virtualMass;
  23. };
  24. /// The low level input structure to set up linear and angular motors for the constraint solver
  25. class hkp1dConstraintMotorInfo
  26. {
  27. public:
  28. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_CONSTRAINT_SOLVER, hkp1dConstraintMotorInfo );
  29.     // <todo> not used in position motor
  30.     /// position target for the current frame.
  31.     hkPadSpu<hkReal> m_targetPosition;  
  32.     
  33.     /// The target velocity
  34.     hkPadSpu<hkReal> m_targetVelocity;
  35.     
  36.     /// max force that can be applied
  37.     hkPadSpu<hkReal> m_maxForce;
  38.     
  39.     /// max force that can be applied in the reverse direction
  40.     hkPadSpu<hkReal> m_minForce;
  41.     
  42.     /// The relative stiffness of the motor between 0..1
  43.     hkPadSpu<hkReal> m_tau;
  44.     
  45.     /// The relative damping of the motor between 0..1
  46.     hkPadSpu<hkReal> m_damping;
  47. };
  48. /// The inputs for the hkpConstraintMotor::hkCalcMotorData method
  49. class hkpConstraintMotorInput: public hkp1dBilateralConstraintStatus
  50. {
  51. public:
  52. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_CONSTRAINT_SOLVER, hkpConstraintMotorInput );
  53.     /// delta time information about the solver (
  54.     hkPadSpu<const class hkpConstraintQueryStepInfo*> m_stepInfo;
  55.     
  56.     /// information from the last step
  57.     class hkpSolverResults m_lastResults;
  58.     
  59.     /// new target minus old target
  60.     hkPadSpu<hkReal> m_deltaTarget;
  61.     
  62.     /// old target minus current position
  63.     hkPadSpu<hkReal> m_positionError;
  64. };
  65. /// The outputs for the hkpConstraintMotor::hkCalcMotorData method
  66. class hkpConstraintMotorOutput: public hkp1dConstraintMotorInfo
  67. {
  68. public:
  69. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_CONSTRAINT_SOLVER, hkpConstraintMotorOutput );
  70. };
  71. extern "C"
  72. {
  73. /// Calculate the desired position and the forces we can apply to get there according
  74. /// to the implemented force law.
  75. void HK_CALL hkCalcMotorData(const hkpConstraintMotor* someMotor, const hkpConstraintMotorInput* input, hkpConstraintMotorOutput* output);
  76. // build jacobian element
  77. void HK_CALL hk1dAngularVelocityMotorBeginJacobian( hkVector4Parameter directionOfConstraint, const hkpConstraintQueryIn &in, hkp2AngJacobian& jac, hkp1dBilateralConstraintStatus& statusOut );
  78. // must call hk1dAngularVelocityMotorBeginJacobian first to build jacobian in hkpConstraintQueryOut
  79. void HK_CALL hk1dAngularVelocityMotorCommitJacobian( hkp1dConstraintMotorInfo& info, const hkpConstraintQueryIn &in, hkp2AngJacobian& jac, hkpConstraintQueryOut &out );
  80. // build jacobian element
  81. void HK_CALL hk1dLinearVelocityMotorBeginJacobian( hkVector4Parameter directionOfConstraint, hkVector4Parameter pivot, const hkpConstraintQueryIn &in, hkp1Lin2AngJacobian& jac, hkp1dBilateralConstraintStatus& statusOut );
  82. // must call hk1dLinearVelocityMotorBeginJacobian first to build jacobian in hkpConstraintQueryOut
  83. void HK_CALL hk1dLinearVelocityMotorCommitJacobian( hkp1dConstraintMotorInfo& info, const hkpConstraintQueryIn &in, hkp1Lin2AngJacobian& jac, hkpConstraintQueryOut &out );
  84. }
  85. #endif // HK_CONSTRAINTSOLVER_MOTOR_CONSTRAINT_PUBLIC_H
  86. /*
  87. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  88. * Confidential Information of Havok.  (C) Copyright 1999-2009
  89. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  90. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  91. * rights, and intellectual property rights in the Havok software remain in
  92. * Havok and/or its suppliers.
  93. * Use of this software for evaluation purposes is subject to and indicates
  94. * acceptance of the End User licence Agreement for this product. A copy of
  95. * the license is included with this software and is also available at www.havok.com/tryhavok.
  96. */