diff options
Diffstat (limited to 'source/blender/freestyle/intern/scene_graph/FrsMaterial.h')
-rw-r--r-- | source/blender/freestyle/intern/scene_graph/FrsMaterial.h | 573 |
1 files changed, 324 insertions, 249 deletions
diff --git a/source/blender/freestyle/intern/scene_graph/FrsMaterial.h b/source/blender/freestyle/intern/scene_graph/FrsMaterial.h index 1cbadab2bd3..831c384d472 100644 --- a/source/blender/freestyle/intern/scene_graph/FrsMaterial.h +++ b/source/blender/freestyle/intern/scene_graph/FrsMaterial.h @@ -1,304 +1,379 @@ -// -// Filename : FrsMaterial.h -// Author(s) : Stephane Grabli -// Purpose : Class used to handle materials. -// Date of creation : 10/10/2002 -// -/////////////////////////////////////////////////////////////////////////////// - - -// -// Copyright (C) : Please refer to the COPYRIGHT file distributed -// with this source distribution. -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef FRS_MATERIAL_H -# define FRS_MATERIAL_H - -# include "../system/FreestyleConfig.h" +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2010 Blender Foundation. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): none yet. + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#ifndef __FREESTYLE_MATERIAL_H__ +#define __FREESTYLE_MATERIAL_H__ + +/** \file blender/freestyle/intern/scene_graph/FrsMaterial.h + * \ingroup freestyle + * \brief Class used to handle materials. + * \author Stephane Grabli + * \date 10/10/2002 + */ + +#include "../system/FreestyleConfig.h" /*! Class defining a material */ class FrsMaterial { public: - /*! Default constructor */ - inline FrsMaterial(); - /*! Builds a Material from its diffuse, ambiant, specular, emissive - * colors and a shininess coefficient. - * \param iDiffuse - * A 4 element float-array containing the diffuse color. - * \param iAmbiant - * A 4 element float-array containing the ambiant color. - * \param iSpecular - * A 4 element float-array containing the specular color. - * \param iEmission - * A 4 element float-array containing the emissive color. - * \param iShininess - * The shininess coefficient. - */ - inline FrsMaterial(const float *iDiffuse, - const float *iAmbiant, - const float *iSpecular, - const float *iEmission, - const float iShininess); - - /*! Copy constructor */ - inline FrsMaterial(const FrsMaterial& m); - /*! Destructor */ - virtual ~FrsMaterial() {} - - - /*! Returns the diffuse color as a 4 float array */ - inline const float * diffuse() const { return Diffuse; } - /*! Returns the red component of the diffuse color */ - inline const float diffuseR() const { return Diffuse[0]; } - /*! Returns the green component of the diffuse color */ - inline const float diffuseG() const { return Diffuse[1]; } - /*! Returns the blue component of the diffuse color */ - inline const float diffuseB() const { return Diffuse[2]; } - /*! Returns the alpha component of the diffuse color */ - inline const float diffuseA() const { return Diffuse[3]; } - - /*! Returns the specular color as a 4 float array */ - inline const float * specular() const { return Specular; } - /*! Returns the red component of the specular color */ - inline const float specularR() const { return Specular[0]; } - /*! Returns the green component of the specular color */ - inline const float specularG() const { return Specular[1]; } - /*! Returns the blue component of the specular color */ - inline const float specularB() const { return Specular[2]; } - /*! Returns the alpha component of the specular color */ - inline const float specularA() const { return Specular[3]; } - - /*! Returns the ambiant color as a 4 float array */ - inline const float * ambient() const { return Ambient; } - /*! Returns the red component of the ambiant color */ - inline const float ambientR() const { return Ambient[0]; } - /*! Returns the green component of the ambiant color */ - inline const float ambientG() const { return Ambient[1]; } - /*! Returns the blue component of the ambiant color */ - inline const float ambientB() const { return Ambient[2]; } - /*! Returns the alpha component of the ambiant color */ - inline const float ambientA() const { return Ambient[3]; } - - /*! Returns the emissive color as a 4 float array */ - inline const float * emission() const { return Emission; } - /*! Returns the red component of the emissive color */ - inline const float emissionR() const { return Emission[0]; } - /*! Returns the green component of the emissive color */ - inline const float emissionG() const { return Emission[1]; } - /*! Returns the blue component of the emissive color */ - inline const float emissionB() const { return Emission[2]; } - /*! Returns the alpha component of the emissive color */ - inline const float emissionA() const { return Emission[3]; } - - /*! Returns the shininess coefficient */ - inline const float shininess() const { return Shininess; } - - /*! Sets the diffuse color. - * \param r - * Red component - * \param g - * Green component - * \param b - * Blue component - * \param a - * Alpha component - */ - inline void setDiffuse(const float r, const float g, const float b, const float a); - /*! Sets the specular color. - * \param r - * Red component - * \param g - * Green component - * \param b - * Blue component - * \param a - * Alpha component - */ - inline void setSpecular(const float r, const float g, const float b, const float a); - /*! Sets the ambiant color. - * \param r - * Red component - * \param g - * Green component - * \param b - * Blue component - * \param a - * Alpha component - */ - inline void setAmbient(const float r, const float g, const float b, const float a); - - /*! Sets the emissive color. - * \param r - * Red component - * \param g - * Green component - * \param b - * Blue component - * \param a - * Alpha component - */ - inline void setEmission(const float r, const float g, const float b, const float a); - - /*! Sets the shininess. - * \param s - * Shininess - */ - inline void setShininess(const float s); - - /* operators */ - inline FrsMaterial& operator=(const FrsMaterial& m); - inline bool operator!=(const FrsMaterial& m) const; - inline bool operator==(const FrsMaterial& m) const; + /*! Default constructor */ + inline FrsMaterial(); + + /*! Builds a Material from its diffuse, ambiant, specular, emissive colors and a shininess coefficient. + * \param iDiffuse + * A 4 element float-array containing the diffuse color. + * \param iAmbiant + * A 4 element float-array containing the ambiant color. + * \param iSpecular + * A 4 element float-array containing the specular color. + * \param iEmission + * A 4 element float-array containing the emissive color. + * \param iShininess + * The shininess coefficient. + */ + inline FrsMaterial(const float *iDiffuse, const float *iAmbiant, const float *iSpecular, const float *iEmission, + const float iShininess); + + /*! Copy constructor */ + inline FrsMaterial(const FrsMaterial& m); + + /*! Destructor */ + virtual ~FrsMaterial() {} + + + /*! Returns the diffuse color as a 4 float array */ + inline const float *diffuse() const + { + return Diffuse; + } + + /*! Returns the red component of the diffuse color */ + inline const float diffuseR() const + { + return Diffuse[0]; + } + + /*! Returns the green component of the diffuse color */ + inline const float diffuseG() const + { + return Diffuse[1]; + } + + /*! Returns the blue component of the diffuse color */ + inline const float diffuseB() const + { + return Diffuse[2]; + } + + /*! Returns the alpha component of the diffuse color */ + inline const float diffuseA() const + { + return Diffuse[3]; + } + + /*! Returns the specular color as a 4 float array */ + inline const float *specular() const + { + return Specular; + } + + /*! Returns the red component of the specular color */ + inline const float specularR() const + { + return Specular[0]; + } + + /*! Returns the green component of the specular color */ + inline const float specularG() const + { + return Specular[1]; + } + + /*! Returns the blue component of the specular color */ + inline const float specularB() const + { + return Specular[2]; + } + + /*! Returns the alpha component of the specular color */ + inline const float specularA() const + { + return Specular[3]; + } + + /*! Returns the ambiant color as a 4 float array */ + inline const float *ambient() const + { + return Ambient; + } + + /*! Returns the red component of the ambiant color */ + inline const float ambientR() const + { + return Ambient[0]; + } + + /*! Returns the green component of the ambiant color */ + inline const float ambientG() const + { + return Ambient[1]; + } + + /*! Returns the blue component of the ambiant color */ + inline const float ambientB() const + { + return Ambient[2]; + } + + /*! Returns the alpha component of the ambiant color */ + inline const float ambientA() const + { + return Ambient[3]; + } + + /*! Returns the emissive color as a 4 float array */ + inline const float *emission() const + { + return Emission; + } + + /*! Returns the red component of the emissive color */ + inline const float emissionR() const + { + return Emission[0]; + } + + /*! Returns the green component of the emissive color */ + inline const float emissionG() const + { + return Emission[1]; + } + + /*! Returns the blue component of the emissive color */ + inline const float emissionB() const + { + return Emission[2]; + } + + /*! Returns the alpha component of the emissive color */ + inline const float emissionA() const + { + return Emission[3]; + } + + /*! Returns the shininess coefficient */ + inline const float shininess() const + { + return Shininess; + } + + /*! Sets the diffuse color. + * \param r + * Red component + * \param g + * Green component + * \param b + * Blue component + * \param a + * Alpha component + */ + inline void setDiffuse(const float r, const float g, const float b, const float a); + + /*! Sets the specular color. + * \param r + * Red component + * \param g + * Green component + * \param b + * Blue component + * \param a + * Alpha component + */ + inline void setSpecular(const float r, const float g, const float b, const float a); + + /*! Sets the ambiant color. + * \param r + * Red component + * \param g + * Green component + * \param b + * Blue component + * \param a + * Alpha component + */ + inline void setAmbient(const float r, const float g, const float b, const float a); + + /*! Sets the emissive color. + * \param r + * Red component + * \param g + * Green component + * \param b + * Blue component + * \param a + * Alpha component + */ + inline void setEmission(const float r, const float g, const float b, const float a); + + /*! Sets the shininess. + * \param s + * Shininess + */ + inline void setShininess(const float s); + + /* operators */ + inline FrsMaterial& operator=(const FrsMaterial& m); + inline bool operator!=(const FrsMaterial& m) const; + inline bool operator==(const FrsMaterial& m) const; private: - - /*! Material properties */ - float Diffuse[4]; - float Specular[4]; - float Ambient[4]; - float Emission[4]; - float Shininess; - + /*! Material properties */ + float Diffuse[4]; + float Specular[4]; + float Ambient[4]; + float Emission[4]; + float Shininess; }; FrsMaterial::FrsMaterial() { - Ambient[0] = Ambient[1] = Ambient[2] = 0.2f; - Ambient[3] = 1.f; + Ambient[0] = Ambient[1] = Ambient[2] = 0.2f; + Ambient[3] = 1.0f; - Diffuse[0] = Diffuse[1] = Diffuse[2] = 0.8f; - Diffuse[3] = 1.f; + Diffuse[0] = Diffuse[1] = Diffuse[2] = 0.8f; + Diffuse[3] = 1.0f; - Emission[0] = Emission[1] = Emission[2] = 0.f; - Emission[3] = 1.f; + Emission[0] = Emission[1] = Emission[2] = 0.0f; + Emission[3] = 1.0f; - Specular[0] = Specular[1] = Specular[2] = 0.f; - Specular[3] = 1.f; + Specular[0] = Specular[1] = Specular[2] = 0.0f; + Specular[3] = 1.0f; - Shininess = 0.f; + Shininess = 0.0f; } -FrsMaterial::FrsMaterial(const float *iDiffuse, - const float *iAmbiant, - const float *iSpecular, - const float *iEmission, - const float iShininess) +FrsMaterial::FrsMaterial(const float *iDiffuse, const float *iAmbiant, const float *iSpecular, const float *iEmission, + const float iShininess) { - for(int i=0; i<4; i++) - { - Diffuse[i] = iDiffuse[i]; - Specular[i] = iSpecular[i]; - Ambient[i] = iAmbiant[i]; - Emission[i] = iEmission[i]; - } - - Shininess = iShininess; + for (int i = 0; i < 4; i++) { + Diffuse[i] = iDiffuse[i]; + Specular[i] = iSpecular[i]; + Ambient[i] = iAmbiant[i]; + Emission[i] = iEmission[i]; + } + + Shininess = iShininess; } FrsMaterial::FrsMaterial(const FrsMaterial& m) { - for(int i=0; i<4; i++) - { - Diffuse[i] = m.diffuse()[i]; - Specular[i] = m.specular()[i]; - Ambient[i] = m.ambient()[i]; - Emission[i] = m.emission()[i]; - } - - Shininess = m.shininess(); + for (int i = 0; i < 4; i++) { + Diffuse[i] = m.diffuse()[i]; + Specular[i] = m.specular()[i]; + Ambient[i] = m.ambient()[i]; + Emission[i] = m.emission()[i]; + } + + Shininess = m.shininess(); } void FrsMaterial::setDiffuse(const float r, const float g, const float b, const float a) { - Diffuse[0] = r; - Diffuse[1] = g; - Diffuse[2] = b; - Diffuse[3] = a; + Diffuse[0] = r; + Diffuse[1] = g; + Diffuse[2] = b; + Diffuse[3] = a; } void FrsMaterial::setSpecular(const float r, const float g, const float b, const float a) { - Specular[0] = r; - Specular[1] = g; - Specular[2] = b; - Specular[3] = a; + Specular[0] = r; + Specular[1] = g; + Specular[2] = b; + Specular[3] = a; } - + void FrsMaterial::setAmbient(const float r, const float g, const float b, const float a) { - Ambient[0] = r; - Ambient[1] = g; - Ambient[2] = b; - Ambient[3] = a; + Ambient[0] = r; + Ambient[1] = g; + Ambient[2] = b; + Ambient[3] = a; } void FrsMaterial::setEmission(const float r, const float g, const float b, const float a) { - Emission[0] = r; - Emission[1] = g; - Emission[2] = b; - Emission[3] = a; + Emission[0] = r; + Emission[1] = g; + Emission[2] = b; + Emission[3] = a; } void FrsMaterial::setShininess(const float s) { - Shininess = s; + Shininess = s; } FrsMaterial& FrsMaterial::operator=(const FrsMaterial& m) { - for(int i=0; i<4; i++) - { - Diffuse[i] = m.diffuse()[i]; - Specular[i] = m.specular()[i]; - Ambient[i] = m.ambient()[i]; - Emission[i] = m.emission()[i]; - } - - Shininess = m.shininess(); - - return *this; + for (int i = 0; i < 4; i++) { + Diffuse[i] = m.diffuse()[i]; + Specular[i] = m.specular()[i]; + Ambient[i] = m.ambient()[i]; + Emission[i] = m.emission()[i]; + } + + Shininess = m.shininess(); + return *this; } bool FrsMaterial::operator!=(const FrsMaterial& m) const { - if(Shininess != m.shininess()) - return true; - for(int i=0; i<4; i++) - { - if(Diffuse[i] != m.diffuse()[i]) - return true; - if(Specular[i] != m.specular()[i]) - return true; - if(Ambient[i] != m.ambient()[i]) - return true; - if(Emission[i] != m.emission()[i]) - return true; - } - - return false; + if (Shininess != m.shininess()) + return true; + + for (int i = 0; i < 4; i++) { + if (Diffuse[i] != m.diffuse()[i]) + return true; + if (Specular[i] != m.specular()[i]) + return true; + if (Ambient[i] != m.ambient()[i]) + return true; + if (Emission[i] != m.emission()[i]) + return true; + } + + return false; } bool FrsMaterial::operator==(const FrsMaterial& m) const { - return (!((*this)!=m)); + return (!((*this) != m)); } -#endif // FRS_MATERIAL_H +#endif // __FREESTYLE_MATERIAL_H__ |