Browse Source

Merge pull request #1811 from TransformAndLighting/master

Various fixes and feature handling.
Kim Kulling 7 years ago
parent
commit
518be3c39e
7 changed files with 41 additions and 14 deletions
  1. 5 0
      CMakeLists.txt
  2. 1 1
      code/3DSLoader.cpp
  3. 1 0
      code/CMakeLists.txt
  4. 14 1
      code/glTF2Asset.inl
  5. 8 8
      code/glTFAsset.inl
  6. 9 2
      code/glTFImporter.cpp
  7. 3 2
      contrib/zlib/zlib.h

+ 5 - 0
CMakeLists.txt

@@ -230,6 +230,11 @@ ELSEIF( CMAKE_COMPILER_IS_MINGW )
   ADD_DEFINITIONS( -U__STRICT_ANSI__ )
   ADD_DEFINITIONS( -U__STRICT_ANSI__ )
 ENDIF()
 ENDIF()
 
 
+if (IOS)
+    set(CMAKE_C_FLAGS   "${CMAKE_C_FLAGS}   -fembed-bitcode -O3")
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fembed-bitcode -O3")
+endif()
+
 if (ASSIMP_COVERALLS)
 if (ASSIMP_COVERALLS)
     MESSAGE(STATUS "Coveralls enabled")
     MESSAGE(STATUS "Coveralls enabled")
     INCLUDE(Coveralls)
     INCLUDE(Coveralls)

+ 1 - 1
code/3DSLoader.cpp

@@ -349,7 +349,7 @@ void Discreet3DSImporter::ParseObjectChunk()
     case Discreet3DS::CHUNK_MAT_MATERIAL:
     case Discreet3DS::CHUNK_MAT_MATERIAL:
 
 
         // Add a new material to the list
         // Add a new material to the list
-        mScene->mMaterials.push_back(D3DS::Material(std::string("UNNAMED_" + std::to_string(mScene->mMaterials.size()))));
+        mScene->mMaterials.push_back(D3DS::Material(std::string("UNNAMED_" + to_string(mScene->mMaterials.size()))));
         ParseMaterialChunk();
         ParseMaterialChunk();
         break;
         break;
 
 

+ 1 - 0
code/CMakeLists.txt

@@ -72,6 +72,7 @@ SET( PUBLIC_HEADERS
   ${HEADER_PATH}/matrix4x4.h
   ${HEADER_PATH}/matrix4x4.h
   ${HEADER_PATH}/matrix4x4.inl
   ${HEADER_PATH}/matrix4x4.inl
   ${HEADER_PATH}/mesh.h
   ${HEADER_PATH}/mesh.h
+  ${HEADER_PATH}/pbrmaterial.h
   ${HEADER_PATH}/postprocess.h
   ${HEADER_PATH}/postprocess.h
   ${HEADER_PATH}/quaternion.h
   ${HEADER_PATH}/quaternion.h
   ${HEADER_PATH}/quaternion.inl
   ${HEADER_PATH}/quaternion.inl

+ 14 - 1
code/glTF2Asset.inl

@@ -669,7 +669,7 @@ inline Image::Image()
 
 
 }
 }
 
 
-inline void Image::Read(Value& obj, Asset& /*r*/)
+inline void Image::Read(Value& obj, Asset& r)
 {
 {
     if (!mDataLength) {
     if (!mDataLength) {
         if (Value* uri = FindString(obj, "uri")) {
         if (Value* uri = FindString(obj, "uri")) {
@@ -686,6 +686,19 @@ inline void Image::Read(Value& obj, Asset& /*r*/)
                 this->uri = uristr;
                 this->uri = uristr;
             }
             }
         }
         }
+        else if (Value* bufferViewVal = FindUInt(obj, "bufferView")) {
+            this->bufferView = r.bufferViews.Retrieve(bufferViewVal->GetUint());
+            Ref<Buffer> buffer = this->bufferView->buffer;
+
+            this->mDataLength = this->bufferView->byteLength;
+            // maybe this memcpy could be avoided if aiTexture does not delete[] pcData at destruction.
+            this->mData = new uint8_t [this->mDataLength];
+            memcpy(this->mData, buffer->GetPointer() + this->bufferView->byteOffset, this->mDataLength);
+
+            if (Value* mtype = FindString(obj, "mimeType")) {
+                this->mimeType = mtype->GetString();
+            }
+        }
     }
     }
 }
 }
 
 

+ 8 - 8
code/glTFAsset.inl

@@ -948,24 +948,24 @@ Ref<Buffer> buf = pAsset_Root.buffers.Get(pCompression_Open3DGC.Buffer);
 	size_t size_coordindex = ifs.GetNCoordIndex() * 3;// See float attributes note.
 	size_t size_coordindex = ifs.GetNCoordIndex() * 3;// See float attributes note.
 
 
 	if(primitives[0].indices->count != size_coordindex)
 	if(primitives[0].indices->count != size_coordindex)
-		throw DeadlyImportError("GLTF: Open3DGC. Compressed indices count (" + std::to_string(size_coordindex) +
-								") not equal to uncompressed (" + std::to_string(primitives[0].indices->count) + ").");
+		throw DeadlyImportError("GLTF: Open3DGC. Compressed indices count (" + to_string(size_coordindex) +
+								") not equal to uncompressed (" + to_string(primitives[0].indices->count) + ").");
 
 
 	size_coordindex *= sizeof(IndicesType);
 	size_coordindex *= sizeof(IndicesType);
 	// Coordinates
 	// Coordinates
 	size_t size_coord = ifs.GetNCoord();// See float attributes note.
 	size_t size_coord = ifs.GetNCoord();// See float attributes note.
 
 
 	if(primitives[0].attributes.position[0]->count != size_coord)
 	if(primitives[0].attributes.position[0]->count != size_coord)
-		throw DeadlyImportError("GLTF: Open3DGC. Compressed positions count (" + std::to_string(size_coord) +
-								") not equal to uncompressed (" + std::to_string(primitives[0].attributes.position[0]->count) + ").");
+		throw DeadlyImportError("GLTF: Open3DGC. Compressed positions count (" + to_string(size_coord) +
+								") not equal to uncompressed (" + to_string(primitives[0].attributes.position[0]->count) + ").");
 
 
 	size_coord *= 3 * sizeof(float);
 	size_coord *= 3 * sizeof(float);
 	// Normals
 	// Normals
 	size_t size_normal = ifs.GetNNormal();// See float attributes note.
 	size_t size_normal = ifs.GetNNormal();// See float attributes note.
 
 
 	if(primitives[0].attributes.normal[0]->count != size_normal)
 	if(primitives[0].attributes.normal[0]->count != size_normal)
-		throw DeadlyImportError("GLTF: Open3DGC. Compressed normals count (" + std::to_string(size_normal) +
-								") not equal to uncompressed (" + std::to_string(primitives[0].attributes.normal[0]->count) + ").");
+		throw DeadlyImportError("GLTF: Open3DGC. Compressed normals count (" + to_string(size_normal) +
+								") not equal to uncompressed (" + to_string(primitives[0].attributes.normal[0]->count) + ").");
 
 
 	size_normal *= 3 * sizeof(float);
 	size_normal *= 3 * sizeof(float);
 	// Additional attributes.
 	// Additional attributes.
@@ -989,8 +989,8 @@ Ref<Buffer> buf = pAsset_Root.buffers.Get(pCompression_Open3DGC.Buffer);
 				if(idx_texcoord < primitives[0].attributes.texcoord.size())
 				if(idx_texcoord < primitives[0].attributes.texcoord.size())
 				{
 				{
 					if(primitives[0].attributes.texcoord[idx]->count != tval)
 					if(primitives[0].attributes.texcoord[idx]->count != tval)
-						throw DeadlyImportError("GLTF: Open3DGC. Compressed texture coordinates count (" + std::to_string(tval) +
-												") not equal to uncompressed (" + std::to_string(primitives[0].attributes.texcoord[idx]->count) + ").");
+						throw DeadlyImportError("GLTF: Open3DGC. Compressed texture coordinates count (" + to_string(tval) +
+												") not equal to uncompressed (" + to_string(primitives[0].attributes.texcoord[idx]->count) + ").");
 
 
 					idx_texcoord++;
 					idx_texcoord++;
 				}
 				}

+ 9 - 2
code/glTFImporter.cpp

@@ -194,9 +194,16 @@ void glTFImporter::ImportMaterials(glTF::Asset& r)
             aimat->AddProperty(&str, AI_MATKEY_NAME);
             aimat->AddProperty(&str, AI_MATKEY_NAME);
         }
         }
 
 
-        SetMaterialColorProperty(embeddedTexIdxs, r, mat.diffuse, aimat, aiTextureType_DIFFUSE, AI_MATKEY_COLOR_DIFFUSE);
+        SetMaterialColorProperty(embeddedTexIdxs, r, mat.ambient,  aimat, aiTextureType_AMBIENT,  AI_MATKEY_COLOR_AMBIENT );
+        SetMaterialColorProperty(embeddedTexIdxs, r, mat.diffuse,  aimat, aiTextureType_DIFFUSE,  AI_MATKEY_COLOR_DIFFUSE );
         SetMaterialColorProperty(embeddedTexIdxs, r, mat.specular, aimat, aiTextureType_SPECULAR, AI_MATKEY_COLOR_SPECULAR);
         SetMaterialColorProperty(embeddedTexIdxs, r, mat.specular, aimat, aiTextureType_SPECULAR, AI_MATKEY_COLOR_SPECULAR);
-        SetMaterialColorProperty(embeddedTexIdxs, r, mat.ambient, aimat, aiTextureType_AMBIENT, AI_MATKEY_COLOR_AMBIENT);
+        SetMaterialColorProperty(embeddedTexIdxs, r, mat.emission, aimat, aiTextureType_EMISSIVE, AI_MATKEY_COLOR_EMISSIVE);
+
+        aimat->AddProperty(&mat.doubleSided, 1, AI_MATKEY_TWOSIDED);
+
+        if (mat.transparent && (mat.transparency != 1.0f)) {
+            aimat->AddProperty(&mat.transparency, 1, AI_MATKEY_OPACITY);
+        }
 
 
         if (mat.shininess > 0.f) {
         if (mat.shininess > 0.f) {
             aimat->AddProperty(&mat.shininess, 1, AI_MATKEY_SHININESS);
             aimat->AddProperty(&mat.shininess, 1, AI_MATKEY_SHININESS);

+ 3 - 2
contrib/zlib/zlib.h

@@ -77,8 +77,9 @@ extern "C" {
   the consistency of the compressed data, so the library should never crash
   the consistency of the compressed data, so the library should never crash
   even in the case of corrupted input.
   even in the case of corrupted input.
 */
 */
-#ifdef __ANDROID__     
-using zcrc_t = unsigned_long; 
+
+#ifdef __ANDROID__
+typedef unsigned long zcrc_t;
 #endif
 #endif
 
 
 typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size));
 typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size));