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

其他游戏

开发平台:

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 HKX_SCENE_UTILS_H
  9. #define HKX_SCENE_UTILS_H
  10. #include <Common/Base/Math/Util/hkMathUtil.h>
  11. #include <Common/Base/Container/StringMap/hkStringMap.h>
  12. /// Scene utilities
  13. class hkxSceneUtils
  14. {
  15. public:
  16. /// Options taken by "hkxSceneUtils::transformScene"
  17. struct SceneTransformOptions
  18. {
  19. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_SCENE_DATA, hkxSceneUtils::SceneTransformOptions );
  20. /// Should we apply this transformation to scene graph nodes
  21. hkBool m_applyToNodes;
  22. /// Should we apply this transformation to vertex buffers
  23. hkBool m_applyToBuffers;
  24. /// Should we apply this transformation to float channels
  25. hkBool m_applyToFloatChannels;
  26. /// Should we apply this transformation to lights
  27. hkBool m_applyToLights;
  28. /// Should we apply this transformation to cameras
  29. hkBool m_applyToCameras;
  30. /// Should we flip index buffer winding
  31. hkBool m_flipWinding;
  32. /// The transform to apply
  33. hkMatrix3 m_transformMatrix;
  34. };
  35. /// Given a scene and the options specified in the SceneTransformOption struct, it goes
  36. /// through nodes, attributes, meshes, etc.. applying the specified transform to the scene
  37. /// Useful for scaling scenes as well as for transformin coordinate systems
  38. static void HK_CALL transformScene( class hkxScene& scene, const SceneTransformOptions& opts );
  39. /// Extracts environment data from an hkxScene - used mostly for backwards compatibility as previously
  40. /// environment information was stored in the hkxScene object. The variables extracted are:
  41. /// "asset" (ex: "car"),
  42. /// "assetPath" (ex: "c:/temp/car.max"),
  43. /// "assetFolder" (ex: "c:/temp/"),
  44. /// "modeller" (ex: "3ds max 8.0.0"),
  45. /// "selected" (ex: "chassis")
  46. static void HK_CALL fillEnvironmentFromScene (const class hkxScene& scene, class hkxEnvironment& environment);
  47. /// Reorders the nodes in an hkxScene by their names. It does so alphabetically, regardless of case.
  48. static void HK_CALL reorderNodesAlphabetically ( class hkxScene& scene );
  49. /// Checks the contents of the node, and if it's a mesh it returns it, or if it's a skin binding, it returns the mesh associated
  50. /// with it.
  51. static class hkxMesh* HK_CALL getMeshFromNode (const class hkxNode* aNode);
  52. // Reverse lookup. Handy to get a name for a mesh
  53. static const hkxNode* HK_CALL findFirstNodeUsingMesh(const hkxNode* rootNode, const class hkxMesh* aMesh);
  54. /// finds the first mesh in the scene
  55. static hkxNode* HK_CALL findFirstMeshNode(hkxScene* scene);
  56. struct GraphicsNode
  57. {
  58. hkxNode* m_node;
  59. const char* m_name;
  60. };
  61. /// finds all nodes under node, which have a mesh attached, which is probably visible in the Havok demos. 
  62. /// Also if the mesh name can be found in extraNodesToFind, the node will be returned.
  63. static void HK_CALL findAllGraphicsNodes(bool collectShapes, bool ignorePShapes, const hkStringMap<int>& extraNodesToFind, hkxNode* node, hkArray<GraphicsNode>& nodesOut);
  64. /// finds all nodes under node, which have a mesh attached
  65. static void HK_CALL findAllMeshNodes(hkxScene* scene, hkxNode* node, hkArray<hkxNode*>& nodes );
  66. // Helper function used by the createskin filter which allows for *translations* as well as rotations
  67. static void transformVertexBuffer( const hkTransform& tr, class hkxVertexBuffer& vbuffer);
  68. public:
  69. // Contains useful information about the transform
  70. struct TransformInfo
  71. {
  72. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_SCENE_DATA, hkxSceneUtils::TransformInfo );
  73. // The transform as a Matrix4
  74. hkMatrix3 m_transform;
  75. // The inverse of the transform
  76. hkMatrix3 m_inverse;
  77. // The inverse of the transform, transposed
  78. hkMatrix3 m_inverseTranspose;
  79. // The transform decomposed
  80. hkMathUtil::Decomposition m_decomposition;
  81. };
  82. private:
  83. // Transforms a node and its children. It also transform node attributes
  84. static void transformNode( const TransformInfo& transformInfo, class hkxNode& node);
  85. static void transformSkinBinding( const TransformInfo& transformInfo, class hkxSkinBinding& skinBinding);
  86. static void transformVertexBuffer( const TransformInfo& transformInfo, class hkxVertexBuffer& vbuffer);
  87. static void transformFloatChannel( const TransformInfo& transformInfo, class hkxVertexFloatDataChannel& floatChannel);
  88. static void transformLight( const TransformInfo& transformInfo, class hkxLight& light);
  89. static void transformCamera( const TransformInfo& transformInfo, class hkxCamera& camera);
  90. static void flipWinding( class hkxIndexBuffer &ibuffer );
  91. // Called by transformNode
  92. static void transformAttributeGroup ( const TransformInfo& transformInfo, struct hkxAttributeGroup& attributeGroup);
  93. // Called by transformAttributeGroup
  94. static void transformAnimatedFloat (const TransformInfo& transformInfo, struct hkxAnimatedFloat& animatedFloat);
  95. static void transformAnimatedQuaternion (const TransformInfo& transformInfo, struct hkxAnimatedQuaternion& animatedQuaternion);
  96. static void transformAnimatedMatrix (const TransformInfo& transformInfo, struct hkxAnimatedMatrix& animatedMatrix);
  97. static void transformAnimatedVector (const TransformInfo& transformInfo, struct hkxAnimatedVector& animatedVector);
  98. // Transforms a fullMatrix4, reused in different places
  99. static void transformMatrix4 (const TransformInfo& transformInfo, hkMatrix4& matrix4);
  100. };
  101. #endif // HK_SCENE_UTILS_H
  102. /*
  103. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  104. * Confidential Information of Havok.  (C) Copyright 1999-2009
  105. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  106. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  107. * rights, and intellectual property rights in the Havok software remain in
  108. * Havok and/or its suppliers.
  109. * Use of this software for evaluation purposes is subject to and indicates
  110. * acceptance of the End User licence Agreement for this product. A copy of
  111. * the license is included with this software and is also available at www.havok.com/tryhavok.
  112. */