Bugfix: SplitByBoneCountProcess sometimes split too early
Export API continued. First version of the Collada Exporter added. Handles static geometry and node hierarchy upto now. git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@894 67173fc5-114c-0410-ac8e-9d2fd5bffc1fpull/1/head
parent
553b3567c8
commit
3a4651b0ec
|
@ -59,11 +59,8 @@ namespace Assimp {
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Exporter worker function prototypes. Should not be necessary to #ifndef them, it's just a prototype
|
// Exporter worker function prototypes. Should not be necessary to #ifndef them, it's just a prototype
|
||||||
void ExportSceneCollada(aiExportDataBlob*, const aiScene*) {
|
void ExportSceneCollada(aiExportDataBlob*, const aiScene*);
|
||||||
}
|
void ExportScene3DS(aiExportDataBlob*, const aiScene*) { }
|
||||||
|
|
||||||
void ExportScene3DS(aiExportDataBlob*, const aiScene*) {
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Function pointer type of a Export worker function
|
/// Function pointer type of a Export worker function
|
||||||
typedef void (*fpExportFunc)(aiExportDataBlob*, const aiScene*);
|
typedef void (*fpExportFunc)(aiExportDataBlob*, const aiScene*);
|
||||||
|
@ -270,7 +267,26 @@ ASSIMP_API aiReturn aiExportSceneEx( const aiScene* pScene, const char* pFormatI
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
ASSIMP_API const C_STRUCT aiExportDataBlob* aiExportSceneToBlob( const aiScene* pScene, const char* pFormatId )
|
ASSIMP_API const C_STRUCT aiExportDataBlob* aiExportSceneToBlob( const aiScene* pScene, const char* pFormatId )
|
||||||
{
|
{
|
||||||
return NULL;
|
// find a suitable exporter
|
||||||
|
const Assimp::ExportFormatEntry* exporter = NULL;
|
||||||
|
for( size_t a = 0; a < aiGetExportFormatCount(); ++a )
|
||||||
|
{
|
||||||
|
if( strcmp( Assimp::gExporters[a].mDescription.id, pFormatId) == 0 )
|
||||||
|
exporter = Assimp::gExporters + a;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( !exporter )
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
aiExportDataBlob* blob = new aiExportDataBlob;
|
||||||
|
exporter->mExportFunction( blob, pScene);
|
||||||
|
if( !blob->data || blob->size == 0 )
|
||||||
|
{
|
||||||
|
delete blob;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return blob;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
|
|
@ -192,12 +192,14 @@ void SplitByBoneCountProcess::SplitMesh( const aiMesh* pMesh, std::vector<aiMesh
|
||||||
const std::vector<BoneWeight>& vb = vertexBones[face.mIndices[b]];
|
const std::vector<BoneWeight>& vb = vertexBones[face.mIndices[b]];
|
||||||
for( size_t c = 0; c < vb.size(); ++c)
|
for( size_t c = 0; c < vb.size(); ++c)
|
||||||
{
|
{
|
||||||
|
size_t boneIndex = vb[c].first;
|
||||||
// if the bone is already used in this submesh, it's ok
|
// if the bone is already used in this submesh, it's ok
|
||||||
if( isBoneUsed[ vb[c].first ] )
|
if( isBoneUsed[boneIndex] )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// if it's not used, yet, we would need to add it. Store its bone index
|
// if it's not used, yet, we would need to add it. Store its bone index
|
||||||
newBonesAtCurrentFace.push_back( vb[c].first);
|
if( std::find( newBonesAtCurrentFace.begin(), newBonesAtCurrentFace.end(), boneIndex) == newBonesAtCurrentFace.end() )
|
||||||
|
newBonesAtCurrentFace.push_back( boneIndex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -156,7 +156,7 @@ ASSIMP_API const C_STRUCT aiExportDataBlob* aiExportSceneToBlob( const C_STRUCT
|
||||||
* returned by aiExportScene().
|
* returned by aiExportScene().
|
||||||
* @param pData the data blob returned by aiExportScenetoBlob
|
* @param pData the data blob returned by aiExportScenetoBlob
|
||||||
*/
|
*/
|
||||||
ASSIMP_API C_STRUCT void aiReleaseExportBlob( const C_STRUCT aiExportDataBlob* pData );
|
ASSIMP_API C_STRUCT void aiReleaseExportData( const C_STRUCT aiExportDataBlob* pData );
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -183,6 +183,18 @@ DWORD WINAPI LoadThreadProc(LPVOID lpParameter)
|
||||||
D3DCOLOR_ARGB(0xFF,0xFF,0,0));
|
D3DCOLOR_ARGB(0xFF,0xFF,0,0));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// testweise wieder rausschreiben
|
||||||
|
const aiExportDataBlob* blob = aiExportSceneToBlob( g_pcAsset->pcScene, "collada");
|
||||||
|
if( blob )
|
||||||
|
{
|
||||||
|
FILE* file = fopen( "test.dae", "wb");
|
||||||
|
fwrite( blob->data, 1, blob->size, file);
|
||||||
|
fclose( file);
|
||||||
|
|
||||||
|
aiReleaseExportData( blob);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<?xml version="1.0" encoding="Windows-1252"?>
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
<VisualStudioProject
|
<VisualStudioProject
|
||||||
ProjectType="Visual C++"
|
ProjectType="Visual C++"
|
||||||
Version="9.00"
|
Version="9,00"
|
||||||
Name="assimp"
|
Name="assimp"
|
||||||
ProjectGUID="{5691E159-2D9B-407F-971F-EA5C592DC524}"
|
ProjectGUID="{5691E159-2D9B-407F-971F-EA5C592DC524}"
|
||||||
RootNamespace="assimp"
|
RootNamespace="assimp"
|
||||||
|
@ -4055,6 +4055,18 @@
|
||||||
</File>
|
</File>
|
||||||
</Filter>
|
</Filter>
|
||||||
</Filter>
|
</Filter>
|
||||||
|
<Filter
|
||||||
|
Name="export"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\code\ColladaExporter.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\code\ColladaExporter.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
</Filter>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter
|
<Filter
|
||||||
Name="doc"
|
Name="doc"
|
||||||
|
|
Loading…
Reference in New Issue