try to fill in vertex weights to dae exportor
parent
0eecff74d8
commit
e5a3038abd
|
@ -133,6 +133,7 @@ void ColladaExporter::WriteFile()
|
||||||
WriteLightsLibrary();
|
WriteLightsLibrary();
|
||||||
WriteMaterials();
|
WriteMaterials();
|
||||||
WriteGeometryLibrary();
|
WriteGeometryLibrary();
|
||||||
|
WriteControllerLibrary();
|
||||||
|
|
||||||
WriteSceneLibrary();
|
WriteSceneLibrary();
|
||||||
|
|
||||||
|
@ -787,6 +788,85 @@ void ColladaExporter::WriteMaterials()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
// Writes the controller library
|
||||||
|
void ColladaExporter::WriteControllerLibrary()
|
||||||
|
{
|
||||||
|
mOutput << startstr << "<library_controllers>" << endstr;
|
||||||
|
PushTag();
|
||||||
|
|
||||||
|
for( size_t a = 0; a < mScene->mNumMeshes; ++a)
|
||||||
|
WriteController( a);
|
||||||
|
|
||||||
|
PopTag();
|
||||||
|
mOutput << startstr << "</library_controllers>" << endstr;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
// Writes a skin controller of the given mesh
|
||||||
|
void WriteController( size_t pIndex)
|
||||||
|
{
|
||||||
|
const aiMesh* mesh = mScene->mMeshes[pIndex];
|
||||||
|
const std::string idstr = GetMeshId( pIndex);
|
||||||
|
const std::string idstrEscaped = XMLEscape(idstr);
|
||||||
|
|
||||||
|
if ( mesh->mNumFaces == 0 || mesh->mNumVertices == 0 )
|
||||||
|
return;
|
||||||
|
|
||||||
|
if ( mesh->mNumBones == 0 )
|
||||||
|
return;
|
||||||
|
|
||||||
|
mOutput << startstr << "<controller id=\"" << idstrEscaped << "-skin\" ";
|
||||||
|
mOutput << "name=\"skinCluster" << pIndex << "\">"<< endstr;
|
||||||
|
PushTag();
|
||||||
|
|
||||||
|
mOutput << startstr << "<skin source=\"#" << idstrEscaped \">" << endstr;
|
||||||
|
PushTag();
|
||||||
|
|
||||||
|
// bind pose matrix
|
||||||
|
mOutput << startstr << "<bind_shape_matrix>" << endstr;
|
||||||
|
PushTag();
|
||||||
|
|
||||||
|
// I think it is identity in general cases.
|
||||||
|
aiMatrix4x4 mat();
|
||||||
|
mOutput << startstr;
|
||||||
|
mOutput << mat.a1 << " " << mat.a2 << " " << mat.a3 << " " << mat.a4;
|
||||||
|
mOutput << mat.b1 << " " << mat.b2 << " " << mat.b3 << " " << mat.b4;
|
||||||
|
mOutput << mat.c1 << " " << mat.c2 << " " << mat.c3 << " " << mat.c4;
|
||||||
|
mOutput << mat.d1 << " " << mat.d2 << " " << mat.d3 << " " << mat.d4;
|
||||||
|
mOutput << endstr;
|
||||||
|
|
||||||
|
PopTag();
|
||||||
|
mOutput << startstr << "</bind_shape_matrix>" << endstr;
|
||||||
|
|
||||||
|
mOutput << startstr << "<Name_array id=\"" << idstrEscaped << "-skin-joints-array\" " << "count=\"" << mesh->mNumBones << "\">";
|
||||||
|
|
||||||
|
for( size_t i = 0; i < mesh->mNumBones; ++i )
|
||||||
|
mOutput << XMLEscape(mesh->mBones[i].mName) << " ";
|
||||||
|
|
||||||
|
mOutput << "</Name_array>" << endstr;
|
||||||
|
|
||||||
|
mOutput << startstr << "<technique_common>" << endstr;
|
||||||
|
PushTag();
|
||||||
|
|
||||||
|
mOutput << startstr << "<accessor source=\"#" << idstrEscaped << "-skin-joints-array\" count=\"" << mesh->mNumBones << "\" stride=\"" << 1 << "\">";
|
||||||
|
PushTag();
|
||||||
|
|
||||||
|
mOutput << startstr << "param name=\"JOINT\" type=\"Name\"></param>" << endstr;
|
||||||
|
|
||||||
|
PopTag();
|
||||||
|
mOutput << "</accessor>" << endstr;
|
||||||
|
|
||||||
|
PopTag();
|
||||||
|
mOutput << startstr << "</technique_common>" << endstr;
|
||||||
|
|
||||||
|
PopTag();
|
||||||
|
mOutput << startstr << "</skin>" << endstr;
|
||||||
|
|
||||||
|
PopTag();
|
||||||
|
mOutput << startstr << "</controller>" << endstr;
|
||||||
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Writes the geometry library
|
// Writes the geometry library
|
||||||
void ColladaExporter::WriteGeometryLibrary()
|
void ColladaExporter::WriteGeometryLibrary()
|
||||||
|
|
|
@ -101,6 +101,12 @@ protected:
|
||||||
void WriteSpotLight(const aiLight *const light);
|
void WriteSpotLight(const aiLight *const light);
|
||||||
void WriteAmbienttLight(const aiLight *const light);
|
void WriteAmbienttLight(const aiLight *const light);
|
||||||
|
|
||||||
|
/// Writes the controller library
|
||||||
|
void WriteControllerLibrary();
|
||||||
|
|
||||||
|
/// Writes a skin controller of the given mesh
|
||||||
|
void WriteController( size_t pIndex);
|
||||||
|
|
||||||
/// Writes the geometry library
|
/// Writes the geometry library
|
||||||
void WriteGeometryLibrary();
|
void WriteGeometryLibrary();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue