scg3  0.6
Light.h
Go to the documentation of this file.
1 
9 /*
10  * Copyright 2014 Volker Ahlers
11  *
12  * Licensed under the Apache License, Version 2.0 (the "License");
13  * you may not use this file except in compliance with the License.
14  * You may obtain a copy of the License at
15  *
16  * http://www.apache.org/licenses/LICENSE-2.0
17  *
18  * Unless required by applicable law or agreed to in writing, software
19  * distributed under the License is distributed on an "AS IS" BASIS,
20  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21  * See the License for the specific language governing permissions and
22  * limitations under the License.
23  */
24 
25 #ifndef LIGHT_H_
26 #define LIGHT_H_
27 
28 #include "Composite.h"
29 #include "scg_glm.h"
30 #include "scg_internals.h"
31 
32 namespace scg {
33 
34 
54 class Light: public Composite {
55 
56 public:
57 
61  Light();
62 
66  virtual ~Light();
67 
71  static LightSP create();
72 
79  Light* setPosition(const glm::vec4& position);
80 
85  Light* setAmbient(const glm::vec4& color);
86 
91  Light* setDiffuse(const glm::vec4& color);
92 
97  Light* setSpecular(const glm::vec4& color);
98 
103  Light* setDiffuseAndSpecular(const glm::vec4& color);
104 
116  Light* setSpot(const glm::vec3& direction, float cutoffDeg, float exponent);
117 
122  void setModelTransform(const glm::mat4 modelTransform);
123 
127  void init();
128 
132  virtual void accept(Traverser* traverser);
133 
137  virtual void acceptPost(Traverser* traverser);
138 
142  virtual void render(RenderState* renderState);
143 
147  virtual void renderPost(RenderState* renderState);
148 
149 public:
150 
151  // parameters for uniform buffer object (UBO)
152  static const size_t FLOAT_SIZE = 4;
153  static const size_t VEC4_SIZE = 16;
154  static const size_t POSITION_OFFSET = 0;
155  static const size_t AMBIENT_OFFSET = 16;
156  static const size_t DIFFUSE_OFFSET = 32;
157  static const size_t SPECULAR_OFFSET = 48;
158  static const size_t HALF_VECTOR_OFFSET = 64;
159  static const size_t SPOT_DIRECTION_OFFSET = 80;
160  static const size_t SPOT_COS_CUTOFF_OFFSET = 96;
161  static const size_t SPOT_EXPONENT_OFFSET = 100;
162  static const size_t BUFFER_SIZE = 112;
163 
164 protected:
165 
166  GLuint ubo_; // uniform buffer object
167  glm::vec4 position_;
168  glm::vec4 ambient_;
169  glm::vec4 diffuse_;
170  glm::vec4 specular_;
171  glm::vec4 spotDirection_;
174  glm::mat4 modelTransform_;
175 
176 };
177 
178 
179 } /* namespace scg */
180 
181 #endif /* LIGHT_H_ */
glm::vec4 position_
Definition: Light.h:167
Light * setPosition(const glm::vec4 &position)
glm::vec4 diffuse_
Definition: Light.h:169
Base class for all composite nodes, i.e., nodes with children (composite pattern, abstract).
glm::mat4 modelTransform_
Definition: Light.h:174
static const size_t AMBIENT_OFFSET
Definition: Light.h:155
void setModelTransform(const glm::mat4 modelTransform)
static const size_t DIFFUSE_OFFSET
Definition: Light.h:156
Local header file for GLM OpenGL Mathematics library.
Base class for all composite nodes, i.e., nodes with children (composite pattern, abstract).
Definition: Composite.h:37
glm::vec4 spotDirection_
Definition: Light.h:171
Light * setSpot(const glm::vec3 &direction, float cutoffDeg, float exponent)
A light to be applied to all nodes of its sub-tree (composite node).
Definition: Light.h:54
Light * setAmbient(const glm::vec4 &color)
static const size_t BUFFER_SIZE
Definition: Light.h:162
Light * setDiffuse(const glm::vec4 &color)
static const size_t POSITION_OFFSET
Definition: Light.h:154
static const size_t FLOAT_SIZE
Definition: Light.h:152
float spotExponent_
Definition: Light.h:173
Base class for all traversers (visitor pattern, abstract).
Definition: Traverser.h:36
static const size_t SPOT_COS_CUTOFF_OFFSET
Definition: Light.h:160
virtual void render(RenderState *renderState)
GLuint ubo_
Definition: Light.h:166
glm::vec4 specular_
Definition: Light.h:170
virtual void acceptPost(Traverser *traverser)
void init()
Light * setSpecular(const glm::vec4 &color)
static const size_t SPOT_DIRECTION_OFFSET
Definition: Light.h:159
static const size_t VEC4_SIZE
Definition: Light.h:153
The central render state that collects information about the current shader, transformations,...
Definition: RenderState.h:107
static const size_t SPOT_EXPONENT_OFFSET
Definition: Light.h:161
virtual void accept(Traverser *traverser)
float spotCosCutoff_
Definition: Light.h:172
virtual ~Light()
Definition: Animation.h:28
Internal definitions required by most classes.
virtual void renderPost(RenderState *renderState)
glm::vec4 ambient_
Definition: Light.h:168
static LightSP create()
static const size_t SPECULAR_OFFSET
Definition: Light.h:157
static const size_t HALF_VECTOR_OFFSET
Definition: Light.h:158
Light * setDiffuseAndSpecular(const glm::vec4 &color)