243 lines
7.9 KiB
C++
243 lines
7.9 KiB
C++
/*
|
|
* Copyright (C) 2012 Open Source Robotics Foundation
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
*/
|
|
#ifndef _MATERIAL_HH_
|
|
#define _MATERIAL_HH_
|
|
|
|
#include <string>
|
|
#include <iostream>
|
|
#include "gazebo/common/Color.hh"
|
|
#include "gazebo/util/system.hh"
|
|
|
|
namespace gazebo
|
|
{
|
|
namespace common
|
|
{
|
|
/// \addtogroup gazebo_common Common
|
|
/// \{
|
|
|
|
/// \class Material Material.hh common/common.hh
|
|
/// \brief Encapsulates description of a material
|
|
class GZ_COMMON_VISIBLE Material
|
|
{
|
|
public: enum ShadeMode {FLAT, GOURAUD, PHONG, BLINN, SHADE_COUNT};
|
|
public: static std::string ShadeModeStr[SHADE_COUNT];
|
|
|
|
public: enum BlendMode {ADD, MODULATE, REPLACE, BLEND_COUNT};
|
|
public: static std::string BlendModeStr[BLEND_COUNT];
|
|
|
|
/// \brief Constructor
|
|
public: Material();
|
|
|
|
/// \brief Destructor
|
|
public: virtual ~Material();
|
|
|
|
/// \brief Create a material with a default color
|
|
/// \param[in] _clr Color of the material
|
|
public: Material(const Color &_clr);
|
|
|
|
/// \brief Get the name of the material
|
|
/// \return The name of the material
|
|
public: std::string GetName() const;
|
|
|
|
/// \brief Set a texture image
|
|
/// \param[in] _tex The name of the texture, which must be in Gazebo's
|
|
/// resource path
|
|
public: void SetTextureImage(const std::string &_tex);
|
|
|
|
/// \brief Set a texture image
|
|
/// \param[in] _tex The name of the texture
|
|
/// \param[in] _resourcePath Path which contains _tex
|
|
public: void SetTextureImage(const std::string &_tex,
|
|
const std::string &_resourcePath);
|
|
|
|
/// \brief Get a texture image
|
|
/// \return The name of the texture image (if one exists) or an empty
|
|
/// string
|
|
public: std::string GetTextureImage() const;
|
|
|
|
/// \brief Set the ambient color
|
|
/// \param[in] _clr The ambient color
|
|
public: void SetAmbient(const Color &_clr);
|
|
|
|
/// \brief Get the ambient color
|
|
/// \return The ambient color
|
|
public: Color GetAmbient() const;
|
|
|
|
/// \brief Set the diffuse color
|
|
/// \param[in] _clr The diffuse color
|
|
public: void SetDiffuse(const Color &_clr);
|
|
|
|
/// \brief Get the diffuse color
|
|
/// \return The diffuse color
|
|
public: Color GetDiffuse() const;
|
|
|
|
/// \brief Set the specular color
|
|
/// \param[in] _clr The specular color
|
|
public: void SetSpecular(const Color &_clr);
|
|
|
|
/// \brief Get the specular color
|
|
/// \return The specular color
|
|
public: Color GetSpecular() const;
|
|
|
|
/// \brief Set the emissive color
|
|
/// \param[in] _clr The emissive color
|
|
public: void SetEmissive(const Color &_clr);
|
|
|
|
/// \brief Get the emissive color
|
|
/// \return The emissive color
|
|
public: Color GetEmissive() const;
|
|
|
|
/// \brief Set the transparency percentage (0..1)
|
|
/// \param[in] _t The amount of transparency (0..1)
|
|
public: void SetTransparency(double _t);
|
|
|
|
/// \brief Get the transparency percentage (0..1)
|
|
/// \return The transparency percentage
|
|
public: double GetTransparency() const;
|
|
|
|
/// \brief Set the shininess
|
|
/// \param[in] _t The shininess value
|
|
public: void SetShininess(double _t);
|
|
|
|
/// \brief Get the shininess
|
|
/// \return The shininess value
|
|
public: double GetShininess() const;
|
|
|
|
/// \brief Set the blende factors. Will be interpreted as:
|
|
/// (texture * _srcFactor) + (scene_pixel * _dstFactor)
|
|
/// \param[in] _srcFactor The source factor
|
|
/// \param[in] _dstFactor The destination factor
|
|
public: void SetBlendFactors(double _srcFactor, double _dstFactor);
|
|
|
|
/// \brief Get the blend factors
|
|
/// \param[in] _srcFactor Source factor is returned in this variable
|
|
/// \param[in] _dstFactor Destination factor is returned in this variable
|
|
public: void GetBlendFactors(double &_srcFactor, double &_dstFactor);
|
|
|
|
/// \brief Set the blending mode
|
|
/// \param[in] _b the blend mode
|
|
public: void SetBlendMode(BlendMode _b);
|
|
|
|
/// \brief Get the blending mode
|
|
/// \return the blend mode
|
|
public: BlendMode GetBlendMode() const;
|
|
|
|
/// \brief Set the shading mode
|
|
/// param[in] the shading mode
|
|
public: void SetShadeMode(ShadeMode _b);
|
|
|
|
/// \brief Get the shading mode
|
|
/// \return the shading mode
|
|
public: ShadeMode GetShadeMode() const;
|
|
|
|
/// \brief Set the point size
|
|
/// \param[in] _size the size
|
|
public: void SetPointSize(double _size);
|
|
|
|
/// \brief Get the point size
|
|
/// \return the point size
|
|
public: double GetPointSize() const;
|
|
|
|
/// \brief Set depth write
|
|
/// \param[in] _value the depth write enabled state
|
|
public: void SetDepthWrite(bool _value);
|
|
|
|
/// \brief Get depth write
|
|
/// \return the depth write enabled state
|
|
public: bool GetDepthWrite() const;
|
|
|
|
/// \brief Set lighting enabled
|
|
/// \param[in] _value the lighting enabled state
|
|
public: void SetLighting(bool _value);
|
|
|
|
/// \brief Get lighting enabled
|
|
/// \return the lighting enabled state
|
|
public: bool GetLighting() const;
|
|
|
|
/// \brief Stream insertion operator
|
|
/// param[in] _out the output stream to extract from
|
|
/// param[out] _m the material information
|
|
public: friend std::ostream &operator<<(std::ostream &_out,
|
|
const gazebo::common::Material &_m)
|
|
{
|
|
_out << "Material:\n";
|
|
_out << " Name: " << _m.name << "\n";
|
|
_out << " Texture: " << _m.texImage << "\n";
|
|
_out << " Ambient: " << _m.ambient << "\n";
|
|
_out << " Diffuse: " << _m.diffuse << "\n";
|
|
_out << " Specular: " << _m.specular << "\n";
|
|
_out << " Emissive: " << _m.emissive << "\n";
|
|
_out << " Transparency: " << _m.transparency << "\n";
|
|
_out << " Shininess: " << _m.shininess << "\n";
|
|
_out << " BlendMode: " << BlendModeStr[_m.blendMode] << "\n";
|
|
_out << " ShadeMode: " << ShadeModeStr[_m.shadeMode] << "\n";
|
|
_out << " DepthWrite: " << _m.depthWrite << "\n";
|
|
return _out;
|
|
}
|
|
|
|
/// \brief the name of the material
|
|
protected: std::string name;
|
|
|
|
/// \brief the texture image file name
|
|
protected: std::string texImage;
|
|
|
|
/// \brief the ambient light color
|
|
protected: Color ambient;
|
|
|
|
/// \brief the diffuse ligth color
|
|
protected: Color diffuse;
|
|
|
|
/// \brief the specular light color
|
|
protected: Color specular;
|
|
|
|
/// \brief the emissive light color
|
|
protected: Color emissive;
|
|
|
|
/// \brief transparency value in the range 0 to 1
|
|
protected: double transparency;
|
|
|
|
/// \brief shininess value (0 to 1)
|
|
protected: double shininess;
|
|
|
|
/// \brief point size
|
|
protected: double pointSize;
|
|
|
|
/// \brief blend mode
|
|
protected: BlendMode blendMode;
|
|
|
|
/// \brief the shade mode
|
|
protected: ShadeMode shadeMode;
|
|
|
|
/// \brief the total number of instanciated Material instances
|
|
private: static unsigned int counter;
|
|
|
|
/// \brief flag to perform depth buffer write
|
|
private: bool depthWrite;
|
|
|
|
private: bool lighting;
|
|
|
|
/// \brief source blend factor
|
|
private: double srcBlendFactor;
|
|
|
|
/// \brief destination blend factor
|
|
private: double dstBlendFactor;
|
|
};
|
|
/// \}
|
|
}
|
|
}
|
|
#endif
|