openscenegraph
Material
Go to the documentation of this file.
1/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2004 Robert Osfield
2 *
3 * This library is open source and may be redistributed and/or modified under
4 * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
5 * (at your option) any later version. The full license is in LICENSE file
6 * included with this distribution, and on the openscenegraph.org website.
7 *
8 * This library is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * OpenSceneGraph Public License for more details.
12*/
13
14#ifndef OSG_MATERIAL
15#define OSG_MATERIAL 1
16
17#include <osg/Vec4>
18#include <osg/StateAttribute>
19
20#ifndef OSG_GL_FIXED_FUNCTION_AVAILABLE
21 #define GL_AMBIENT 0x1200
22 #define GL_DIFFUSE 0x1201
23 #define GL_SPECULAR 0x1202
24 #define GL_EMISSION 0x1600
25 #define GL_AMBIENT_AND_DIFFUSE 0x1602
26 #define GL_COLOR_MATERIAL 0x0B57
27#endif
28
29namespace osg {
32{
33 public :
34
36
38 Material(const Material& mat,const CopyOp& copyop=CopyOp::SHALLOW_COPY):
39 StateAttribute(mat,copyop),
40 _colorMode(mat._colorMode),
41 _ambientFrontAndBack(mat._ambientFrontAndBack),
42 _ambientFront(mat._ambientFront),
43 _ambientBack(mat._ambientBack),
44 _diffuseFrontAndBack(mat._diffuseFrontAndBack),
45 _diffuseFront(mat._diffuseFront),
46 _diffuseBack(mat._diffuseBack),
47 _specularFrontAndBack(mat._specularFrontAndBack),
48 _specularFront(mat._specularFront),
49 _specularBack(mat._specularBack),
50 _emissionFrontAndBack(mat._emissionFrontAndBack),
51 _emissionFront(mat._emissionFront),
52 _emissionBack(mat._emissionBack),
53 _shininessFrontAndBack(mat._shininessFrontAndBack),
54 _shininessFront(mat._shininessFront),
55 _shininessBack(mat._shininessBack) {}
56
58
60 virtual int compare(const StateAttribute& sa) const
61 {
62 // check the types are equal and then create the rhs variable
63 // used by the COMPARE_StateAttribute_Parameter macros below.
65
66 // compare each parameter in turn against the rhs.
68 COMPARE_StateAttribute_Parameter(_ambientFrontAndBack)
71 COMPARE_StateAttribute_Parameter(_diffuseFrontAndBack)
74 COMPARE_StateAttribute_Parameter(_specularFrontAndBack)
77 COMPARE_StateAttribute_Parameter(_emissionFrontAndBack)
80 COMPARE_StateAttribute_Parameter(_shininessFrontAndBack)
83
84 return 0; // passed all the above comparison macros, must be equal.
85 }
86
87 Material& operator = (const Material& rhs);
88
89 virtual bool getModeUsage(StateAttribute::ModeUsage& /*usage*/) const
90 {
91 // note, since Material does it's own glEnable/glDisable of GL_COLOR_MATERIAL
92 // we shouldn't declare usage of that mode, so commenting out the below usage.
93 // usage.usesMode(GL_COLOR_MATERIAL);
94 return true;
95 }
96
97 virtual void apply(State& state) const;
98
99 enum Face {
100 FRONT = GL_FRONT,
101 BACK = GL_BACK,
102 FRONT_AND_BACK = GL_FRONT_AND_BACK
103 };
104
106 AMBIENT = GL_AMBIENT,
107 DIFFUSE = GL_DIFFUSE,
108 SPECULAR = GL_SPECULAR,
109 EMISSION = GL_EMISSION,
110 AMBIENT_AND_DIFFUSE = GL_AMBIENT_AND_DIFFUSE,
111 OFF
112 };
113
114 inline void setColorMode(ColorMode mode) { _colorMode = mode; }
115 inline ColorMode getColorMode() const { return _colorMode; }
116
117 void setAmbient( Face face, const Vec4& ambient );
118 const Vec4& getAmbient(Face face) const;
119 inline bool getAmbientFrontAndBack() const { return _ambientFrontAndBack; }
120
121 void setDiffuse( Face face, const Vec4& diffuse );
122 const Vec4& getDiffuse(Face face) const;
123 inline bool getDiffuseFrontAndBack() const { return _diffuseFrontAndBack; }
124
128 void setSpecular( Face face, const Vec4& specular );
129
131 const Vec4& getSpecular(Face face) const;
132
136 inline bool getSpecularFrontAndBack() const { return _specularFrontAndBack; }
137
141 void setEmission( Face face, const Vec4& emission );
142
144 const Vec4& getEmission(Face face) const;
145
149 inline bool getEmissionFrontAndBack() const { return _emissionFrontAndBack; }
150
154 void setShininess(Face face, float shininess );
155
157 float getShininess(Face face) const;
158
162 inline bool getShininessFrontAndBack() const { return _shininessFrontAndBack; }
163
168 void setTransparency(Face face,float trans);
169
173 void setAlpha(Face face,float alpha);
174
175 protected :
176
177 virtual ~Material();
178
180
182 Vec4 _ambientFront; // r, g, b, w
183 Vec4 _ambientBack; // r, g, b, w
184
186 Vec4 _diffuseFront; // r, g, b, w
187 Vec4 _diffuseBack; // r, g, b, w
188
190 Vec4 _specularFront; // r, g, b, w
191 Vec4 _specularBack; // r, g, b, w
192
194 Vec4 _emissionFront; // r, g, b, w
195 Vec4 _emissionBack; // r, g, b, w
196
198 float _shininessFront; // values 0 - 128.0
199 float _shininessBack; // values 0 - 128.0
200
201};
202
203}
204
205#endif
#define GL_DIFFUSE
Definition Material:22
#define GL_AMBIENT_AND_DIFFUSE
Definition Material:25
#define GL_SPECULAR
Definition Material:23
#define GL_AMBIENT
Definition Material:21
#define GL_EMISSION
Definition Material:24
#define COMPARE_StateAttribute_Parameter(parameter)
Definition StateAttribute:69
#define COMPARE_StateAttribute_Types(TYPE, rhs_attribute)
Definition StateAttribute:57
Definition CopyOp:41
Definition Material:32
Vec4 _ambientBack
Definition Material:183
virtual void apply(State &state) const
Vec4 _diffuseFront
Definition Material:186
bool _emissionFrontAndBack
Definition Material:193
bool getAmbientFrontAndBack() const
Definition Material:119
bool getDiffuseFrontAndBack() const
Definition Material:123
float getShininess(Face face) const
const Vec4 & getDiffuse(Face face) const
void setTransparency(Face face, float trans)
virtual ~Material()
void setAlpha(Face face, float alpha)
bool _ambientFrontAndBack
Definition Material:181
bool getSpecularFrontAndBack() const
Definition Material:136
Vec4 _ambientFront
Definition Material:182
void setSpecular(Face face, const Vec4 &specular)
bool _shininessFrontAndBack
Definition Material:197
Vec4 _emissionFront
Definition Material:194
ColorMode _colorMode
Definition Material:179
Face
Definition Material:99
Vec4 _diffuseBack
Definition Material:187
ColorMode getColorMode() const
Definition Material:115
const Vec4 & getAmbient(Face face) const
void setShininess(Face face, float shininess)
Vec4 _specularFront
Definition Material:190
bool getEmissionFrontAndBack() const
Definition Material:149
bool getShininessFrontAndBack() const
Definition Material:162
Vec4 _emissionBack
Definition Material:195
virtual bool getModeUsage(StateAttribute::ModeUsage &) const
Definition Material:89
void setEmission(Face face, const Vec4 &emission)
ColorMode
Definition Material:105
virtual int compare(const StateAttribute &sa) const
Definition Material:60
const Vec4 & getSpecular(Face face) const
bool _diffuseFrontAndBack
Definition Material:185
const Vec4 & getEmission(Face face) const
bool _specularFrontAndBack
Definition Material:189
void setColorMode(ColorMode mode)
Definition Material:114
void setDiffuse(Face face, const Vec4 &diffuse)
void setAmbient(Face face, const Vec4 &ambient)
Material(const Material &mat, const CopyOp &copyop=CopyOp::SHALLOW_COPY)
Definition Material:38
float _shininessFront
Definition Material:198
META_StateAttribute(osg, Material, MATERIAL)
float _shininessBack
Definition Material:199
Vec4 _specularBack
Definition Material:191
Definition StateAttribute:77
Definition State:80
Definition Vec4f:28
author: Julien Valentin 2017 (mp3butcher@hotmail.com)
Definition AlphaFunc:19
#define OSG_EXPORT
Definition osg/Export:39
Definition StateAttribute:308