Fixed illumination model conversion in the OBJ loader.

Added map_d support to obj.

git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@332 67173fc5-114c-0410-ac8e-9d2fd5bffc1f
pull/1/head
aramis_acg 2009-02-05 18:13:34 +00:00
parent ec9226c5b9
commit 4048eb92f5
4 changed files with 37 additions and 4 deletions

View File

@ -146,7 +146,7 @@ struct Object
//! \brief Data structure to store all material specific data
struct Material
{
//! NAme of material description
//! Name of material description
aiString MaterialName;
//! Texture names
@ -155,6 +155,7 @@ struct Material
aiString textureAmbient;
aiString textureBump;
aiString textureSpecularity;
aiString textureOpacity;
//! Ambient color
aiColor3D ambient;
@ -168,10 +169,15 @@ struct Material
float shineness;
//! Illumination model
int illumination_model;
//! Index of refraction
float ior;
//! Constructor
Material()
: diffuse(0.6f,0.6f,0.6f)
: diffuse (0.6f,0.6f,0.6f)
, ior (1.f)
, alpha (1.f)
, illumination_model (1)
{
// empty
}

View File

@ -431,7 +431,24 @@ void ObjFileImporter::createMaterial(const ObjFile::Model* pModel, const ObjFile
ObjFile::Material *pCurrentMaterial = (*it).second;
mat->AddProperty( &pCurrentMaterial->MaterialName, AI_MATKEY_NAME );
mat->AddProperty<int>( &pCurrentMaterial->illumination_model, 1, AI_MATKEY_SHADING_MODEL);
// convert illumination model
int sm;
switch (pCurrentMaterial->illumination_model) {
case 0:
sm = aiShadingMode_NoShading;
break;
case 1:
sm = aiShadingMode_Gouraud;
break;
case 2:
sm = aiShadingMode_Phong;
break;
default:
sm = aiShadingMode_Gouraud;
DefaultLogger::get()->error("OBJ/MTL: Unexpected illumination model (0-3 recognized)");
}
mat->AddProperty<int>( &sm, 1, AI_MATKEY_SHADING_MODEL);
// Adding material colors
mat->AddProperty( &pCurrentMaterial->ambient, 1, AI_MATKEY_COLOR_AMBIENT );
@ -452,6 +469,9 @@ void ObjFileImporter::createMaterial(const ObjFile::Model* pModel, const ObjFile
if ( 0 != pCurrentMaterial->textureBump.length )
mat->AddProperty( &pCurrentMaterial->textureBump, AI_MATKEY_TEXTURE_HEIGHT(0));
if ( 0 != pCurrentMaterial->textureOpacity.length )
mat->AddProperty( &pCurrentMaterial->textureOpacity, AI_MATKEY_TEXTURE_OPACITY(0));
if ( 0 != pCurrentMaterial->textureSpecularity.length )
mat->AddProperty( &pCurrentMaterial->textureSpecularity, AI_MATKEY_TEXTURE_SHININESS(0));

View File

@ -141,7 +141,8 @@ void ObjFileMtlImporter::load()
getFloatValue(m_pModel->m_pCurrentMaterial->shineness);
break;
case 'i': //Index Of refraction
//TODO
++m_DataIt;
getFloatValue(m_pModel->m_pCurrentMaterial->ior);
break;
}
m_DataIt = skipLine<DataArrayIt>( m_DataIt, m_DataItEnd, m_uiLine );
@ -260,6 +261,10 @@ void ObjFileMtlImporter::getTexture()
else if (!ASSIMP_strincmp(&(*m_DataIt),"map_ks",6))
out = & m_pModel->m_pCurrentMaterial->textureSpecular;
// Opacity texture
else if (!ASSIMP_strincmp(&(*m_DataIt),"map_d",5))
out = & m_pModel->m_pCurrentMaterial->textureOpacity;
// Ambient texture
else if (!ASSIMP_strincmp(&(*m_DataIt),"map_ka",6))
out = & m_pModel->m_pCurrentMaterial->textureAmbient;

View File

@ -636,6 +636,8 @@ extern "C" {
/** @def AI_MATKEY_SHININESS
* Defines the base shininess of the material
* This is the exponent of the Phong shading equation.
* The range of this value depends on the file format, but usually
* you can assume that you won't get higher valzes than 128.
* <br>
* <b>Type:</b> float<br>
* <b>Default value:</b> 0.0f <br>