// ------------------------------------------------------------------------------------------------ TEST_F(BlendImportMaterials, testImportMaterial) { const aiScene* pTest = im->ReadFile(ASSIMP_TEST_MODELS_DIR "/BLEND/BlenderMaterial_269.blend", 0); ASSERT_TRUE(pTest != NULL); ASSERT_TRUE(pTest->HasMaterials()); ASSERT_EQ(1, pTest->mNumMaterials); auto alpha = pTest->mMaterials[0]; #define ASSERT_PROPERTY_EQ(expected, key, var) \ auto var = expected; \ ASSERT_EQ(aiReturn_SUCCESS, alpha->Get("$mat.blend." key, 0, 0, var)); \ ASSERT_EQ(expected, var); #define ASSERT_PROPERTY_FLOAT_EQ(expected, key, var) \ auto var = expected; \ ASSERT_EQ(aiReturn_SUCCESS, alpha->Get("$mat.blend." key, 0, 0, var)); \ ASSERT_FLOAT_EQ(expected, var); ASSERT_PROPERTY_EQ(aiColor3D(0.1f, 0.2f, 0.3f), "diffuse.color", diffuseColor); ASSERT_PROPERTY_EQ(0.4f, "diffuse.intensity", diffuseIntensity); ASSERT_PROPERTY_EQ(1, "diffuse.shader", diffuseShader); ASSERT_PROPERTY_EQ(0, "diffuse.ramp", diffuseRamp); ASSERT_PROPERTY_EQ(aiColor3D(0.5f, 0.6f, 0.7f), "specular.color", specularColor); ASSERT_PROPERTY_EQ(0.8f, "specular.intensity", specularIntensity); ASSERT_PROPERTY_EQ(1, "specular.shader", specularShader); ASSERT_PROPERTY_EQ(0, "specular.ramp", specularRamp); ASSERT_PROPERTY_EQ(9, "specular.hardness", specularHardness); ASSERT_PROPERTY_EQ(1, "transparency.use", transparencyUse); ASSERT_PROPERTY_EQ(2, "transparency.method", transparencyMethod); ASSERT_PROPERTY_EQ(0.01f, "transparency.alpha", transparencyAlpha); ASSERT_PROPERTY_EQ(0.02f, "transparency.specular", transparencySpecular); ASSERT_PROPERTY_EQ(0.03f, "transparency.fresnel", transparencyFresnel); ASSERT_PROPERTY_EQ(3.14f, "transparency.blend", transparencyBlend); ASSERT_PROPERTY_EQ(0.85f, "transparency.ior", transparencyIor); ASSERT_PROPERTY_FLOAT_EQ(0.128f, "transparency.filter", transparencyFilter); ASSERT_PROPERTY_FLOAT_EQ(1.298f, "transparency.falloff", transparencyFalloff); ASSERT_PROPERTY_FLOAT_EQ(0.2376f, "transparency.limit", transparencyLimit); ASSERT_PROPERTY_EQ(7, "transparency.depth", transparencyDepth); ASSERT_PROPERTY_FLOAT_EQ(0.678f, "transparency.glossAmount", transparencyGlossAmount); ASSERT_PROPERTY_FLOAT_EQ(0.208f, "transparency.glossThreshold", transparencyGlossThreshold); ASSERT_PROPERTY_EQ(17, "transparency.glossSamples", transparencyGlossSamples); ASSERT_PROPERTY_EQ(1, "mirror.use", mirrorUse); ASSERT_PROPERTY_FLOAT_EQ(0.28f, "mirror.reflectivity", mirrorReflectivity); ASSERT_PROPERTY_EQ(aiColor3D(0.25f, 0.5f, 0.128f), "mirror.color", mirrorColor); ASSERT_PROPERTY_FLOAT_EQ(0.256f, "mirror.fresnel", mirrorFresnel); ASSERT_PROPERTY_FLOAT_EQ(1.61f, "mirror.blend", mirrorBlend); ASSERT_PROPERTY_EQ(12, "mirror.depth", mirrorDepth); ASSERT_PROPERTY_FLOAT_EQ(0.4f, "mirror.maxDist", mirrorMaxDist); ASSERT_PROPERTY_EQ(1, "mirror.fadeTo", mirrorFadeTo); ASSERT_PROPERTY_FLOAT_EQ(0.512f, "mirror.glossAmount", mirrorGlossAmount); ASSERT_PROPERTY_FLOAT_EQ(0.18f, "mirror.glossThreshold", mirrorGlossThreshold); ASSERT_PROPERTY_EQ(61, "mirror.glossSamples", mirrorGlossSamples); ASSERT_PROPERTY_FLOAT_EQ(0.87f, "mirror.glossAnisotropic", mirrorGlossAnisotropic); }
void Model::processLight(const aiScene* scene) { vector<Light> listPointLight; vector<Light> listSpotLight; vector<Light> listDirectionalLight; aiLight* light; Light myLight; /* listPointLight.push_back(createLight(aiVector3D(-50.0f, 10.0f, 0.0f), aiColor3D(1.0f, 1.0f, 1.0f), aiColor3D(1.0f, 1.0f, 1.0f), aiColor3D(1.0f, 1.0f, 1.0f), 1.0f, 0.009f, 0.0032f, 0.71f, 0.52f, aiVector3D(-1.0f, -1.0f, 1.0f))); */ listPointLight.push_back(createLight(aiVector3D(0.0f, 10.0f, 0.0f), aiColor3D(1.0f, 1.0f, 1.0f), aiColor3D(1.0f, 1.0f, 1.0f), aiColor3D(1.0f, 1.0f, 1.0f), 1.0f, 0.009f, 0.0032f, 0.71f, 0.52f, aiVector3D(-1.0f, -1.0f, 1.0f))); /* listPointLight.push_back(createLight(aiVector3D(50.0f, 10.0f, 0.0f), aiColor3D(1.0f, 1.0f, 1.0f), aiColor3D(1.0f, 1.0f, 1.0f), aiColor3D(1.0f, 1.0f, 1.0f), 1.0f, 0.009f, 0.0032f, 0.71f, 0.52f, aiVector3D(0.0f, -1.0f, 0.0f))); */ for(int i=0; scene->mNumLights; i++) { light = scene->mLights[i]; myLight = createLight(light->mPosition, light->mColorAmbient, light->mColorDiffuse, light->mColorSpecular, light->mAttenuationConstant, light->mAttenuationLinear, light->mAttenuationQuadratic, light->mAngleInnerCone, light->mAngleOuterCone, light->mDirection); if(light->mType == aiLightSourceType::aiLightSource_POINT) listPointLight.push_back(myLight); if(light->mType == aiLightSourceType::aiLightSource_SPOT) listSpotLight.push_back(myLight); if(light->mType == aiLightSourceType::aiLightSource_DIRECTIONAL) listDirectionalLight.push_back(myLight); } GLuint nbLights = listPointLight.size() + listSpotLight.size() + listDirectionalLight.size(); m_lightShaderStorageBuffer.create(sizeof(glm::ivec4) + sizeof(Light)*nbLights, GL_SHADER_STORAGE_BUFFER, GL_STATIC_DRAW); glBufferSubData(GL_SHADER_STORAGE_BUFFER, 0, sizeof(glm::ivec4), glm::value_ptr(glm::ivec4(listPointLight.size(), listSpotLight.size(), listDirectionalLight.size(), 1))); glBufferSubData(GL_SHADER_STORAGE_BUFFER, sizeof(glm::ivec4), sizeof(Light)*listPointLight.size(), &listPointLight[0]); glBufferSubData(GL_SHADER_STORAGE_BUFFER, sizeof(glm::ivec4) + sizeof(Light)*listPointLight.size(), sizeof(Light)*listSpotLight.size(), &listSpotLight[0]); glBufferSubData(GL_SHADER_STORAGE_BUFFER, sizeof(glm::ivec4) + sizeof(Light)*listPointLight.size() + sizeof(Light)*listSpotLight.size(), sizeof(Light)*listDirectionalLight.size(), &listDirectionalLight[0]); m_lightShaderStorageBuffer.setBindingPoint(0); }