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
pull/1/head
aramis_acg 2009-02-08 21:22:03 +00:00
parent 8148ff36c0
commit 0e9ff778c8
3 changed files with 22 additions and 25 deletions

View File

@ -446,7 +446,7 @@ void ObjFileImporter::createMaterial(const ObjFile::Model* pModel, const ObjFile
break; break;
default: default:
sm = aiShadingMode_Gouraud; 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); 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->specular, 1, AI_MATKEY_COLOR_SPECULAR );
mat->AddProperty( &pCurrentMaterial->shineness, 1, AI_MATKEY_SHININESS ); mat->AddProperty( &pCurrentMaterial->shineness, 1, AI_MATKEY_SHININESS );
// Adding refraction index
mat->AddProperty( &pCurrentMaterial->ior, 1, AI_MATKEY_REFRACTI );
// Adding textures // Adding textures
if ( 0 != pCurrentMaterial->texture.length ) if ( 0 != pCurrentMaterial->texture.length )
mat->AddProperty( &pCurrentMaterial->texture, AI_MATKEY_TEXTURE_DIFFUSE(0)); mat->AddProperty( &pCurrentMaterial->texture, AI_MATKEY_TEXTURE_DIFFUSE(0));

View File

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

View File

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