Pipeline graphique
 Tout Structures de données Espaces de nommage Fichiers Fonctions Variables Définitions de type Énumérations Valeurs énumérées Macros
ShaderBase.cpp
Aller à la documentation de ce fichier.
1 #include "ShaderBase.h"
3 {
4  lightsLocal = NULL;
5  nlightLocal = 0;
6  debug = false;
7 }
18 void ShaderBase::VertexShader(void *In, void *Out, void *Param, std::size_t Id0, std::size_t Id1)
19 {
20  if(debug)
21  std::cout <<std::endl<<std::endl << "////////////////ETAPE VERTEX SHADER////////////////"<< std::endl;
22  Sommet &in = ((Sommet*)In)[Id0];
23  Sommet &out = *(Sommet*)Out;
24 
25  out = in;
26 
27  if(debug)
28  in.print();
29 
30  out.pos.mul(world,out.pos);
31  out.pos.mul(this->camera->GetObservationMatrix(),out.pos);
32  out.pos.mul(this->camera->GetProjectionMatrix(),out.pos);
33 
34  if(out.pos.z > 0)
35  {
36  out.pos.x *= (1/out.pos.w);
37  out.pos.y *= (1/out.pos.w);
38  }
39  if(debug)
40  out.print();
41 
42 }
52 void ShaderBase::PixelShader(void *In, void *Out, void *Param, std::size_t x, std::size_t y)
53 {
54  if(debug)
55  std::cout <<std::endl<<std::endl << "////////////////ETAPE PIXEL SHADER////////////////"<< std::endl;
56 
57  pixelIN &in = *(pixelIN*)In;
58  pixelOUT &out = *(pixelOUT*)Out;
59 
60  if(debug)
61  in.print();
62 
63  out.col = material.col;
64 
65  if(debug)
66  out.print();
67 }
68 
76 {
78  this->nlightLocal = 0;
79  for(unsigned int i = 0 ; i < this->lights.size() ; i++)
80  {
81  if(this->lights.at(i)->active)
82  {
83  this->nlightLocal++;
84  }
85  }
86 
87  if(lightsLocal != NULL)
88  delete[] lightsLocal;
89 
91 
92  for(unsigned int i = 0,u = 0 ; i < this->lights.size() ; i++)
93  {
94  if(this->lights.at(i)->active)
95  {
96  lightsLocal[u].col = this->lights.at(i)->col;
97  lightsLocal[u].pos.mul(this->inverseworld,this->lights.at(i)->pos);
98  lightsLocal[u].intensiter = this->lights.at(i)->intensiter;
99  }
100  }
101 
102 }
108 {
109  lights.push_back(light);
110 }
117 {
118  if(id >= lights.size() )
119  {
120  std::cerr << "Erreur Depasement Tableau acces lampe" << std::endl;
121  exit(-1);
122  }
123  return *(lights.at(id));
124 }
125 
131 {
132  this->material = material;
133 }
139 {
140  this->camera = camera;
141 }
147 {
148  this->total.zero();
150  this->world = mat;
151  if(inverseworld.inverse(mat) == false)
152  {
153  std::cerr << "Imposible d'avoir l'invertse de worls" << std::endl;
154  this->world.view();
155  exit(-1);
156  }
157 }
158 
159 
void print()
fixe la valeur du vecteur
Definition: definition.h:116
void mul(matrice44 &M1, matrice44 &M2)
M.mul(M1,M2) multiplication de 2 matrices 4x4.
Definition: libMath.h:235
Light_Global & Light(unsigned int id)
Retourne la structure associée à la iéme lampe de la scène.
Definition: ShaderBase.cpp:116
Light_Local * lightsLocal
Definition: ShaderBase.h:19
void SetMaterial(Material &material)
Fixe le matériau utilisé par le shader.
Definition: ShaderBase.cpp:130
Structure utilisée dans les shaders pour ne conserver que les lampes actives.
Definition: Light.h:31
Math::matrice44 world
Matrice de transformation globale.
Definition: ShaderBase.h:25
std::vector< Light_Global * > lights
Definition: ShaderBase.h:18
void Update()
ShaderBase::Update() Fonction permetant de metre a jour le shader pour prendre en compte de nouvelle ...
Definition: ShaderBase.cpp:75
Structure utilisée pour définir une lampe dans la scène.
Definition: Light.h:8
Math::matrice44 & GetProjectionObservationMatrix()
retourne le produit des matrices de projection et d'observation
Definition: Camera.cpp:109
bool debug
Definition: ShaderBase.h:29
Definition: Camera.h:7
void SetWorldTransform(Math::matrice44 &mat)
Fixe la transformation globale de l'objet.
Definition: ShaderBase.cpp:146
void view()
M.view(), affichage de la matrice.
Definition: libMath.h:265
Structure définissant un matériau tel que vu dans le cours (modèle de Phong).
Definition: Material.h:6
Math::matrice44 & GetProjectionMatrix()
retourne la matrice de projection
Definition: Camera.cpp:100
ShaderBase()
Destructeur.
Definition: ShaderBase.cpp:2
Math::matrice44 & GetObservationMatrix()
retourne la matrice d'observation
Definition: Camera.cpp:91
void SetCamera(Camera *camera)
Fixe la définition de la caméra.
Definition: ShaderBase.cpp:138
unsigned int nlightLocal
Nombre de lampes actives.
Definition: ShaderBase.h:17
unsigned int intensiter
Definition: Light.h:34
Camera * camera
Caméra.
Definition: ShaderBase.h:21
virtual void VertexShader(void *In, void *Out, void *Param, std::size_t Id0, std::size_t Id1)
ShaderBase::VertexShader(void *In, void *Out, void *Param, std::size_t x, std::size_t y) Fonction per...
Definition: ShaderBase.cpp:18
Math::vecteur3d poscamLocal
Definition: ShaderBase.h:22
void mul(float v)
U.mul(v) multiplie (en place) U par le scalaire v.
Definition: libMath.h:49
void AddLights(Light_Global *light)
ShaderBase::AddLights(Light_Global * light) Fonction permetant d'ajouter une lampe a la scene...
Definition: ShaderBase.cpp:107
Math::vecteur3d & GetPosObservateur()
getter : valeur de pObs
Definition: Camera.cpp:118
bool inverse(matrice44 &M)
M.inverse(), inversion sur place de la matrice M. Renvoie true en cas de succès, false sinon...
Definition: libMath.h:306
Math::matrice44 total
Matrice de transformation globale.
Definition: ShaderBase.h:24
rgb col
couleur de l'objet
Definition: Material.h:7
Math::vecteur3d pos
Position de la lampe.
Definition: Light.h:32
void print()
Definition: definition.h:135
void zero()
M.zero(), mise à zéro de la matrice.
Definition: libMath.h:263
Math::vecteur4d pos
Coordonnées du sommet.
Definition: definition.h:76
Math::vecteur3d col
Couleur de la lumière émise par la lampe.
Definition: Light.h:33
structure pour les matrices 4x4
Definition: libMath.h:209
void print()
Definition: definition.h:146
virtual void PixelShader(void *In, void *Out, void *Param, std::size_t x, std::size_t y)
ShaderBase::PixelShader(void *In, void *Out, void *Param, std::size_t x, std::size_t y) Fonction perm...
Definition: ShaderBase.cpp:52
void mul(float v)
U.mul(v) multiplie (en place) U par le scalaire v.
Definition: libMath.h:110
Math::matrice44 inverseworld
Definition: ShaderBase.h:28
Material material
Matériau de l'objet.
Definition: ShaderBase.h:26