#include "GL_Material.h" #include "X3D_Material.h" using namespace std; namespace X3DTK { namespace GL { Material::Material() : X3DMaterialNode() { define(Recorder::getTypeName("Material", "Shape")); define(Recorder::getAttribute("diffuseColor", &Material::_diffuseColor, MFFloat(4))); define(Recorder::getAttribute("ambientColor", &Material::_ambientColor, MFFloat(4))); define(Recorder::getAttribute("emissiveColor", &Material::_emissiveColor, MFFloat(4))); define(Recorder::getAttribute("shininess", &Material::_shininess, 0.0f)); define(Recorder::getAttribute("specularColor", &Material::_specularColor, MFFloat(4))); } Material::~Material() { } void Material::setDiffuseColor(const MFFloat &diffuseColor) { _diffuseColor = diffuseColor; } void Material::setAmbientColor(const MFFloat &ambientColor) { _ambientColor = ambientColor; } void Material::setEmissiveColor(const MFFloat &emissiveColor) { _emissiveColor = emissiveColor; } void Material::setShininess(const SFFloat &shininess) { _shininess = shininess; } void Material::setSpecularColor(const MFFloat &specularColor) { _specularColor = specularColor; } void Material::update() { if (x3dReference == 0) return; X3D::Material *M = static_cast(x3dReference); SFColor C; float t = 1.0f - M->getTransparency(); float f = 1.0f - M->getAmbientIntensity(); C = M->getDiffuseColor(); _diffuseColor[0] = C.r; _diffuseColor[1] = C.g; _diffuseColor[2] = C.b; _diffuseColor[3] = t; _ambientColor[0] = f*C.r; _ambientColor[1] = f*C.g; _ambientColor[2] = f*C.b; _ambientColor[3] = t; C = M->getEmissiveColor(); _emissiveColor[0] = C.r; _emissiveColor[1] = C.g; _emissiveColor[2] = C.b; _emissiveColor[3] = t; _shininess = 128.0f*M->getShininess(); C = M->getSpecularColor(); _specularColor[0] = C.r; _specularColor[1] = C.g; _specularColor[2] = C.b; _specularColor[3] = t; } } }