commit
72edaf7f20
|
@ -62,6 +62,7 @@ namespace Assimp {
|
||||||
|
|
||||||
struct FIValue {
|
struct FIValue {
|
||||||
virtual const std::string &toString() const = 0;
|
virtual const std::string &toString() const = 0;
|
||||||
|
virtual ~FIValue() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct FIStringValue: public FIValue {
|
struct FIStringValue: public FIValue {
|
||||||
|
@ -121,6 +122,7 @@ struct FICDATAValue: public FIStringValue {
|
||||||
|
|
||||||
struct FIDecoder {
|
struct FIDecoder {
|
||||||
virtual std::shared_ptr<const FIValue> decode(const uint8_t *data, size_t len) = 0;
|
virtual std::shared_ptr<const FIValue> decode(const uint8_t *data, size_t len) = 0;
|
||||||
|
virtual ~FIDecoder() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct FIQName {
|
struct FIQName {
|
||||||
|
|
|
@ -283,9 +283,8 @@ void MDCImporter::InternReadFile(
|
||||||
pcMesh->mNumVertices = pcMesh->mNumFaces * 3;
|
pcMesh->mNumVertices = pcMesh->mNumFaces * 3;
|
||||||
|
|
||||||
// store the name of the surface for use as node name.
|
// store the name of the surface for use as node name.
|
||||||
// FIX: make sure there is a 0 termination
|
pcMesh->mName.Set(std::string(pcSurface->ucName
|
||||||
const_cast<char&>(pcSurface->ucName[AI_MDC_MAXQPATH-1]) = '\0';
|
, strnlen(pcSurface->ucName, AI_MDC_MAXQPATH - 1)));
|
||||||
pcMesh->mTextureCoords[3] = (aiVector3D*)pcSurface->ucName;
|
|
||||||
|
|
||||||
// go to the first shader in the file. ignore the others.
|
// go to the first shader in the file. ignore the others.
|
||||||
if (pcSurface->ulNumShaders)
|
if (pcSurface->ulNumShaders)
|
||||||
|
@ -294,8 +293,8 @@ void MDCImporter::InternReadFile(
|
||||||
pcMesh->mMaterialIndex = (unsigned int)aszShaders.size();
|
pcMesh->mMaterialIndex = (unsigned int)aszShaders.size();
|
||||||
|
|
||||||
// create a new shader
|
// create a new shader
|
||||||
aszShaders.push_back(std::string( pcShader->ucName, std::min(
|
aszShaders.push_back(std::string( pcShader->ucName,
|
||||||
::strlen(pcShader->ucName),sizeof(pcShader->ucName)) ));
|
::strnlen(pcShader->ucName, sizeof(pcShader->ucName)) ));
|
||||||
}
|
}
|
||||||
// need to create a default material
|
// need to create a default material
|
||||||
else if (UINT_MAX == iDefaultMatIndex)
|
else if (UINT_MAX == iDefaultMatIndex)
|
||||||
|
@ -432,7 +431,7 @@ void MDCImporter::InternReadFile(
|
||||||
else if (1 == pScene->mNumMeshes)
|
else if (1 == pScene->mNumMeshes)
|
||||||
{
|
{
|
||||||
pScene->mRootNode = new aiNode();
|
pScene->mRootNode = new aiNode();
|
||||||
pScene->mRootNode->mName.Set(std::string((const char*)pScene->mMeshes[0]->mTextureCoords[3]));
|
pScene->mRootNode->mName = pScene->mMeshes[0]->mName;
|
||||||
pScene->mRootNode->mNumMeshes = 1;
|
pScene->mRootNode->mNumMeshes = 1;
|
||||||
pScene->mRootNode->mMeshes = new unsigned int[1];
|
pScene->mRootNode->mMeshes = new unsigned int[1];
|
||||||
pScene->mRootNode->mMeshes[0] = 0;
|
pScene->mRootNode->mMeshes[0] = 0;
|
||||||
|
@ -447,17 +446,13 @@ void MDCImporter::InternReadFile(
|
||||||
{
|
{
|
||||||
aiNode* pcNode = pScene->mRootNode->mChildren[i] = new aiNode();
|
aiNode* pcNode = pScene->mRootNode->mChildren[i] = new aiNode();
|
||||||
pcNode->mParent = pScene->mRootNode;
|
pcNode->mParent = pScene->mRootNode;
|
||||||
pcNode->mName.Set(std::string((const char*)pScene->mMeshes[i]->mTextureCoords[3]));
|
pcNode->mName = pScene->mMeshes[i]->mName;
|
||||||
pcNode->mNumMeshes = 1;
|
pcNode->mNumMeshes = 1;
|
||||||
pcNode->mMeshes = new unsigned int[1];
|
pcNode->mMeshes = new unsigned int[1];
|
||||||
pcNode->mMeshes[0] = i;
|
pcNode->mMeshes[0] = i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// make sure we invalidate the pointer to the mesh name
|
|
||||||
for (unsigned int i = 0; i < pScene->mNumMeshes;++i)
|
|
||||||
pScene->mMeshes[i]->mTextureCoords[3] = NULL;
|
|
||||||
|
|
||||||
// create materials
|
// create materials
|
||||||
pScene->mNumMaterials = (unsigned int)aszShaders.size();
|
pScene->mNumMaterials = (unsigned int)aszShaders.size();
|
||||||
pScene->mMaterials = new aiMaterial*[pScene->mNumMaterials];
|
pScene->mMaterials = new aiMaterial*[pScene->mNumMaterials];
|
||||||
|
|
|
@ -87,6 +87,7 @@ namespace pmx
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual void Read(std::istream *stream, PmxSetting *setting) = 0;
|
virtual void Read(std::istream *stream, PmxSetting *setting) = 0;
|
||||||
|
virtual ~PmxVertexSkinning() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class PmxVertexSkinningBDEF1 : public PmxVertexSkinning
|
class PmxVertexSkinningBDEF1 : public PmxVertexSkinning
|
||||||
|
|
|
@ -264,8 +264,12 @@ aiNode *ObjFileImporter::createNodes(const ObjFile::Model* pModel, const ObjFile
|
||||||
{
|
{
|
||||||
unsigned int meshId = pObject->m_Meshes[ i ];
|
unsigned int meshId = pObject->m_Meshes[ i ];
|
||||||
aiMesh *pMesh = createTopology( pModel, pObject, meshId );
|
aiMesh *pMesh = createTopology( pModel, pObject, meshId );
|
||||||
if( pMesh && pMesh->mNumFaces > 0 ) {
|
if( pMesh ) {
|
||||||
MeshArray.push_back( pMesh );
|
if (pMesh->mNumFaces > 0) {
|
||||||
|
MeshArray.push_back( pMesh );
|
||||||
|
} else {
|
||||||
|
delete pMesh;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -317,7 +321,7 @@ aiMesh *ObjFileImporter::createTopology( const ObjFile::Model* pModel, const Obj
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
aiMesh* pMesh = new aiMesh;
|
std::unique_ptr<aiMesh> pMesh(new aiMesh);
|
||||||
if( !pObjMesh->m_name.empty() ) {
|
if( !pObjMesh->m_name.empty() ) {
|
||||||
pMesh->mName.Set( pObjMesh->m_name );
|
pMesh->mName.Set( pObjMesh->m_name );
|
||||||
}
|
}
|
||||||
|
@ -382,9 +386,9 @@ aiMesh *ObjFileImporter::createTopology( const ObjFile::Model* pModel, const Obj
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create mesh vertices
|
// Create mesh vertices
|
||||||
createVertexArray(pModel, pData, meshIndex, pMesh, uiIdxCount);
|
createVertexArray(pModel, pData, meshIndex, pMesh.get(), uiIdxCount);
|
||||||
|
|
||||||
return pMesh;
|
return pMesh.release();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
|
|
@ -447,6 +447,7 @@ void Q3BSPFileImporter::createTriangleTopology( const Q3BSP::Q3BSPModel *pModel,
|
||||||
pMesh->mTextureCoords[ 0 ][ rVertIdx ].Set( pVertex->vTexCoord.x, pVertex->vTexCoord.y, 0.0f );
|
pMesh->mTextureCoords[ 0 ][ rVertIdx ].Set( pVertex->vTexCoord.x, pVertex->vTexCoord.y, 0.0f );
|
||||||
pMesh->mTextureCoords[ 1 ][ rVertIdx ].Set( pVertex->vLightmap.x, pVertex->vLightmap.y, 0.0f );
|
pMesh->mTextureCoords[ 1 ][ rVertIdx ].Set( pVertex->vLightmap.x, pVertex->vLightmap.y, 0.0f );
|
||||||
|
|
||||||
|
ai_assert( m_pCurrentFace );
|
||||||
m_pCurrentFace->mIndices[ idx ] = rVertIdx;
|
m_pCurrentFace->mIndices[ idx ] = rVertIdx;
|
||||||
rVertIdx++;
|
rVertIdx++;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue