forked from Mirrors/openclonk
#606: Accept CSM_Mesh_Bone_Assignment chunks in CSM_Mesh
parent
b7bc9bc755
commit
23f67b4c8d
|
@ -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();
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in New Issue