Pipeline graphique
 Tout Structures de données Espaces de nommage Fichiers Fonctions Variables Définitions de type Énumérations Valeurs énumérées Macros
ShaderGoureau.cpp
Aller à la documentation de ce fichier.
1 /*
2  * File: ShaderGoureau.cpp
3  * Author: quartz
4  *
5  * Created on 27 octobre 2014, 10:52
6  */
7 
8 #include "ShaderGoureau.h"
18 void ShaderGoureau::VertexShader(void *In, void *Out, void *Param, std::size_t Id0, std::size_t Id1)
19 {
20  Sommet &in = ((Sommet*)In)[Id0];
21  Sommet &out = *(Sommet*)Out;
22 
23 
24  ShaderBase::VertexShader(In, Out, Param, Id0,Id1);
25 
26 
27  //Calcul de l'intenciter lumineuse
28 
29  int I = 0;
30  Math::vecteur3d V = this->poscamLocal - out.pos;
31  V.normalize();
32  for(unsigned int u = 0; u < this->nlightLocal; u++)
33  {
34  Math::vecteur3d L = (this->lightsLocal[u].pos*-1) -in.pos;
35  L.normalize();
36  in.norm.normalize();
37 
38  if(debug)
39  lightsLocal[u].print();
40  /*
41  std::cout << "pos x " << in.pos.x <<", y " << in.pos.y << ", z " << in.pos.z <<std::endl;
42  std::cout << "norm x " << in.norm.x <<", y " << in.norm.y << ", z " << in.norm.z <<std::endl;
43  std::cout << "pos x " << L.x <<", y " << L.y << ", z " << L.z <<std::endl;*/
44 
45 
46  float cos = Math::dot3(L ,in.norm);
47 
48  if(cos > 0)
49  {
50  Math::vecteur3d R = (2*in.norm)*cos - L;
51 
52  float cosspecu = Math::dot3(R ,V);
53  cosspecu = pow(cosspecu,this->material.ns);
54  I += this->lightsLocal[u].intensiter * this->material.ks * cosspecu;
55 
56  }
57 
58  if(cos >= 0 && cos <= 1)
59  I += cos * this->material.kd * this->lightsLocal[u].intensiter ;
60 
61  }
62  if(I > 255)
63  {
64  out.intensiter = 255;
65  }
66  else
67  {
68  out.intensiter = I;
69  }
70 
71 
72 
73 
74 }
84 void ShaderGoureau::PixelShader(void *In, void *Out, void *Param, std::size_t x, std::size_t y)
85 {
86  if(debug)
87  std::cout <<std::endl<<std::endl << "////////////////ETAPE PIXEL SHADER////////////////"<< std::endl;
88  pixelIN &in = *(pixelIN*)In;
89  pixelOUT &out = *(pixelOUT*)Out;
90 
91  if(debug)
92  in.print();
93 
94  out.col.set(IBaricentrique(in.P,in.facette, in.sommet));
95 
96  int r = (material.col.r *out.col.r) / 255;
97  int g = (material.col.g *out.col.g) / 255;
98  int b = (material.col.b *out.col.b) / 255;
99 
100  out.col.r = r;
101  out.col.g = g;
102  out.col.b = b;
103 
104  if(debug)
105  out.print();
106 }
107 
109 
110 }
111 
113 
114 }
115 
virtual ~ShaderGoureau()
Math::vecteur3d norm
Normale au sommet.
Definition: definition.h:80
Light_Local * lightsLocal
Definition: ShaderBase.h:19
unsigned char r
Definition: definition.h:61
bool debug
Definition: ShaderBase.h:29
float dot3(coord2d v1, coord2d v2)
Definition: libMath.h:30
Sommet * sommet
Definition: definition.h:134
void set(unsigned char t)
Definition: definition.h:64
float ns
Definition: Material.h:10
unsigned int IBaricentrique(Math::coord2d P, FaceteEcran *facette, Sommet *somettransformer)
IBaricentrique(Math::coord2d P,FaceteEcran *facette, Sommet *somettransformer) Fonction permetant de ...
Definition: utils.cpp:202
unsigned int nlightLocal
Nombre de lampes actives.
Definition: ShaderBase.h:17
unsigned int intensiter
Definition: Light.h:34
float kd
coefficient de réflexion diffuse
Definition: Material.h:8
void VertexShader(void *In, void *Out, void *Param, std::size_t Id0, std::size_t Id1)
ShaderGoureau::VertexShader(void *In, void *Out, void *Param, std::size_t x, std::size_t y) Fonction ...
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
bool normalize(const float nrm)
U.normalize(norm) normalisation (sur place) en passant la norme. Retourne faux si la norme est nulle...
Definition: libMath.h:55
unsigned char g
Definition: definition.h:61
rgb col
couleur de l'objet
Definition: Material.h:7
float ks
coefficient de réflexion spéculaire
Definition: Material.h:9
Math::vecteur3d pos
Position de la lampe.
Definition: Light.h:32
void print()
Definition: definition.h:135
FaceteEcran * facette
Definition: definition.h:133
Math::coord2d P
Definition: definition.h:132
Math::vecteur4d pos
Coordonnées du sommet.
Definition: definition.h:76
unsigned char b
Definition: definition.h:61
void print()
Definition: definition.h:146
float intensiter
Couleur au sommet.
Definition: definition.h:88
void PixelShader(void *In, void *Out, void *Param, std::size_t x, std::size_t y)
ShaderGoureau::PixelShader(void *In, void *Out, void *Param, std::size_t x, std::size_t y) Fonction p...
void print()
Definition: Light.h:35
Material material
Matériau de l'objet.
Definition: ShaderBase.h:26