Ver código fonte

+ SplitByBonesCountProcess: make bone limit configurable.
- fix tabbing.

git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@883 67173fc5-114c-0410-ac8e-9d2fd5bffc1f

aramis_acg 14 anos atrás
pai
commit
24a0132598
3 arquivos alterados com 37 adições e 31 exclusões
  1. 18 18
      code/SplitByBoneCountProcess.cpp
  2. 0 13
      code/SplitByBoneCountProcess.h
  3. 19 0
      include/aiConfig.h

+ 18 - 18
code/SplitByBoneCountProcess.cpp

@@ -75,7 +75,7 @@ bool SplitByBoneCountProcess::IsActive( unsigned int pFlags) const
 // Updates internal properties
 void SplitByBoneCountProcess::SetupProperties(const Importer* pImp)
 {
-	// ein andermal.
+	mMaxBoneCount = pImp->GetPropertyInteger(AI_CONFIG_PP_SBBC_MAX_BONES,AI_SBBC_DEFAULT_MAX_BONES);
 }
 
 // ------------------------------------------------------------------------------------------------
@@ -174,9 +174,9 @@ void SplitByBoneCountProcess::SplitMesh( const aiMesh* pMesh, std::vector<aiMesh
 		subMeshFaces.reserve( pMesh->mNumFaces);
 		// accumulated vertex count of all the faces in this submesh
 		size_t numSubMeshVertices = 0;
-    // a small local array of new bones for the current face. State of all used bones for that face
-    // can only be updated AFTER the face is completely analysed. Thanks to imre for the fix.
-    std::vector<size_t> newBonesAtCurrentFace;
+		// a small local array of new bones for the current face. State of all used bones for that face
+		// can only be updated AFTER the face is completely analysed. Thanks to imre for the fix.
+		std::vector<size_t> newBonesAtCurrentFace;
 
 		// add faces to the new submesh as long as all bones affecting the faces' vertices fit in the limit
 		for( size_t a = 0; a < pMesh->mNumFaces; ++a)
@@ -197,25 +197,25 @@ void SplitByBoneCountProcess::SplitMesh( const aiMesh* pMesh, std::vector<aiMesh
 						continue;
 
 					// if it's not used, yet, we would need to add it. Store its bone index
-          newBonesAtCurrentFace.push_back( vb[c].first);
+					newBonesAtCurrentFace.push_back( vb[c].first);
 				}
 			}
 
-      // leave out the face if the new bones required for this face don't fit the bone count limit anymore
-      if( numBones + newBonesAtCurrentFace.size() > mMaxBoneCount )
+			// leave out the face if the new bones required for this face don't fit the bone count limit anymore
+			if( numBones + newBonesAtCurrentFace.size() > mMaxBoneCount )
 				continue;
 
-      // mark all new bones as necessary
-      while( !newBonesAtCurrentFace.empty() )
-      {
-        size_t newIndex = newBonesAtCurrentFace.back();
-        newBonesAtCurrentFace.pop_back(); // this also avoids the deallocation which comes with a clear()
-        if( isBoneUsed[newIndex] ) 
-          continue;
-
-        isBoneUsed[newIndex] = true;
-        numBones++;
-      }
+			// mark all new bones as necessary
+			while( !newBonesAtCurrentFace.empty() )
+			{
+				size_t newIndex = newBonesAtCurrentFace.back();
+				newBonesAtCurrentFace.pop_back(); // this also avoids the deallocation which comes with a clear()
+				if( isBoneUsed[newIndex] ) 
+					continue;
+
+				isBoneUsed[newIndex] = true;
+				numBones++;
+			}
 
 			// store the face index and the vertex count
 			subMeshFaces.push_back( a);

+ 0 - 13
code/SplitByBoneCountProcess.h

@@ -52,19 +52,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 namespace Assimp
 {
 
-// NOTE: If you change these limits, don't forget to change the
-// corresponding values in all Assimp ports
-
-// **********************************************************
-// Java: ConfigProperty.java, 
-//  ConfigProperty.DEFAULT_VERTEX_SPLIT_LIMIT
-//  ConfigProperty.DEFAULT_TRIANGLE_SPLIT_LIMIT
-// **********************************************************
-
-// default limit for bone count 
-#if (!defined AI_SBBC_DEFAULT_MAX_BONES)
-#	define AI_SBBC_DEFAULT_MAX_BONES		60
-#endif
 
 /** Postprocessing filter to split meshes with many bones into submeshes
  * so that each submesh has a certain max bone count.

+ 19 - 0
include/aiConfig.h

@@ -102,6 +102,25 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 // Various stuff to fine-tune the behavior of a specific post processing step.
 // ###########################################################################
 
+// ---------------------------------------------------------------------------
+/** @brief Maximum bone count per mesh for the SplitbyBoneCount step.
+ *
+ * Meshes are split until the maximum number of bones is reached. The default
+ * value is AI_SBBC_DEFAULT_MAX_BONES, which may be altered at
+ * compile-time.
+ * Property data type: integer.
+ */
+// ---------------------------------------------------------------------------
+#define AI_CONFIG_PP_SBBC_MAX_BONES \
+	"PP_SBBC_MAX_BONES"
+
+
+// default limit for bone count 
+#if (!defined AI_SBBC_DEFAULT_MAX_BONES)
+#	define AI_SBBC_DEFAULT_MAX_BONES		60
+#endif
+
+
 // ---------------------------------------------------------------------------
 /** @brief  Specifies the maximum angle that may be between two vertex tangents
  *         that their tangents and bitangents are smoothed.