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

其他游戏

开发平台:

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 HKSCENEDATA_MATERIAL_HKXMATERIAL_HKCLASS_H
  9. #define HKSCENEDATA_MATERIAL_HKXMATERIAL_HKCLASS_H
  10. #include <Common/SceneData/Attributes/hkxAttributeHolder.h>
  11. /// hkxMaterial meta information
  12. extern const class hkClass hkxMaterialClass;
  13. /// A serialization wrapper for the color and texture layers of a mesh section.
  14. class hkxMaterial : public hkxAttributeHolder
  15. {
  16. public:
  17. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_SCENE_DATA, hkxMaterial );
  18. HK_DECLARE_REFLECTION();
  19. /// Used by textures to hint at their usage.
  20. enum TextureType
  21. {
  22. /// 
  23. TEX_UNKNOWN,
  24. /// 
  25. TEX_DIFFUSE,
  26. /// 
  27. TEX_REFLECTION,
  28. /// 
  29. TEX_BUMP,
  30. /// 
  31. TEX_NORMAL,
  32. /// 
  33. TEX_DISPLACEMENT,
  34. /// 
  35. TEX_SPECULAR, // Specular Level map
  36. /// 
  37. TEX_SPECULARANDGLOSS, // Specular Level map with the Gloss (power) in the Alpha channel
  38. ///
  39. TEX_OPACITY, // Opacity (transparency) map. Normally not used, just use the alpha channel in one of the diffuse maps instead.
  40. /// 
  41. TEX_EMISSIVE, // Emissive (self illumination) map
  42. ///
  43. TEX_REFRACTION,
  44. ///
  45. TEX_GLOSS, // Specular Power map, normally not used (alpha in specmap quicker)
  46. ///
  47. TEX_NOTEXPORTED
  48. };
  49. /// The information needed to texture an object in the correct way. A stage contains
  50. /// just a texture map (one of two types, so a hkVariant) and some hint information.
  51. struct TextureStage
  52. {
  53. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_SCENE_DATA, hkxMaterial::TextureStage );
  54. HK_DECLARE_REFLECTION();
  55. /// The texture map. Usually an inplace or file texture pointer
  56. hkVariant m_texture;
  57. /// What the texture is meant for. Is it a normal map etc. An int so not assumed to
  58. /// be one of the default above enums.
  59. hkEnum< TextureType, hkInt32 > m_usageHint;
  60. /// Which of the texture coords it meant to use in the vertex buffer. Starts at 0. -1 for unknown.
  61. hkInt32 m_tcoordChannel; //+default(-1)
  62. };
  63. void sortTextureStageOrder();
  64. //
  65. // Members
  66. //
  67. public:
  68. /// The name of the material as seen in the modeler
  69. char* m_name;
  70. /// Ordered list of textures. Stages (or samplers) in a graphics engine.
  71. struct TextureStage* m_stages;
  72. hkInt32 m_numStages;
  73. /// Diffuse RGBA == the vector XYZW
  74. hkVector4 m_diffuseColor;
  75. /// Ambient RGB == the vector XYZ
  76. hkVector4 m_ambientColor;
  77. /// Specular RGB == the vector XYZ. Specular Power (shininess in ogl) is the W
  78. /// (0..20..100 are normal for the power)
  79. hkVector4 m_specularColor;
  80. /// Emissive RGB == the vector XYZ
  81. hkVector4 m_emissiveColor;
  82. /// Sub materials
  83. class hkxMaterial** m_subMaterials;
  84. hkInt32 m_numSubMaterials;
  85. /// extra material info such as a shader (FX file or whatever, usually a hkxMaterialEffect if it comes from our exporters, or a hkxMaterialShaderSet if specific single pass shader sets)
  86. hkVariant m_extraData;
  87. };
  88. #endif // HKSCENEDATA_MATERIAL_HKXMATERIAL_HKCLASS_H
  89. /*
  90. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  91. * Confidential Information of Havok.  (C) Copyright 1999-2009
  92. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  93. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  94. * rights, and intellectual property rights in the Havok software remain in
  95. * Havok and/or its suppliers.
  96. * Use of this software for evaluation purposes is subject to and indicates
  97. * acceptance of the End User licence Agreement for this product. A copy of
  98. * the license is included with this software and is also available at www.havok.com/tryhavok.
  99. */