hkNormalCalculator.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_NORMAL_CALCULATOR_H
  9. #define HK_NORMAL_CALCULATOR_H
  10. /// A set of utilities for working out normals for triangles given by indexed vertices
  11. class hkNormalCalculator
  12. {
  13. public:
  14.         HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_SCENE_DATA, hkNormalCalculator );
  15.             /// Calculates smoothing groups
  16.             /// cosSmoothingAngle - is the cos of the maximum angle between triangle normals to allow smoothing
  17.             ///
  18.             /// The calculateSmoothingGroups method takes a set of positions, a triangle list and an 'smoothing angle' which the angle across
  19.             /// an edge between shared faces must be less than for there to be smoothing between the triangles. The actual smoothing
  20.             /// factor is calculated as the dot product between the normals of two faces sharing an edge. It will therefore be 1 if the
  21.             /// triangles are facing in the same direction, 0 if at 90 degree, -1 if at 180 degrees. Therefore the cos of the angle between
  22.             /// the normals is the actual threshold (ie. the value has to be greater than the specified value for there to be smoothing
  23.             /// between the triangles).
  24.             ///
  25.             /// The method returns the results in the two arrays, triangleIndicesOut and numTrianglesOut. TriangleIndidicesOut holds the indices
  26.             /// of triangles (not the vertices) which are shared. The numTrianglesOut holds the number of triangles in each shared group. The
  27.             /// groups indices are held contiguously in triangleIndicesOut. Ie the first n indices in triangleIndicesOut belong to the first group (n being numTriangles[0])
  28.             /// the next groups triangles indices will directly follow with the amount held in numTrianglesOut[1] and so forth.
  29.         static void HK_CALL calculateSmoothingGroups(const hkArray<hkVector4>& positions, const hkUint16* triangleList, int numTriangles, hkReal cosSoothingAngle, hkArray<int>& triangleIndicesOut, hkArray<int>& numTrianglesOut);
  30.             /// Calculates how to smooth the geometry
  31. /// cosSmoothingAngle - is the cos of the maximum angle between triangle normals to allow smoothing
  32.             ///
  33.             /// calculatedSmoothedGeometry uses the calculateSmoothingGroups and calculateNormals methods to produce normals taking into account the smoothing angle.
  34.             /// The method returns vertices and normals such that they are not shared where needed (because there isn't smoothing). The originalIndicesOut array holds
  35.             /// the indices from the original positioned that the output normals and vertices out came from. This could be used for finding the texture coordinates to
  36.             /// apply from the original geometry.
  37.         static void HK_CALL calculateSmoothedGeometry(const hkArray<hkVector4>& positions, const hkUint16* triangleList, int numTriangles, hkReal cosSoothingAngle, hkArray<hkVector4>& verticesOut, hkArray<hkVector4>& normalsOut, hkArray<hkUint16>& triangleIndicesOut, hkArray<hkUint16>& originalIndicesOut);
  38. /// Normalizes all of the normals in the array normals
  39. static void HK_CALL normalize(hkArray<hkVector4>& normals);
  40.             /// The calculateNormals method takes the positions of vertices, a triangle list and will return the normals at those positions
  41.             /// (ie there will always be output the same amount of normals as positions). The normals produced will be calculated to
  42.             /// produce lighting that is smooth across the surface. Vertex indices are used to identify if an edge is shared - not the
  43.             /// position of the vertex.
  44.         static void HK_CALL calculateNormals(const hkArray<hkVector4>& positions, const hkUint16* triangleList, int numTriangles, hkArray<hkVector4>& normals);
  45. /// Given triangles as in a triangleIndices, the vertex a positions and a normals, compute the tangent frames in a tangentsOut and a binormalsOut such that the frames are aligned to the S-T directions of the a texCoords.
  46. static void HK_CALL calculateTangentSpaces(const hkArray<hkVector4>& positions, const hkArray<hkVector4>& normals, const hkArray<hkVector4>& texCoords, const hkArray<hkUint16>& triangleIndices, hkArray<hkVector4>& tangentsOut, hkArray<hkVector4>& binormalsOut);
  47. };
  48. #endif // HK_NORMAL_CALCULATOR_H
  49. /*
  50. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  51. * Confidential Information of Havok.  (C) Copyright 1999-2009
  52. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  53. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  54. * rights, and intellectual property rights in the Havok software remain in
  55. * Havok and/or its suppliers.
  56. * Use of this software for evaluation purposes is subject to and indicates
  57. * acceptance of the End User licence Agreement for this product. A copy of
  58. * the license is included with this software and is also available at www.havok.com/tryhavok.
  59. */