[*] Merge with fresh master.
This commit is contained in:
@@ -404,7 +404,7 @@ void BlenderImporter::ConvertBlendFile(aiScene* out, const Scene& in,const FileD
|
||||
}
|
||||
|
||||
// acknowledge that the scene might come out incomplete
|
||||
// by Assimps definition of `complete`: blender scenes
|
||||
// by Assimp's definition of `complete`: blender scenes
|
||||
// can consist of thousands of cameras or lights with
|
||||
// not a single mesh between them.
|
||||
if (!out->mNumMeshes) {
|
||||
@@ -790,7 +790,7 @@ void BlenderImporter::ConvertMesh(const Scene& /*in*/, const Object* /*obj*/, co
|
||||
ConversionData& conv_data, TempArray<std::vector,aiMesh>& temp
|
||||
)
|
||||
{
|
||||
// TODO: Resolve various problems with BMesh triangluation before re-enabling.
|
||||
// TODO: Resolve various problems with BMesh triangulation before re-enabling.
|
||||
// See issues #400, #373, #318 #315 and #132.
|
||||
#if defined(TODO_FIX_BMESH_CONVERSION)
|
||||
BlenderBMeshConverter BMeshConverter( mesh );
|
||||
@@ -852,7 +852,7 @@ void BlenderImporter::ConvertMesh(const Scene& /*in*/, const Object* /*obj*/, co
|
||||
//out->mNumVertices = 0
|
||||
out->mFaces = new aiFace[it.second]();
|
||||
|
||||
// all submeshes created from this mesh are named equally. this allows
|
||||
// all sub-meshes created from this mesh are named equally. this allows
|
||||
// curious users to recover the original adjacency.
|
||||
out->mName = aiString(mesh->id.name+2);
|
||||
// skip over the name prefix 'ME'
|
||||
@@ -1304,5 +1304,4 @@ aiNode* BlenderImporter::ConvertNode(const Scene& in, const Object* obj, Convers
|
||||
return node.dismiss();
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
#endif // ASSIMP_BUILD_NO_BLEND_IMPORTER
|
||||
|
||||
@@ -275,9 +275,6 @@ void BlenderModifier_Mirror :: DoIt(aiNode& out, ConversionData& conv_data, co
|
||||
orig_object.id.name,"`");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
bool BlenderModifier_Subdivision :: IsActive (const ModifierData& modin)
|
||||
{
|
||||
@@ -323,4 +320,4 @@ void BlenderModifier_Subdivision :: DoIt(aiNode& out, ConversionData& conv_data
|
||||
orig_object.id.name,"`");
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif // ASSIMP_BUILD_NO_BLEND_IMPORTER
|
||||
|
||||
@@ -806,4 +806,4 @@ void DNA::RegisterConverters() {
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
#endif ASSIMP_BUILD_NO_BLEND_IMPORTER
|
||||
|
||||
+6
-11
@@ -64,7 +64,7 @@ namespace Blender {
|
||||
// * C++ style comments only
|
||||
//
|
||||
// * Structures may include the primitive types char, int, short,
|
||||
// float, double. Signedness specifiers are not allowed on
|
||||
// float, double. Signed specifiers are not allowed on
|
||||
// integers. Enum types are allowed, but they must have been
|
||||
// defined in this header.
|
||||
//
|
||||
@@ -85,9 +85,9 @@ namespace Blender {
|
||||
// provided they are neither pointers nor arrays.
|
||||
//
|
||||
// * One of WARN, FAIL can be appended to the declaration (
|
||||
// prior to the semiolon to specifiy the error handling policy if
|
||||
// prior to the semicolon to specify the error handling policy if
|
||||
// this field is missing in the input DNA). If none of those
|
||||
// is specified the default policy is to subtitute a default
|
||||
// is specified the default policy is to substitute a default
|
||||
// value for the field.
|
||||
//
|
||||
|
||||
@@ -102,16 +102,16 @@ struct Image;
|
||||
|
||||
#define AI_BLEND_MESH_MAX_VERTS 2000000000L
|
||||
|
||||
static const size_t MaxNameLen = 1024;
|
||||
|
||||
// -------------------------------------------------------------------------------
|
||||
struct ID : ElemBase {
|
||||
|
||||
char name[1024] WARN;
|
||||
char name[ MaxNameLen ] WARN;
|
||||
short flag;
|
||||
};
|
||||
|
||||
// -------------------------------------------------------------------------------
|
||||
struct ListBase : ElemBase {
|
||||
|
||||
std::shared_ptr<ElemBase> first;
|
||||
std::shared_ptr<ElemBase> last;
|
||||
};
|
||||
@@ -126,7 +126,6 @@ struct PackedFile : ElemBase {
|
||||
|
||||
// -------------------------------------------------------------------------------
|
||||
struct GroupObject : ElemBase {
|
||||
|
||||
std::shared_ptr<GroupObject> prev,next FAIL;
|
||||
std::shared_ptr<Object> ob;
|
||||
};
|
||||
@@ -142,7 +141,6 @@ struct Group : ElemBase {
|
||||
// -------------------------------------------------------------------------------
|
||||
struct World : ElemBase {
|
||||
ID id FAIL;
|
||||
|
||||
};
|
||||
|
||||
// -------------------------------------------------------------------------------
|
||||
@@ -217,7 +215,6 @@ struct TFace : ElemBase {
|
||||
|
||||
// -------------------------------------------------------------------------------
|
||||
struct MTFace : ElemBase {
|
||||
|
||||
float uv[4][2] FAIL;
|
||||
char flag;
|
||||
short mode;
|
||||
@@ -235,7 +232,6 @@ struct MDeformWeight : ElemBase {
|
||||
|
||||
// -------------------------------------------------------------------------------
|
||||
struct MDeformVert : ElemBase {
|
||||
|
||||
vector<MDeformWeight> dw WARN;
|
||||
int totweight;
|
||||
};
|
||||
@@ -264,7 +260,6 @@ struct Material : ElemBase {
|
||||
float darkness;
|
||||
float refrac;
|
||||
|
||||
|
||||
float amb;
|
||||
float ang;
|
||||
float spectra;
|
||||
|
||||
+14
-7
@@ -290,6 +290,13 @@ size_t idx_srcdata_ind;// Index of begin of coordinates indices array in buffer.
|
||||
bool comp_allow;// Point that data of current mesh can be compressed.
|
||||
// Variables needed for compression. END.
|
||||
|
||||
std::string bufferId = mAsset->FindUniqueID("", "buffer");
|
||||
|
||||
Ref<Buffer> b = mAsset->GetBodyBuffer();
|
||||
if (!b) {
|
||||
b = mAsset->buffers.Create(bufferId);
|
||||
}
|
||||
|
||||
for (unsigned int idx_mesh = 0; idx_mesh < mScene->mNumMeshes; ++idx_mesh) {
|
||||
const aiMesh* aim = mScene->mMeshes[idx_mesh];
|
||||
|
||||
@@ -325,13 +332,6 @@ bool comp_allow;// Point that data of current mesh can be compressed.
|
||||
|
||||
p.material = mAsset->materials.Get(aim->mMaterialIndex);
|
||||
|
||||
std::string bufferId = mAsset->FindUniqueID(meshId, "buffer");
|
||||
|
||||
Ref<Buffer> b = mAsset->GetBodyBuffer();
|
||||
if (!b) {
|
||||
b = mAsset->buffers.Create(bufferId);
|
||||
}
|
||||
|
||||
/******************* Vertices ********************/
|
||||
// If compression is used then you need parameters of uncompressed region: begin and size. At this step "begin" is stored.
|
||||
if(comp_allow) idx_srcdata_begin = b->byteLength;
|
||||
@@ -347,6 +347,13 @@ bool comp_allow;// Point that data of current mesh can be compressed.
|
||||
|
||||
/************** Texture coordinates **************/
|
||||
for (int i = 0; i < AI_MAX_NUMBER_OF_TEXTURECOORDS; ++i) {
|
||||
// Flip UV y coords
|
||||
if (aim -> mNumUVComponents[i] > 1) {
|
||||
for (unsigned int j = 0; j < aim->mNumVertices; ++j) {
|
||||
aim->mTextureCoords[i][j].y = 1 - aim->mTextureCoords[i][j].y;
|
||||
}
|
||||
}
|
||||
|
||||
if (aim->mNumUVComponents[i] > 0) {
|
||||
AttribType::Value type = (aim->mNumUVComponents[i] == 2) ? AttribType::VEC2 : AttribType::VEC3;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user