gKit2 light
Loading...
Searching...
No Matches
BasicPipeline Struct Reference
Inheritance diagram for BasicPipeline:

Public Member Functions

 BasicPipeline (const Mesh &_mesh, const Transform &_model, const Transform &_view, const Transform &_projection)
Point vertex_shader (const int vertex_id) const
Color fragment_shader (const int primitive_id, const Fragment fragment) const
 BasicPipeline (const Mesh &_mesh, const Transform &_model, const Transform &_view, const Transform &_projection)
Point vertex_shader (const int vertex_id) const
Color fragment_shader (const int primitive_id, const Fragment fragment) const

Public Attributes

const Meshmesh
Transform model
Transform view
Transform projection
Transform mvp
Transform mv
Transform mvn

Detailed Description

Definition at line 61 of file pipeline.cpp.

Constructor & Destructor Documentation

◆ BasicPipeline() [1/2]

BasicPipeline::BasicPipeline ( const Mesh & _mesh,
const Transform & _model,
const Transform & _view,
const Transform & _projection )
inline

Definition at line 70 of file pipeline.cpp.

71 : Pipeline(), mesh(_mesh), model(_model), view(_view), projection(_projection)
72 {
73 mvp= projection * view * model;
74 mv= Normal(view * model);
75 }
Transform Normal(const Transform &m)
renvoie la transformation a appliquer aux normales d'un objet transforme par la matrice m.
Definition mat.cpp:202

◆ BasicPipeline() [2/2]

BasicPipeline::BasicPipeline ( const Mesh & _mesh,
const Transform & _model,
const Transform & _view,
const Transform & _projection )
inline

Definition at line 76 of file pipeline3d.cpp.

77 : Pipeline(), mesh(_mesh), model(_model), view(_view), projection(_projection)
78 {
79 mvp= projection * view * model;
80 mv= view * model;
81 mvn= make_normal_transform(mv);
82 }

Member Function Documentation

◆ vertex_shader() [1/2]

Point BasicPipeline::vertex_shader ( const int vertex_id) const
inlinevirtual

Implements Pipeline.

Definition at line 77 of file pipeline.cpp.

78 {
79 // recupere la position du sommet
80 Point p= Point( mesh.positions().at(vertex_id) );
81 // renvoie les coordonnees dans le repere projectif
82 return mvp(p);
83 }

◆ fragment_shader() [1/2]

Color BasicPipeline::fragment_shader ( const int primitive_id,
const Fragment fragment ) const
inlinevirtual

Implements Pipeline.

Definition at line 85 of file pipeline.cpp.

86 {
87 // recuperer les normales des sommets de la primitive
88 Vector a= mv( Vector( mesh.normals().at(primitive_id * 3) ));
89 Vector b= mv( Vector( mesh.normals().at(primitive_id * 3 +1) ));
90 Vector c= mv( Vector( mesh.normals().at(primitive_id * 3 +2) ));
91
92 // interpoler la normale
93 Vector n= fragment.u * c + fragment.v * a + fragment.w * b;
94 // et la normaliser, l'interpolation ne conserve pas la longueur des vecteurs
95 n= normalize(n);
96
97 // calcule une couleur qui depend de l'orientation de la primitive par rapport a la camera
98 return White() * std::abs(n.z);
99
100 // on peut faire autre chose, par exemple, afficher directement la normale...
101 // return Color(std::abs(n.x), std::abs(n.y), std::abs(n.z));
102 }
Color White()
utilitaire. renvoie une couleur blanche.
Definition color.cpp:23
Vector normalize(const Vector &v)
renvoie un vecteur unitaire / longueur == 1.
Definition vec.cpp:167

◆ vertex_shader() [2/2]

Point BasicPipeline::vertex_shader ( const int vertex_id) const
inlinevirtual

Implements Pipeline.

Definition at line 84 of file pipeline3d.cpp.

85 {
86 // recupere la position du sommet
87 Point p= make_point( mesh.positions[vertex_id] );
88 //~ // renvoie les coordonnees dans le repere projectif
89 //~ return transform(mvp, p);
90
91 // renvoie les coordonnees dans le repere camera
92 return transform(mv, p);
93 }

◆ fragment_shader() [2/2]

Color BasicPipeline::fragment_shader ( const int primitive_id,
const Fragment fragment ) const
inlinevirtual

Implements Pipeline.

Definition at line 95 of file pipeline3d.cpp.

96 {
97 // recuperer les normales des sommets de la primitive
98 Vector a= transform(mvn, make_vector( mesh.normals[primitive_id * 3] ));
99 Vector b= transform(mvn, make_vector( mesh.normals[primitive_id * 3 +1] ));
100 Vector c= transform(mvn, make_vector( mesh.normals[primitive_id * 3 +2] ));
101
102 // interpoler la normale
103 Vector n= fragment.u * c + fragment.v * a + fragment.w * b;
104 // et la normaliser, l'interpolation ne conserve pas la longueur des vecteurs
105 n= normalize(n);
106
107 // calcule une couleur qui depend de l'orientation de la primitive par rapport a la camera
108 Color color= make_color(1.0 - (primitive_id % 100) / 99.f, float(primitive_id % 10) / 9.f, float(primitive_id % 1000) / 999.f);
109 return color * std::abs(n.z);
110
111 // on peut faire autre chose, par exemple, afficher la normale...
112 // return make_color(std::abs(n.x), std::abs(n.y), std::abs(n.z));
113 }

Member Data Documentation

◆ mesh

const Mesh & BasicPipeline::mesh

Definition at line 63 of file pipeline.cpp.

◆ model

Transform BasicPipeline::model

Definition at line 64 of file pipeline.cpp.

◆ view

Transform BasicPipeline::view

Definition at line 65 of file pipeline.cpp.

◆ projection

Transform BasicPipeline::projection

Definition at line 66 of file pipeline.cpp.

◆ mvp

Transform BasicPipeline::mvp

Definition at line 67 of file pipeline.cpp.

◆ mv

Transform BasicPipeline::mv

Definition at line 68 of file pipeline.cpp.

◆ mvn

Transform BasicPipeline::mvn

Definition at line 74 of file pipeline3d.cpp.


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