#606: Accept CSM_Mesh_Bone_Assignment chunks in CSM_Mesh

Nicolas Hake 2011-06-03 21:41:39 +02:00
parent b7bc9bc755
commit 23f67b4c8d
3 changed files with 11 additions and 2 deletions

View File

@ -245,7 +245,9 @@ StdMesh *StdMeshLoader::LoadMeshBinary(const char *src, size_t length, const Std
sm.Vertices = ReadSubmeshGeometry(geo);
// Read bone assignments
BOOST_FOREACH(const Ogre::Mesh::BoneAssignment &ba, csm.boneAssignments)
std::vector<Ogre::Mesh::BoneAssignment> &boneAssignments = (csm.hasSharedVertices ? cmesh.boneAssignments : csm.boneAssignments);
assert(!csm.hasSharedVertices || csm.boneAssignments.empty());
BOOST_FOREACH(const Ogre::Mesh::BoneAssignment &ba, boneAssignments)
{
if (ba.vertex >= sm.GetNumVertices())
throw Ogre::Mesh::VertexNotFound();

View File

@ -129,6 +129,12 @@ namespace Ogre
delete chunk;
break;
case CID_Mesh_Bone_Assignment:
// Collect bone assignments
{
ChunkMeshBoneAssignments *assignments = static_cast<ChunkMeshBoneAssignments*>(chunk);
boneAssignments.insert(boneAssignments.end(), assignments->assignments.begin(), assignments->assignments.end());
break;
}
default:
LogF("StdMeshLoader: I don't know what to do with a chunk of type 0x%xu inside a CID_Mesh chunk", chunk->GetType());
// Fall through

View File

@ -114,7 +114,7 @@
// Indices (1, k+1, k+2) define a triangle.
// ----------
// Type 0x4100: Submesh Bone Assignments
// (Type 0x7000: Mesh Bone Assignments)
// Type 0x7000: Mesh Bone Assignments
// uint32_t vertex_index
// uint32_t bone_index
// float weight
@ -387,6 +387,7 @@ namespace Ogre
std::string skeletonFile;
boost::scoped_ptr<ChunkGeometry> geometry;
boost::ptr_vector<ChunkSubmesh> submeshes;
std::vector<BoneAssignment> boneAssignments;
StdMeshBox bounds;
float radius;