gKit2 light
Public Member Functions | Protected Attributes | List of all members
Envmap Struct Reference

representation d'une cubemap / envmap. More...

#include <envmap.h>

Public Member Functions

 Envmap (const int size)
 
 Envmap (const Image &image)
 extrait les 6 faces d'une image. More...
 
 Envmap (const std::array< Image, 6 > &faces)
 utilise les 6 faces. More...
 
int width () const
 largeur d'une face. More...
 
int height () const
 hauteur d'une face. More...
 
bool empty () const
 renvoie vrai si la cubemap est initialisee. More...
 
void linear (const float gamma=2.2f)
 applique une correction gamma inverse aux donnees de la cubemap. More...
 
void gamma (const float gamma=2.2f)
 applique une correction gamma aux donnees de la cubemap. More...
 
Image cross () const
 renvoie une image contenant les 6 faces de la cubemap. More...
 
std::array< Image, 6 > faces () const
 renvoie les 6 faces de la cubemap. More...
 
Coloroperator() (const int face, const int x, const int y)
 
Color operator() (const int face, const int x, const int y) const
 
Color texture (const Vector &d) const
 renvoie la couleur de la cubemap dans la direction d, utilise les memes conventions qu'openGL / Renderman. More...
 
Vector envmap_pixel (const Vector &d)
 
Vector envmap_texel (const Vector &d)
 
Vector envmap_pixel_direction (const Vector &d)
 
Vector envmap_texel_direction (const Vector &d)
 
Vector envmap_texel_direction (const int face, const float s, const float t)
 

Protected Attributes

std::array< Image, 6 > m_faces
 
int m_width
 

Detailed Description

representation d'une cubemap / envmap.

Definition at line 12 of file envmap.h.

Constructor & Destructor Documentation

◆ Envmap() [1/2]

Envmap::Envmap ( const Image image)
inline

extrait les 6 faces d'une image.

Definition at line 23 of file envmap.h.

23  : m_faces(), m_width(0)
24  {
25  int w= image.width() / 4;
26  int h= image.height() / 3;
27  if(w != h)
28  return;
29 
30  m_width= w;
31 
32  // chaque face de la cubemap est un carre [image.width/4 x image.height/3] dans l'image originale
33  struct { int x, y; } faces[]= {
34  {0, 1}, // X+
35  {2, 1}, // X-
36  {1, 2}, // Y+
37  {1, 0}, // Y-
38  {1, 1}, // Z+
39  {3, 1}, // Z-
40  };
41 
42  for(int i= 0; i < 6; i++)
43  m_faces[i]= flipX(flipY(copy(image, faces[i].x*w, faces[i].y*h, w, h)));
44  }
int height() const
renvoie la hauteur de l'image.
Definition: image.h:100
int width() const
renvoie la largeur de l'image.
Definition: image.h:98
Image flipY(const Image &image)
retourne l'image
Definition: image_io.cpp:295
Image flipX(const Image &image)
retourne l'image
Definition: image_io.cpp:312
Image copy(const Image &image, const int xmin, const int ymin, const int width, const int height)
renvoie un bloc de l'image
Definition: image_io.cpp:328
std::array< Image, 6 > faces() const
renvoie les 6 faces de la cubemap.
Definition: envmap.h:117

◆ Envmap() [2/2]

Envmap::Envmap ( const std::array< Image, 6 > &  faces)
inline

utilise les 6 faces.

Definition at line 47 of file envmap.h.

47  : m_faces()
48  {
49  for(int i= 0; i < 6; i++)
50  m_faces[i]= flipX(flipY(faces[i]));
51 
52  m_width= m_faces[0].width();
53  for(int i= 0; i < 6; i++)
54  if(m_width != m_faces[i].width() || m_width != m_faces[i].height())
55  m_width= 0;
56  }
int height() const
hauteur d'une face.
Definition: envmap.h:59
int width() const
largeur d'une face.
Definition: envmap.h:58

Member Function Documentation

◆ width()

int Envmap::width ( ) const
inline

largeur d'une face.

Definition at line 58 of file envmap.h.

◆ height()

int Envmap::height ( ) const
inline

hauteur d'une face.

Definition at line 59 of file envmap.h.

◆ empty()

bool Envmap::empty ( ) const
inline

renvoie vrai si la cubemap est initialisee.

Definition at line 60 of file envmap.h.

◆ linear()

void Envmap::linear ( const float  gamma = 2.2f)
inline

applique une correction gamma inverse aux donnees de la cubemap.

Definition at line 63 of file envmap.h.

64  {
65  for(int i= 0; i < 6; i++)
66  for(int p= 0; p < int(m_faces[i].size()); p++)
67  {
68  Color pixel= m_faces[i](p);
69  m_faces[i](p)= Color(std::pow(pixel.r, gamma), std::pow(pixel.g, gamma), std::pow(pixel.b, gamma));
70  }
71  }
representation d'une couleur (rgba) transparente ou opaque.
Definition: color.h:14
void gamma(const float gamma=2.2f)
applique une correction gamma aux donnees de la cubemap.
Definition: envmap.h:74

◆ gamma()

void Envmap::gamma ( const float  gamma = 2.2f)
inline

applique une correction gamma aux donnees de la cubemap.

Definition at line 74 of file envmap.h.

75  {
76  for(int i= 0; i < 6; i++)
77  for(int p= 0; p < int(m_faces[i].size()); p++)
78  {
79  Color pixel= m_faces[i](p);
80  m_faces[i](p)= Color(std::pow(pixel.r, 1 / gamma), std::pow(pixel.g, 1 / gamma), std::pow(pixel.b, 1 / gamma));
81  }
82  }

◆ cross()

Image Envmap::cross ( ) const
inline

renvoie une image contenant les 6 faces de la cubemap.

Definition at line 85 of file envmap.h.

86  {
87  if(empty())
88  return Image();
89 
90  // chaque face de la cubemap est un carre [image.width/4 x image.height/3] dans l'image originale
91  struct { int x, y; } faces[]= {
92  {0, 1}, // X+
93  {2, 1}, // X-
94  {1, 2}, // Y+
95  {1, 0}, // Y-
96  {1, 1}, // Z+
97  {3, 1}, // Z-
98  };
99 
100  // 3 lignes de 4 colonnes
101  Image image(4*width(), 3*height());
102  for(int i= 0; i < 6; i++)
103  {
104  Image face= flipY(flipX(m_faces[i]));
105 
106  int xmin= faces[i].x*width();
107  int ymin= faces[i].y*height();
108  for(int y= 0; y < height(); y++)
109  for(int x= 0; x < width(); x++)
110  image(xmin+x, ymin+y)= face(x, y);
111  }
112 
113  return image;
114  }
representation d'une image.
Definition: image.h:21
bool empty() const
renvoie vrai si la cubemap est initialisee.
Definition: envmap.h:60

◆ faces()

std::array<Image, 6> Envmap::faces ( ) const
inline

renvoie les 6 faces de la cubemap.

Definition at line 117 of file envmap.h.

118  {
119  if(empty())
120  return std::array<Image, 6>();
121 
122  std::array<Image, 6> faces;
123  for(int i= 0; i < 6; i++)
124  faces[i]= flipY(flipX(m_faces[i]));
125 
126  return faces;
127  }

◆ texture()

Color Envmap::texture ( const Vector d) const
inline

renvoie la couleur de la cubemap dans la direction d, utilise les memes conventions qu'openGL / Renderman.

Definition at line 140 of file envmap.h.

141  {
142  // reproduit la convention opengl / renderman
143  // cf https://www.khronos.org/registry/OpenGL/specs/gl/glspec46.core.pdf#section.8.13
144 
145  float sm, tm;
146  int face= -1;
147  Vector m= Vector(std::abs(d.x), std::abs(d.y), std::abs(d.z));
148  if(m.x > m.y && m.x > m.z)
149  {
150  // X
151  if(d.x > 0)
152  {
153  face= 0;
154  sm= -d.z / m.x;
155  tm= -d.y / m.x;
156  }
157  else
158  {
159  face= 1;
160  sm= d.z / m.x;
161  tm= -d.y / m.x;
162  }
163  }
164  else if(m.y > m.z)
165  {
166  // Y
167  if(d.y > 0)
168  {
169  face= 2;
170  sm= d.x / m.y;
171  tm= d.z / m.y;
172  }
173  else
174  {
175  face= 3;
176  sm= d.x / m.y;
177  tm= -d.z / m.y;
178  }
179  }
180  else
181  {
182  // Z
183  if(d.z > 0)
184  {
185  face= 4;
186  sm= d.x / m.z;
187  tm= -d.y / m.z;
188  }
189  else
190  {
191  face= 5;
192  sm= -d.x / m.z;
193  tm= -d.y / m.z;
194  }
195  }
196 
197  assert(face != -1);
198  float s= (sm +1) / 2;
199  float t= (tm +1) / 2;
200  return m_faces[face].texture(s, t);
201  }
representation d'un vecteur 3d.
Definition: vec.h:59

The documentation for this struct was generated from the following file: