Jelajahi Sumber

FIX: ptv transforms tangents and bitangents now corrrectly.
FIX: Obj loader sets IOR material property now. Fixed spelling.

git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@336 67173fc5-114c-0410-ac8e-9d2fd5bffc1f

aramis_acg 17 tahun lalu
induk
melakukan
0e9ff778c8
3 mengubah file dengan 22 tambahan dan 25 penghapusan
  1. 4 1
      code/ObjFileImporter.cpp
  2. 17 23
      code/PretransformVertices.cpp
  3. 1 1
      tools/assimp_view/assimp_view.cpp

+ 4 - 1
code/ObjFileImporter.cpp

@@ -446,7 +446,7 @@ void ObjFileImporter::createMaterial(const ObjFile::Model* pModel, const ObjFile
 				break;
 			default:
 				sm = aiShadingMode_Gouraud;
-				DefaultLogger::get()->error("OBJ/MTL: Unexpected illumination model (0-3 recognized)");
+				DefaultLogger::get()->error("OBJ/MTL: Unexpected illumination model (0-2 recognized)");
 		}
 		mat->AddProperty<int>( &sm, 1, AI_MATKEY_SHADING_MODEL);
 
@@ -456,6 +456,9 @@ void ObjFileImporter::createMaterial(const ObjFile::Model* pModel, const ObjFile
 		mat->AddProperty( &pCurrentMaterial->specular, 1, AI_MATKEY_COLOR_SPECULAR );
 		mat->AddProperty( &pCurrentMaterial->shineness, 1, AI_MATKEY_SHININESS );
 
+		// Adding refraction index
+		mat->AddProperty( &pCurrentMaterial->ior, 1, AI_MATKEY_REFRACTI );
+
 		// Adding textures
 		if ( 0 != pCurrentMaterial->texture.length )
 			mat->AddProperty( &pCurrentMaterial->texture, AI_MATKEY_TEXTURE_DIFFUSE(0));

+ 17 - 23
code/PretransformVertices.cpp

@@ -138,35 +138,29 @@ void CollectData( aiScene* pcScene, aiNode* pcNode, unsigned int iMat,
 		{
 			// copy positions, transform them to worldspace
 			for (unsigned int n = 0; n < pcMesh->mNumVertices;++n)
-			{
-				pcMeshOut->mVertices[aiCurrent[AI_PTVS_VERTEX]+n] = 
-					pcNode->mTransformation * pcMesh->mVertices[n];
-			}
-			if (iVFormat & 0x2)
-			{
-				aiMatrix4x4 mWorldIT = pcNode->mTransformation;
-				mWorldIT.Inverse().Transpose();
+				pcMeshOut->mVertices[aiCurrent[AI_PTVS_VERTEX]+n] = pcNode->mTransformation * pcMesh->mVertices[n];
+			
+
+			aiMatrix4x4 mWorldIT = pcNode->mTransformation;
+			mWorldIT.Inverse().Transpose();
+
+			// TODO: implement Inverse() for aiMatrix3x3
+			aiMatrix3x3 m = aiMatrix3x3(mWorldIT);
 
-				// TODO: implement Inverse() for aiMatrix3x3
-				aiMatrix3x3 m = aiMatrix3x3(mWorldIT);
-				
+			if (iVFormat & 0x2)
+			{		
 				// copy normals, transform them to worldspace
-				for (unsigned int n = 0; n < pcMesh->mNumVertices;++n)
-				{
-					pcMeshOut->mNormals[aiCurrent[AI_PTVS_VERTEX]+n] = 
-						m * pcMesh->mNormals[n];
+				for (unsigned int n = 0; n < pcMesh->mNumVertices;++n)	{
+					pcMeshOut->mNormals[aiCurrent[AI_PTVS_VERTEX]+n] = m * pcMesh->mNormals[n];
 				}
 			}
 			if (iVFormat & 0x4)
 			{
-				// copy tangents
-				memcpy(pcMeshOut->mTangents + aiCurrent[AI_PTVS_VERTEX],
-					pcMesh->mTangents,
-					pcMesh->mNumVertices * sizeof(aiVector3D));
-				// copy bitangents
-				memcpy(pcMeshOut->mBitangents + aiCurrent[AI_PTVS_VERTEX],
-					pcMesh->mBitangents,
-					pcMesh->mNumVertices * sizeof(aiVector3D));
+				// copy tangents and bitangents, transform them to worldspace
+				for (unsigned int n = 0; n < pcMesh->mNumVertices;++n)	{
+					pcMeshOut->mTangents  [aiCurrent[AI_PTVS_VERTEX]+n] = m * pcMesh->mTangents[n];
+					pcMeshOut->mBitangents[aiCurrent[AI_PTVS_VERTEX]+n] = m * pcMesh->mBitangents[n];
+				}
 			}
 			unsigned int p = 0;
 			while (iVFormat & (0x100 << p))

+ 1 - 1
tools/assimp_view/assimp_view.cpp

@@ -147,7 +147,7 @@ DWORD WINAPI LoadThreadProc(LPVOID lpParameter)
 		aiProcess_GenUVCoords              | // convert spherical, cylindrical, box and planar mapping to proper UVs
 		aiProcess_TransformUVCoords        | // preprocess UV transformations (scaling, translation ...)
 		aiProcess_FindInstances            | // search for instanced meshes and remove them by references to one master
-//		aiProcess_PreTransformVertices	   |
+		aiProcess_PreTransformVertices	   |
 		0);
 
 	// get the end time of zje operation, calculate delta t