MRPT  1.9.9
CLight.cpp
Go to the documentation of this file.
1 /* +------------------------------------------------------------------------+
2  | Mobile Robot Programming Toolkit (MRPT) |
3  | https://www.mrpt.org/ |
4  | |
5  | Copyright (c) 2005-2019, Individual contributors, see AUTHORS file |
6  | See: https://www.mrpt.org/Authors - All rights reserved. |
7  | Released under BSD License. See: https://www.mrpt.org/License |
8  +------------------------------------------------------------------------+ */
9 
10 #include "opengl-precomp.h" // Precompiled header
11 
12 #include <mrpt/opengl/CLight.h>
14 
15 #include "opengl_internals.h"
16 
17 using namespace mrpt;
18 using namespace mrpt::opengl;
19 using namespace std;
20 
21 // Ctor:
23 
24 {
25  color_ambient[0] = 0.05f;
26  color_ambient[1] = 0.05f;
27  color_ambient[2] = 0.05f;
28  color_ambient[3] = 1.f;
29 
30  color_diffuse[0] = 0.7f;
31  color_diffuse[1] = 0.7f;
32  color_diffuse[2] = 0.7f;
33  color_diffuse[3] = 1.f;
34 
35  color_specular[0] = 0.05f;
36  color_specular[1] = 0.05f;
37  color_specular[2] = 0.05f;
38  color_specular[3] = 1.f;
39 
40  setPosition(0, 0, 1, 0);
41  setDirection(0, 0, -1);
42 }
43 
45 {
46  const uint8_t version = 0;
47  out << version;
48 
49  out << light_ID << color_ambient[0] << color_ambient[1] << color_ambient[2]
50  << color_ambient[3] << color_diffuse[0] << color_diffuse[1]
51  << color_diffuse[2] << color_diffuse[3] << color_specular[0]
52  << color_specular[1] << color_specular[2] << color_specular[3]
53  << position[0] << position[1] << position[2] << position[3]
54  << direction[0] << direction[1] << direction[2] << constant_attenuation
55  << linear_attenuation << quadratic_attenuation << spot_exponent
56  << spot_cutoff;
57 }
58 
60 {
61  uint8_t version;
62  in >> version;
63 
64  switch (version)
65  {
66  case 0:
67  in >> light_ID >> color_ambient[0] >> color_ambient[1] >>
68  color_ambient[2] >> color_ambient[3] >> color_diffuse[0] >>
69  color_diffuse[1] >> color_diffuse[2] >> color_diffuse[3] >>
70  color_specular[0] >> color_specular[1] >> color_specular[2] >>
71  color_specular[3] >> position[0] >> position[1] >>
72  position[2] >> position[3] >> direction[0] >> direction[1] >>
73  direction[2] >> constant_attenuation >> linear_attenuation >>
74  quadratic_attenuation >> spot_exponent >> spot_cutoff;
75  break;
76  default:
78  };
79 }
80 
82 {
83 #if MRPT_HAS_OPENGL_GLUT
84  const auto id = (GLenum)((int)GL_LIGHT0 + light_ID);
85 
86  glEnable(id);
87 
88  glLightfv(id, GL_AMBIENT, color_ambient);
89  glLightfv(id, GL_DIFFUSE, color_diffuse);
90  glLightfv(id, GL_SPECULAR, color_specular);
91  glLightfv(id, GL_POSITION, position);
92  glLightfv(id, GL_SPOT_DIRECTION, direction);
93  glLightf(id, GL_SPOT_EXPONENT, spot_exponent);
94  glLightf(id, GL_SPOT_CUTOFF, spot_cutoff);
95  glLightf(id, GL_CONSTANT_ATTENUATION, constant_attenuation);
96  glLightf(id, GL_LINEAR_ATTENUATION, linear_attenuation);
97  glLightf(id, GL_QUADRATIC_ATTENUATION, quadratic_attenuation);
98 #endif
99 }
100 
101 void CLight::setPosition(float x, float y, float z, float w)
102 {
103  position[0] = x;
104  position[1] = y;
105  position[2] = z;
106  position[3] = w;
107 }
108 void CLight::setDirection(float dx, float dy, float dz)
109 {
110  direction[0] = dx;
111  direction[1] = dy;
112  direction[2] = dz;
113 }
114 
115 namespace mrpt::opengl
116 {
119 {
120  o.readFromStream(in);
121  return in;
122 }
125 {
126  o.writeToStream(out);
127  return out;
128 }
129 } // namespace mrpt::opengl
#define GL_SPECULAR
Definition: glew.h:581
GLdouble GLdouble z
Definition: glext.h:3879
#define GL_SPOT_EXPONENT
Definition: glew.h:584
GLAPI void GLAPIENTRY glEnable(GLenum cap)
#define GL_LINEAR_ATTENUATION
Definition: glew.h:587
mrpt::serialization::CArchive & operator<<(mrpt::serialization::CArchive &out, const mrpt::opengl::CLight &o)
Definition: CLight.cpp:123
CLight()
Default constructor, sets default values.
Definition: CLight.cpp:22
STL namespace.
void readFromStream(mrpt::serialization::CArchive &in)
Definition: CLight.cpp:59
void sendToOpenGL() const
Define the light in the current OpenGL rendering context (users normally don&#39;t need to call this expl...
Definition: CLight.cpp:81
#define GL_POSITION
Definition: glew.h:582
void writeToStream(mrpt::serialization::CArchive &out) const
Definition: CLight.cpp:44
#define GL_LIGHT0
Definition: glew.h:571
GLubyte GLubyte GLubyte GLubyte w
Definition: glext.h:4199
Each of the possible lights of a 3D scene.
Definition: CLight.h:22
unsigned char uint8_t
Definition: rptypes.h:44
#define MRPT_THROW_UNKNOWN_SERIALIZATION_VERSION(__V)
For use in CSerializable implementations.
Definition: exceptions.h:97
#define GL_DIFFUSE
Definition: glew.h:580
GLAPI void GLAPIENTRY glLightf(GLenum light, GLenum pname, GLfloat param)
unsigned int GLenum
Definition: glew.h:207
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
#define GL_SPOT_CUTOFF
Definition: glew.h:585
Virtual base class for "archives": classes abstracting I/O streams.
Definition: CArchive.h:53
GLAPI void GLAPIENTRY glLightfv(GLenum light, GLenum pname, const GLfloat *params)
GLuint in
Definition: glext.h:7391
The namespace for 3D scene representation and rendering.
Definition: CGlCanvasBase.h:15
mrpt::serialization::CArchive & operator>>(mrpt::serialization::CArchive &in, mrpt::opengl::CLight &o)
Definition: CLight.cpp:117
GLenum GLint GLint y
Definition: glext.h:3542
#define GL_CONSTANT_ATTENUATION
Definition: glew.h:586
GLenum GLint x
Definition: glext.h:3542
void setPosition(float x, float y, float z, float w)
Definition: CLight.cpp:101
#define GL_AMBIENT
Definition: glew.h:579
void setDirection(float dx, float dy, float dz)
Definition: CLight.cpp:108
#define GL_SPOT_DIRECTION
Definition: glew.h:583
#define GL_QUADRATIC_ATTENUATION
Definition: glew.h:588



Page generated by Doxygen 1.8.14 for MRPT 1.9.9 Git: 8fe78517f Sun Jul 14 19:43:28 2019 +0200 at lun oct 28 02:10:00 CET 2019