14 Envmap( ) : m_faces(), m_width(0) {}
16 Envmap(
const int size ) : m_faces(), m_width(size)
18 for(
int i= 0; i < 6; i++)
19 m_faces[i]=
Image(size, size);
25 int w= image.
width() / 4;
33 struct {
int x, y; }
faces[]= {
42 for(
int i= 0; i < 6; i++)
49 for(
int i= 0; i < 6; i++)
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())
58 int width( )
const {
return m_width; }
59 int height( )
const {
return m_width; }
60 bool empty()
const {
return m_width == 0; }
65 for(
int i= 0; i < 6; i++)
66 for(
int p= 0; p < int(m_faces[i].size()); p++)
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));
76 for(
int i= 0; i < 6; i++)
77 for(
int p= 0; p < int(m_faces[i].size()); p++)
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));
91 struct {
int x, y; }
faces[]= {
102 for(
int i= 0; i < 6; i++)
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);
120 return std::array<Image, 6>();
122 std::array<Image, 6>
faces;
123 for(
int i= 0; i < 6; i++)
129 Color& operator() (
const int face,
const int x,
const int y )
131 return m_faces[face](x, y);
134 Color operator() (
const int face,
const int x,
const int y )
const
136 return m_faces[face](x, y);
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)
198 float s= (sm +1) / 2;
199 float t= (tm +1) / 2;
200 return m_faces[face].texture(s, t);
204 Vector envmap_pixel(
const Vector& d ) {
Vector texel= envmap_texel(d);
return Vector(texel.x, texel.y * m_width, texel.z * m_width); }
211 Vector m=
Vector(std::abs(d.x), std::abs(d.y), std::abs(d.z));
212 if(m.x > m.y && m.x > m.z)
262 float s= (sm +1) / 2;
263 float t= (tm +1) / 2;
264 return Vector(face, s, t);
268 Vector envmap_pixel_direction(
const Vector& d ) {
return envmap_texel_direction(
int(d.x), d.y / m_width, d.z / m_width); }
270 Vector envmap_texel_direction(
const Vector& d ) {
return envmap_texel_direction(
int(d.x), d.y, d.z); }
272 Vector envmap_texel_direction(
const int face,
const float s,
const float t )
282 return Vector(1, -tm, -sm);
289 return Vector(-1, -tm, sm);
303 return Vector(sm, -1, -tm);
310 return Vector(sm, -tm, 1);
317 return Vector(-sm, -tm, -1);
322 std::array<Image, 6> m_faces;
329 Envmap read_cubemap_faces(
const std::array<const char *, 6>& filenames );
331 Envmap read_cubemap_faces(
const char *prefix );
334 int write_cubemap(
const Envmap& envmap,
const char *filename );
336 int write_cubemap_faces(
const Envmap& envmap,
const char *prefix );
representation d'une image.
int height() const
renvoie la hauteur de l'image.
int width() const
renvoie la largeur de l'image.
Image flipY(const Image &image)
retourne l'image
Image flipX(const Image &image)
retourne l'image
Image copy(const Image &image, const int xmin, const int ymin, const int width, const int height)
renvoie un bloc de l'image
representation d'une couleur (rgba) transparente ou opaque.
representation d'une cubemap / envmap.
Envmap(const Image &image)
extrait les 6 faces d'une image.
int height() const
hauteur d'une face.
Color texture(const Vector &d) const
renvoie la couleur de la cubemap dans la direction d, utilise les memes conventions qu'openGL / Rende...
Image cross() const
renvoie une image contenant les 6 faces de la cubemap.
Envmap(const std::array< Image, 6 > &faces)
utilise les 6 faces.
std::array< Image, 6 > faces() const
renvoie les 6 faces de la cubemap.
void linear(const float gamma=2.2f)
applique une correction gamma inverse aux donnees de la cubemap.
bool empty() const
renvoie vrai si la cubemap est initialisee.
int width() const
largeur d'une face.
void gamma(const float gamma=2.2f)
applique une correction gamma aux donnees de la cubemap.
representation d'un vecteur 3d.
GLuint read_cubemap(const int unit, const char *filename, const GLenum texel_type=GL_RGBA)
charge une image, decoupe les 6 faces et renvoie une texture cubemap.