gKit2 light
Classes | Functions
tuto_dynamic_cubemap.cpp File Reference

rendu dans une cubemap More...

#include <memory>
#include "wavefront.h"
#include "texture.h"
#include "orbiter.h"
#include "program.h"
#include "uniforms.h"
#include "draw.h"
#include "app_camera.h"

Go to the source code of this file.

Classes

class  TP
 
struct  TP::Object
 

Functions

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. More...
 
Mesh make_grid (const int n=10)
 
int main (int argc, char **argv)
 

Detailed Description

rendu dans une cubemap

Definition in file tuto_dynamic_cubemap.cpp.


Class Documentation

◆ TP::Object

struct TP::Object

Definition at line 203 of file tuto_dynamic_cubemap.cpp.

Class Members
Transform model
Color color

Function Documentation

◆ read_cubemap()

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.

Definition at line 18 of file tuto_dynamic_cubemap.cpp.

19 {
20  // les 6 faces sur une croix
21  ImageData image= read_image_data(filename);
22  if(image.pixels.empty())
23  return 0;
24 
25  int w= image.width / 4;
26  int h= image.height / 3;
27  assert(w == h);
28 
29  GLenum data_format;
30  GLenum data_type= GL_UNSIGNED_BYTE;
31  if(image.channels == 3)
32  data_format= GL_RGB;
33  else // par defaut
34  data_format= GL_RGBA;
35 
36  // creer la texture
37  GLuint texture= 0;
38  glGenTextures(1, &texture);
39  glActiveTexture(GL_TEXTURE0 + unit);
40  glBindTexture(GL_TEXTURE_CUBE_MAP, texture);
41 
42  // creer les 6 faces
43  // chaque face de la cubemap est un rectangle [image.width/4 x image.height/3] dans l'image originale
44  struct { int x, y; } faces[]= {
45  {0, 1}, // X+
46  {2, 1}, // X-
47  {1, 2}, // Y+
48  {1, 0}, // Y-
49  {1, 1}, // Z+
50  {3, 1}, // Z-
51  };
52 
53  for(int i= 0; i < 6; i++)
54  {
55  ImageData face= flipX(flipY(copy(image, faces[i].x*w, faces[i].y*h, w, h)));
56 
57  glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X +i, 0,
58  texel_type, w, h, 0,
59  data_format, data_type, face.data());
60  }
61 
62  // parametres de filtrage
63  glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
64  glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
65  glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
66  glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
67  glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
68 
69  glGenerateMipmap(GL_TEXTURE_CUBE_MAP);
70 
71  // filtrage "correct" sur les bords du cube...
72  glEnable(GL_TEXTURE_CUBE_MAP_SEAMLESS);
73  //~ glDisable(GL_TEXTURE_CUBE_MAP_SEAMLESS);
74 
75  printf(" cubemap faces %dx%d\n", w, h);
76 
77  return texture;
78 }
void printf(Text &text, const int px, const int py, const char *format,...)
affiche un texte a la position x, y. meme utilisation que printf().
Definition: text.cpp:140
ImageData read_image_data(const char *filename)
charge les donnees d'un fichier png. renvoie une image initialisee par defaut en cas d'echec.
Definition: image_io.cpp:216
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
stockage temporaire des donnees d'une image.
Definition: image_io.h:38