diff --git a/ex_01(TutoQt)/ex_01.pro b/ex_01(TutoQt)/ex_01.pro deleted file mode 100644 index acd0112..0000000 --- a/ex_01(TutoQt)/ex_01.pro +++ /dev/null @@ -1,22 +0,0 @@ -# -# Ce fichier est lu par le programme qmake pour générer le Makefile -# - -QT += core gui opengl -CONFIG += -std=c++11 - -greaterThan(QT_MAJOR_VERSION, 4): QT += widgets - -TARGET = ex_01 -TEMPLATE = app - -SOURCES += \ - main_qt_gl.cc \ - glwidget.cc - -HEADERS += \ - glwidget.h \ - vertex_shader.h - -RESOURCES += \ - resource.qrc diff --git a/ex_01(TutoQt)/fragment_shader.glsl b/ex_01(TutoQt)/fragment_shader.glsl deleted file mode 100644 index 2f77fe7..0000000 --- a/ex_01(TutoQt)/fragment_shader.glsl +++ /dev/null @@ -1,6 +0,0 @@ -varying vec3 ma_couleur; - -void main() -{ - gl_FragColor = vec4(ma_couleur, 1.0); -} diff --git a/ex_01(TutoQt)/glwidget.cc b/ex_01(TutoQt)/glwidget.cc deleted file mode 100644 index ccdbb64..0000000 --- a/ex_01(TutoQt)/glwidget.cc +++ /dev/null @@ -1,114 +0,0 @@ -#include <QMatrix4x4> -#include "glwidget.h" -#include "vertex_shader.h" // Identifiants Qt de nos différents attributs - -// ====================================================================== -void GLWidget::initializeGL() -{ - /* Initialise notre vue OpenGL. - * Dans cet exemple, nous créons et activons notre shader. - * - * En raison du contenu des fichiers *.glsl, le shader de cet exemple - * NE permet QUE de dessiner des primitives colorées - * (pas de textures, brouillard, reflets de la lumière ou autres). - * - * Il est séparé en deux parties VERTEX et FRAGMENT. - * Le VERTEX : - * - récupère pour chaque sommet des primitives de couleur (dans - * l'attribut couleur) et de position (dans l'attribut sommet) - * - multiplie l'attribut sommet par les matrices 'vue_modele' et - * 'projection' et donne le résultat à OpenGL - * - passe la couleur au shader FRAGMENT. - * - * Le FRAGMENT : - * - applique la couleur qu'on lui donne - */ - - prog.addShaderFromSourceFile(QGLShader::Vertex, ":/vertex_shader.glsl"); - prog.addShaderFromSourceFile(QGLShader::Fragment, ":/fragment_shader.glsl"); - - /* Identifie les deux attributs du shader de cet exemple - * (voir vertex_shader.glsl). - * - * L'attribut identifié par 0 est particulier, il permet d'envoyer un - * nouveau "point" à OpenGL - * - * C'est pourquoi il devra obligatoirement être spécifié et en dernier - * (après la couleur dans cet exemple, voir plus bas). - */ - - prog.bindAttributeLocation("sommet", SommetId); - prog.bindAttributeLocation("couleur", CouleurId); - - // Compilation du shader OpenGL - prog.link(); - - // Activation du shader - prog.bind(); - - /* Activation du "Test de profondeur" et du "Back-face culling" - * Le Test de profondeur permet de dessiner un objet à l'arrière-plan - * partielement caché par d'autres objets. - * - * Le Back-face culling consiste à ne dessiner que les face avec ordre - * de déclaration dans le sens trigonométrique. - */ - glEnable(GL_DEPTH_TEST); - glEnable(GL_CULL_FACE); -} - -// ====================================================================== -void GLWidget::resizeGL(int width, int height) -{ - /* On commence par dire sur quelle partie de la - * fenêtre OpenGL doit dessiner. - * Ici on lui demande de dessiner sur toute la fenêtre. - */ - glViewport(0, 0, width, height); - - /* Puis on modifie la matrice de projection du shader. - * Pour ce faire on crée une matrice identité (constructeur - * par défaut), on la multiplie par la droite par une matrice - * de perspective. - * Plus de détail sur cette matrice - * http://www.songho.ca/opengl/gl_projectionmatrix.html - * Puis on upload la matrice sur le shader avec la méthode - * setUniformValue - */ - QMatrix4x4 matrice; - matrice.perspective(70.0, qreal(width) / qreal(height ? height : 1.0), 1e-3, 1e5); - prog.setUniformValue("projection", matrice); -} - -// ====================================================================== -void GLWidget::paintGL() -{ - // On commence par effacer ce qu'il y avait à l'écran - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - /* Puis on crée une matrice identitée (constructeur par défaut) - * que l'on multiplie à droite par une matrice de translation - * avec comme vecteur de translation (0,0,-2). - * Finalement, on envoie cette matrice au shader. - * - * Sur notre shader (voir les sources .glsl), il y a deux matrices - * projection et vue_modele. - * Les sommets dessinés seront multipliés par la matrice vue_modele - * puis par projection avant d'être dessiné sur l'écran. - */ - QMatrix4x4 matrice; - matrice.translate(0.0, 0.0, -2.0); - prog.setUniformValue("vue_modele", matrice); - - // On dessine un joli triangle coloré - glBegin(GL_TRIANGLES); - prog.setAttributeValue(CouleurId, 1.0, 0.0, 0.0); // rouge - prog.setAttributeValue(SommetId, 0.0, 0.0, 0.0); - - prog.setAttributeValue(CouleurId, 0.0, 1.0, 0.0); // vert - prog.setAttributeValue(SommetId, 1.0, 0.0, 0.0); - - prog.setAttributeValue(CouleurId, 0.0, 0.0, 1.0); // bleu - prog.setAttributeValue(SommetId, 1.0, 1.0, 0.0); - glEnd(); -} diff --git a/ex_01(TutoQt)/glwidget.h b/ex_01(TutoQt)/glwidget.h deleted file mode 100644 index 199b9a3..0000000 --- a/ex_01(TutoQt)/glwidget.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef GLWIDGET_H -#define GLWIDGET_H - -#include <QGLWidget> // Classe pour faire une fenêtre OpenGL -#include <QGLShaderProgram> // Classe qui wrap les fonctions OpenGL liées aux shaders - -class GLWidget : public QGLWidget -/* La fenêtre hérite de QGLWidget ; - * les événements (clavier, souris, temps) sont des méthodes virtuelles à redéfinir. - */ -{ -public: - GLWidget(QWidget* parent = nullptr) - : QGLWidget(parent) {} - virtual ~GLWidget() {} - -private: - // Les 3 méthodes clés de la classe QGLWidget à réimplémenter - virtual void initializeGL() override; - virtual void resizeGL(int width, int height) override; - virtual void paintGL() override; - - // Un shader OpenGL encapsulé dans une classe Qt - QGLShaderProgram prog; -}; - -#endif // GLWIDGET_H diff --git a/ex_01(TutoQt)/main_qt_gl.cc b/ex_01(TutoQt)/main_qt_gl.cc deleted file mode 100644 index 60bb9a5..0000000 --- a/ex_01(TutoQt)/main_qt_gl.cc +++ /dev/null @@ -1,11 +0,0 @@ -#include <QApplication> -#include "glwidget.h" - -int main(int argc, char* argv[]) -{ - QApplication a(argc, argv); - GLWidget w; - w.show(); - - return a.exec(); -} diff --git a/ex_01(TutoQt)/resource.qrc b/ex_01(TutoQt)/resource.qrc deleted file mode 100644 index 7329486..0000000 --- a/ex_01(TutoQt)/resource.qrc +++ /dev/null @@ -1,6 +0,0 @@ -<RCC> - <qresource prefix="/"> - <file>fragment_shader.glsl</file> - <file>vertex_shader.glsl</file> - </qresource> -</RCC> diff --git a/ex_01(TutoQt)/vertex_shader.glsl b/ex_01(TutoQt)/vertex_shader.glsl deleted file mode 100644 index 7494cd6..0000000 --- a/ex_01(TutoQt)/vertex_shader.glsl +++ /dev/null @@ -1,13 +0,0 @@ -attribute vec3 sommet; -attribute vec3 couleur; - -uniform mat4 projection; -uniform mat4 vue_modele; - -varying vec3 ma_couleur; - -void main() -{ - gl_Position = projection * vue_modele * vec4(sommet, 1.0); - ma_couleur = couleur; -} diff --git a/ex_01(TutoQt)/vertex_shader.h b/ex_01(TutoQt)/vertex_shader.h deleted file mode 100644 index 53e0582..0000000 --- a/ex_01(TutoQt)/vertex_shader.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef VERTEX_SHADER_H -#define VERTEX_SHADER_H - -enum Vertex_Shader_Attribute_Id { - SommetId = 0, - CouleurId, -}; - -#endif diff --git a/ex_02(TutoQt)/Qt_GL/Qt_GL.pro b/ex_02(TutoQt)/Qt_GL/Qt_GL.pro deleted file mode 100644 index eeecdf1..0000000 --- a/ex_02(TutoQt)/Qt_GL/Qt_GL.pro +++ /dev/null @@ -1,24 +0,0 @@ -QT += opengl -QMAKE_CXXFLAGS += -std=c++11 - -greaterThan(QT_MAJOR_VERSION, 4): QT += widgets - -TARGET = ex_02_gl - -INCLUDEPATH = ../general - -SOURCES += \ - main_qt_gl.cc \ - glwidget.cc \ - vue_opengl.cc - -HEADERS += \ - glwidget.h \ - vertex_shader.h \ - vue_opengl.h \ - ../general/dessinable.h \ - ../general/support_a_dessin.h \ - ../general/contenu.h - -RESOURCES += \ - resource.qrc diff --git a/ex_02(TutoQt)/Qt_GL/fragment_shader.glsl b/ex_02(TutoQt)/Qt_GL/fragment_shader.glsl deleted file mode 100644 index 2f77fe7..0000000 --- a/ex_02(TutoQt)/Qt_GL/fragment_shader.glsl +++ /dev/null @@ -1,6 +0,0 @@ -varying vec3 ma_couleur; - -void main() -{ - gl_FragColor = vec4(ma_couleur, 1.0); -} diff --git a/ex_02(TutoQt)/Qt_GL/glwidget.cc b/ex_02(TutoQt)/Qt_GL/glwidget.cc deleted file mode 100644 index 8a71b39..0000000 --- a/ex_02(TutoQt)/Qt_GL/glwidget.cc +++ /dev/null @@ -1,41 +0,0 @@ -#include <QKeyEvent> -#include <QTimerEvent> -#include <QMatrix4x4> -#include "glwidget.h" - -// ====================================================================== -void GLWidget::initializeGL() -{ - vue.init(); -} - -// ====================================================================== -void GLWidget::resizeGL(int width, int height) -{ - /* On commance par dire sur quelle partie de la - * fenêtre OpenGL doit dessiner. - * Ici on lui demande de dessiner sur toute la fenêtre. - */ - glViewport(0, 0, width, height); - - /* Puis on modifie la matrice de projection du shader. - * Pour ce faire on crée une matrice identité (constructeur - * par défaut), on la multiplie par la droite par une matrice - * de perspective. - * Plus de détail sur cette matrice - * http://www.songho.ca/opengl/gl_projectionmatrix.html - * Puis on upload la matrice sur le shader à l'aide de la - * méthode de la classe VueOpenGL - */ - QMatrix4x4 matrice; - matrice.perspective(70.0, qreal(width) / qreal(height ? height : 1.0), 1e-3, 1e5); - vue.setProjection(matrice); -} - -// ====================================================================== -void GLWidget::paintGL() -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - c.dessine(); -} - diff --git a/ex_02(TutoQt)/Qt_GL/glwidget.h b/ex_02(TutoQt)/Qt_GL/glwidget.h deleted file mode 100644 index 5eace9f..0000000 --- a/ex_02(TutoQt)/Qt_GL/glwidget.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef GLWIDGET_H -#define GLWIDGET_H - -#include <QGLWidget> // Classe pour faire une fenêtre OpenGL -#include "vue_opengl.h" -#include "contenu.h" - -class GLWidget : public QGLWidget -/* La fenêtre hérite de QGLWidget ; - * les événements (clavier, souris, temps) sont des méthodes virtuelles à redéfinir. - */ -{ -public: - GLWidget(QWidget* parent = nullptr) - : QGLWidget(parent) - , c(&vue) - {} - virtual ~GLWidget() {} - -private: - // Les 3 méthodes clés de la classe QGLWidget à réimplémenter - virtual void initializeGL() override; - virtual void resizeGL(int width, int height) override; - virtual void paintGL() override; - - // Vue : ce qu'il faut donner au contenu pour qu'il puisse se dessiner sur la vue - VueOpenGL vue; - - // objets à dessiner - Contenu c; -}; - -#endif // GLWIDGET_H diff --git a/ex_02(TutoQt)/Qt_GL/main_qt_gl.cc b/ex_02(TutoQt)/Qt_GL/main_qt_gl.cc deleted file mode 100644 index 60bb9a5..0000000 --- a/ex_02(TutoQt)/Qt_GL/main_qt_gl.cc +++ /dev/null @@ -1,11 +0,0 @@ -#include <QApplication> -#include "glwidget.h" - -int main(int argc, char* argv[]) -{ - QApplication a(argc, argv); - GLWidget w; - w.show(); - - return a.exec(); -} diff --git a/ex_02(TutoQt)/Qt_GL/resource.qrc b/ex_02(TutoQt)/Qt_GL/resource.qrc deleted file mode 100644 index 7329486..0000000 --- a/ex_02(TutoQt)/Qt_GL/resource.qrc +++ /dev/null @@ -1,6 +0,0 @@ -<RCC> - <qresource prefix="/"> - <file>fragment_shader.glsl</file> - <file>vertex_shader.glsl</file> - </qresource> -</RCC> diff --git a/ex_02(TutoQt)/Qt_GL/vertex_shader.glsl b/ex_02(TutoQt)/Qt_GL/vertex_shader.glsl deleted file mode 100644 index 7494cd6..0000000 --- a/ex_02(TutoQt)/Qt_GL/vertex_shader.glsl +++ /dev/null @@ -1,13 +0,0 @@ -attribute vec3 sommet; -attribute vec3 couleur; - -uniform mat4 projection; -uniform mat4 vue_modele; - -varying vec3 ma_couleur; - -void main() -{ - gl_Position = projection * vue_modele * vec4(sommet, 1.0); - ma_couleur = couleur; -} diff --git a/ex_02(TutoQt)/Qt_GL/vertex_shader.h b/ex_02(TutoQt)/Qt_GL/vertex_shader.h deleted file mode 100644 index 53e0582..0000000 --- a/ex_02(TutoQt)/Qt_GL/vertex_shader.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef VERTEX_SHADER_H -#define VERTEX_SHADER_H - -enum Vertex_Shader_Attribute_Id { - SommetId = 0, - CouleurId, -}; - -#endif diff --git a/ex_02(TutoQt)/Qt_GL/vue_opengl.cc b/ex_02(TutoQt)/Qt_GL/vue_opengl.cc deleted file mode 100644 index 6a73d85..0000000 --- a/ex_02(TutoQt)/Qt_GL/vue_opengl.cc +++ /dev/null @@ -1,133 +0,0 @@ -#include "vue_opengl.h" -#include "vertex_shader.h" // Identifiants Qt de nos différents attributs -#include "contenu.h" - -// ====================================================================== -void VueOpenGL::dessine(Contenu const& a_dessiner) -{ - Q_UNUSED(a_dessiner); // Dans cet exemple simple, on n'utilise pas le paramètre. - - /* Création d'une matrice pour modifier le point de vue. * - * Cette matrice sera appliquée aux 8 sommets du cube. * - * Au départ, la matrice est la matrice identité (constructeur par défaut). */ - QMatrix4x4 matrice; - - // Multiplie la matrice à droite par une matrice de translation (0, 0, -4). - matrice.translate(0.0, 0.0, -4.0); - - // Multiplie la matrice à droite par une matrice de rotation de 60 degrés autour de l'axe Y. - matrice.rotate(60.0, 0.0, 1.0, 0.0); - - // Multiplie la matrice à droite par une matrice de rotation de 45 degrés autour de l'axe Z. - matrice.rotate(45.0, 0.0, 0.0, 1.0); - - // Dessine le cube - dessineCube(matrice); -} - -// ====================================================================== -void VueOpenGL::init() -{ - /* Initialise notre vue OpenGL. - * Dans cet exemple, nous créons et activons notre shader. - * - * En raison du contenu des fichiers *.glsl, le shader de cet exemple - * NE permet QUE de dessiner des primitives colorées - * (pas de textures, brouillard, reflets de la lumière ou autres). - * - * Il est séparé en deux parties VERTEX et FRAGMENT. - * Le VERTEX : - * - récupère pour chaque sommet des primitives de couleur (dans - * l'attribut couleur) et de position (dans l'attribut sommet) - * - multiplie l'attribut sommet par les matrices 'vue_modele' et - * 'projection' et donne le résultat à OpenGL - * - passe la couleur au shader FRAGMENT. - * - * Le FRAGMENT : - * - applique la couleur qu'on lui donne - */ - - prog.addShaderFromSourceFile(QGLShader::Vertex, ":/vertex_shader.glsl"); - prog.addShaderFromSourceFile(QGLShader::Fragment, ":/fragment_shader.glsl"); - - /* Identifie les deux attributs du shader de cet exemple - * (voir vertex_shader.glsl). - * - * L'attribut identifié par 0 est particulier, il permet d'envoyer un - * nouveau "point" à OpenGL - * - * C'est pourquoi il devra obligatoirement être spécifié et en dernier - * (après la couleur dans cet exemple, voir plus bas). - */ - - prog.bindAttributeLocation("sommet", SommetId); - prog.bindAttributeLocation("couleur", CouleurId); - - // Compilation du shader OpenGL - prog.link(); - - // Activation du shader - prog.bind(); - - /* Activation du "Test de profondeur" et du "Back-face culling" - * Le Test de profondeur permet de dessiner un objet à l'arrière-plan - * partielement caché par d'autres objets. - * - * Le Back-face culling consiste à ne dessiner que les face avec ordre - * de déclaration dans le sens trigonométrique. - */ - glEnable(GL_DEPTH_TEST); - glEnable(GL_CULL_FACE); -} - -// ====================================================================== -void VueOpenGL::dessineCube (QMatrix4x4 const& point_de_vue) -{ - // Passe la matrice point_de_vue au shader - prog.setUniformValue("vue_modele", point_de_vue); - - glBegin(GL_QUADS); - // face coté X = +1 - prog.setAttributeValue(CouleurId, 1.0, 0.0, 0.0); // rouge - prog.setAttributeValue(SommetId, +1.0, -1.0, -1.0); - prog.setAttributeValue(SommetId, +1.0, +1.0, -1.0); - prog.setAttributeValue(SommetId, +1.0, +1.0, +1.0); - prog.setAttributeValue(SommetId, +1.0, -1.0, +1.0); - - // face coté X = -1 - prog.setAttributeValue(CouleurId, 0.0, 1.0, 0.0); // vert - prog.setAttributeValue(SommetId, -1.0, -1.0, -1.0); - prog.setAttributeValue(SommetId, -1.0, -1.0, +1.0); - prog.setAttributeValue(SommetId, -1.0, +1.0, +1.0); - prog.setAttributeValue(SommetId, -1.0, +1.0, -1.0); - - // face coté Y = +1 - prog.setAttributeValue(CouleurId, 0.0, 0.0, 1.0); // bleu - prog.setAttributeValue(SommetId, -1.0, +1.0, -1.0); - prog.setAttributeValue(SommetId, -1.0, +1.0, +1.0); - prog.setAttributeValue(SommetId, +1.0, +1.0, +1.0); - prog.setAttributeValue(SommetId, +1.0, +1.0, -1.0); - - // face coté Y = -1 - prog.setAttributeValue(CouleurId, 0.0, 1.0, 1.0); // cyan - prog.setAttributeValue(SommetId, -1.0, -1.0, -1.0); - prog.setAttributeValue(SommetId, +1.0, -1.0, -1.0); - prog.setAttributeValue(SommetId, +1.0, -1.0, +1.0); - prog.setAttributeValue(SommetId, -1.0, -1.0, +1.0); - - // face coté Z = +1 - prog.setAttributeValue(CouleurId, 1.0, 1.0, 0.0); // jaune - prog.setAttributeValue(SommetId, -1.0, -1.0, +1.0); - prog.setAttributeValue(SommetId, +1.0, -1.0, +1.0); - prog.setAttributeValue(SommetId, +1.0, +1.0, +1.0); - prog.setAttributeValue(SommetId, -1.0, +1.0, +1.0); - - // face coté Z = -1 - prog.setAttributeValue(CouleurId, 1.0, 0.0, 1.0); // magenta - prog.setAttributeValue(SommetId, -1.0, -1.0, -1.0); - prog.setAttributeValue(SommetId, -1.0, +1.0, -1.0); - prog.setAttributeValue(SommetId, +1.0, +1.0, -1.0); - prog.setAttributeValue(SommetId, +1.0, -1.0, -1.0); - - glEnd(); -} diff --git a/ex_02(TutoQt)/Qt_GL/vue_opengl.h b/ex_02(TutoQt)/Qt_GL/vue_opengl.h deleted file mode 100644 index b302182..0000000 --- a/ex_02(TutoQt)/Qt_GL/vue_opengl.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef VUEOPENGL_H -#define VUEOPENGL_H - -#include <QGLShaderProgram> // Classe qui regroupe les fonctions OpenGL liées aux shaders -#include <QMatrix4x4> -#include "support_a_dessin.h" - -class VueOpenGL : public SupportADessin { - public: - // méthode(s) de dessin (héritée(s) de SupportADessin) - virtual void dessine(Contenu const& a_dessiner) override; - - // méthode d'initialisation - void init(); - - // méthode set - void setProjection(QMatrix4x4 const& projection) - { prog.setUniformValue("projection", projection); } - - // méthode utilitaire offerte pour simplifier - void dessineCube(QMatrix4x4 const& point_de_vue = QMatrix4x4() ); - - private: - // Un shader OpenGL encapsulé dans une classe Qt - QGLShaderProgram prog; -}; - -#endif diff --git a/ex_02(TutoQt)/ex_02.pro b/ex_02(TutoQt)/ex_02.pro deleted file mode 100644 index 4caac76..0000000 --- a/ex_02(TutoQt)/ex_02.pro +++ /dev/null @@ -1,5 +0,0 @@ -TEMPLATE = subdirs - -SUBDIRS += \ - Qt_GL \ - text diff --git a/ex_02(TutoQt)/general/contenu.h b/ex_02(TutoQt)/general/contenu.h deleted file mode 100644 index 179fbb6..0000000 --- a/ex_02(TutoQt)/general/contenu.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef CONTENU_H -#define CONTENU_H - -#include "dessinable.h" -#include "support_a_dessin.h" - -class Contenu : public Dessinable { -public: - Contenu(SupportADessin* vue) - : Dessinable(vue) - {} - virtual ~Contenu() {} - - virtual void dessine() override - { support->dessine(*this); } -}; - -#endif // CONTENU_H diff --git a/ex_02(TutoQt)/general/dessinable.h b/ex_02(TutoQt)/general/dessinable.h deleted file mode 100644 index 7996eb8..0000000 --- a/ex_02(TutoQt)/general/dessinable.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef DESSINABLE_H -#define DESSINABLE_H - -class SupportADessin; - -class Dessinable { - public: - Dessinable(SupportADessin* support) - : support(support) - {} - virtual ~Dessinable() {} - virtual void dessine() = 0; - - protected: - /* Nous mettons un pointeur au lieu d'une référence * - * au cas où l'on voudrait changer de support (non * - * implémenté ici), ou même copier un dessinable, * - * échanger (swap) deux dessinables, etc. * - * Il n'est pas nécessaire d'implémenter une copie * - * profonde ici ; c'est bien une copie de surface * - * dont nous avons besoin. */ - SupportADessin* support; -}; - -#endif diff --git a/ex_02(TutoQt)/general/support_a_dessin.h b/ex_02(TutoQt)/general/support_a_dessin.h deleted file mode 100644 index aafaa33..0000000 --- a/ex_02(TutoQt)/general/support_a_dessin.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef SUPPORT_A_DESSIN_H -#define SUPPORT_A_DESSIN_H - -class Contenu; - -class SupportADessin -{ - public: - virtual ~SupportADessin() {} - - virtual void dessine(Contenu const& a_dessiner) = 0; - - /* Mettre ici toutes les méthodes nécessaires pour dessiner tous les - * objets que l'on veut dessiner. Par exemple : - * virtual void dessine(Nounours const& a_dessiner) = 0; - * virtual void dessine(Voiture const& a_dessiner) = 0; - */ -}; - -#endif diff --git a/ex_02(TutoQt)/text/main_text.cc b/ex_02(TutoQt)/text/main_text.cc deleted file mode 100644 index 3db2786..0000000 --- a/ex_02(TutoQt)/text/main_text.cc +++ /dev/null @@ -1,20 +0,0 @@ -#include <iostream> -#include "text_viewer.h" -#include "contenu.h" -using namespace std; - -int main() -{ - /* Nous voulons un support à dessin : * - * ici un TextViewer qui écrit sur cout */ - TextViewer ecran(cout); - - /* Nous voulons un contenu à dessiner, et que ce contenu * - * se dessine sur notre support à dessin précédent */ - Contenu c(&ecran); - - // Nous dessinons notre contenu - c.dessine(); - - return 0; -} diff --git a/ex_02(TutoQt)/text/text.pro b/ex_02(TutoQt)/text/text.pro deleted file mode 100644 index bf21499..0000000 --- a/ex_02(TutoQt)/text/text.pro +++ /dev/null @@ -1,15 +0,0 @@ -QMAKE_CXXFLAGS+= -std=c++11 - -TARGET = ex_02_text - -INCLUDEPATH = ../general - -SOURCES += \ - main_text.cc \ - text_viewer.cc - -HEADERS += \ - ../general/contenu.h \ - text_viewer.h \ - ../general/dessinable.h \ - ../general/support_a_dessin.h diff --git a/ex_02(TutoQt)/text/text_viewer.cc b/ex_02(TutoQt)/text/text_viewer.cc deleted file mode 100644 index 11d75d5..0000000 --- a/ex_02(TutoQt)/text/text_viewer.cc +++ /dev/null @@ -1,11 +0,0 @@ -#include <iostream> // pour endl -#include "text_viewer.h" -#include "contenu.h" - -void TextViewer::dessine(Contenu const&) -{ - /* Dans ce premier exemple très simple, on n'utilise * - * pas l'argument Contenu. Nous ne l'avons donc pas nommé. */ - - flot << "un cube" << std::endl; -} diff --git a/ex_02(TutoQt)/text/text_viewer.h b/ex_02(TutoQt)/text/text_viewer.h deleted file mode 100644 index 7fcc9e4..0000000 --- a/ex_02(TutoQt)/text/text_viewer.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef TEXT_VIEWER_H -#define TEXT_VIEWER_H - -#include <iostream> -#include "support_a_dessin.h" - -class TextViewer : public SupportADessin { - public: - TextViewer(std::ostream& flot) - : flot(flot) - {} - virtual ~TextViewer() {} - - virtual void dessine(Contenu const& a_dessiner) override; - - private: - std::ostream& flot; -}; - -#endif diff --git a/ex_03(TutoQt)/Qt_GL/Qt_GL.pro b/ex_03(TutoQt)/Qt_GL/Qt_GL.pro deleted file mode 100644 index 57a41a8..0000000 --- a/ex_03(TutoQt)/Qt_GL/Qt_GL.pro +++ /dev/null @@ -1,24 +0,0 @@ -QT += opengl -QMAKE_CXXFLAGS += -std=c++11 - -greaterThan(QT_MAJOR_VERSION, 4): QT += widgets - -TARGET = ex_03_gl - -INCLUDEPATH = ../general - -SOURCES += \ - main_qt_gl.cc \ - glwidget.cc \ - vue_opengl.cc - -HEADERS += \ - glwidget.h \ - vertex_shader.h \ - vue_opengl.h \ - ../general/dessinable.h \ - ../general/support_a_dessin.h \ - ../general/contenu.h - -RESOURCES += \ - resource.qrc diff --git a/ex_03(TutoQt)/Qt_GL/fragment_shader.glsl b/ex_03(TutoQt)/Qt_GL/fragment_shader.glsl deleted file mode 100644 index 2f77fe7..0000000 --- a/ex_03(TutoQt)/Qt_GL/fragment_shader.glsl +++ /dev/null @@ -1,6 +0,0 @@ -varying vec3 ma_couleur; - -void main() -{ - gl_FragColor = vec4(ma_couleur, 1.0); -} diff --git a/ex_03(TutoQt)/Qt_GL/glwidget.cc b/ex_03(TutoQt)/Qt_GL/glwidget.cc deleted file mode 100644 index 8a71b39..0000000 --- a/ex_03(TutoQt)/Qt_GL/glwidget.cc +++ /dev/null @@ -1,41 +0,0 @@ -#include <QKeyEvent> -#include <QTimerEvent> -#include <QMatrix4x4> -#include "glwidget.h" - -// ====================================================================== -void GLWidget::initializeGL() -{ - vue.init(); -} - -// ====================================================================== -void GLWidget::resizeGL(int width, int height) -{ - /* On commance par dire sur quelle partie de la - * fenêtre OpenGL doit dessiner. - * Ici on lui demande de dessiner sur toute la fenêtre. - */ - glViewport(0, 0, width, height); - - /* Puis on modifie la matrice de projection du shader. - * Pour ce faire on crée une matrice identité (constructeur - * par défaut), on la multiplie par la droite par une matrice - * de perspective. - * Plus de détail sur cette matrice - * http://www.songho.ca/opengl/gl_projectionmatrix.html - * Puis on upload la matrice sur le shader à l'aide de la - * méthode de la classe VueOpenGL - */ - QMatrix4x4 matrice; - matrice.perspective(70.0, qreal(width) / qreal(height ? height : 1.0), 1e-3, 1e5); - vue.setProjection(matrice); -} - -// ====================================================================== -void GLWidget::paintGL() -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - c.dessine(); -} - diff --git a/ex_03(TutoQt)/Qt_GL/glwidget.h b/ex_03(TutoQt)/Qt_GL/glwidget.h deleted file mode 100644 index 5eace9f..0000000 --- a/ex_03(TutoQt)/Qt_GL/glwidget.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef GLWIDGET_H -#define GLWIDGET_H - -#include <QGLWidget> // Classe pour faire une fenêtre OpenGL -#include "vue_opengl.h" -#include "contenu.h" - -class GLWidget : public QGLWidget -/* La fenêtre hérite de QGLWidget ; - * les événements (clavier, souris, temps) sont des méthodes virtuelles à redéfinir. - */ -{ -public: - GLWidget(QWidget* parent = nullptr) - : QGLWidget(parent) - , c(&vue) - {} - virtual ~GLWidget() {} - -private: - // Les 3 méthodes clés de la classe QGLWidget à réimplémenter - virtual void initializeGL() override; - virtual void resizeGL(int width, int height) override; - virtual void paintGL() override; - - // Vue : ce qu'il faut donner au contenu pour qu'il puisse se dessiner sur la vue - VueOpenGL vue; - - // objets à dessiner - Contenu c; -}; - -#endif // GLWIDGET_H diff --git a/ex_03(TutoQt)/Qt_GL/main_qt_gl.cc b/ex_03(TutoQt)/Qt_GL/main_qt_gl.cc deleted file mode 100644 index 60bb9a5..0000000 --- a/ex_03(TutoQt)/Qt_GL/main_qt_gl.cc +++ /dev/null @@ -1,11 +0,0 @@ -#include <QApplication> -#include "glwidget.h" - -int main(int argc, char* argv[]) -{ - QApplication a(argc, argv); - GLWidget w; - w.show(); - - return a.exec(); -} diff --git a/ex_03(TutoQt)/Qt_GL/resource.qrc b/ex_03(TutoQt)/Qt_GL/resource.qrc deleted file mode 100644 index 7329486..0000000 --- a/ex_03(TutoQt)/Qt_GL/resource.qrc +++ /dev/null @@ -1,6 +0,0 @@ -<RCC> - <qresource prefix="/"> - <file>fragment_shader.glsl</file> - <file>vertex_shader.glsl</file> - </qresource> -</RCC> diff --git a/ex_03(TutoQt)/Qt_GL/vertex_shader.glsl b/ex_03(TutoQt)/Qt_GL/vertex_shader.glsl deleted file mode 100644 index 7494cd6..0000000 --- a/ex_03(TutoQt)/Qt_GL/vertex_shader.glsl +++ /dev/null @@ -1,13 +0,0 @@ -attribute vec3 sommet; -attribute vec3 couleur; - -uniform mat4 projection; -uniform mat4 vue_modele; - -varying vec3 ma_couleur; - -void main() -{ - gl_Position = projection * vue_modele * vec4(sommet, 1.0); - ma_couleur = couleur; -} diff --git a/ex_03(TutoQt)/Qt_GL/vertex_shader.h b/ex_03(TutoQt)/Qt_GL/vertex_shader.h deleted file mode 100644 index 53e0582..0000000 --- a/ex_03(TutoQt)/Qt_GL/vertex_shader.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef VERTEX_SHADER_H -#define VERTEX_SHADER_H - -enum Vertex_Shader_Attribute_Id { - SommetId = 0, - CouleurId, -}; - -#endif diff --git a/ex_03(TutoQt)/Qt_GL/vue_opengl.cc b/ex_03(TutoQt)/Qt_GL/vue_opengl.cc deleted file mode 100644 index a054c88..0000000 --- a/ex_03(TutoQt)/Qt_GL/vue_opengl.cc +++ /dev/null @@ -1,148 +0,0 @@ -#include "vue_opengl.h" -#include "vertex_shader.h" // Identifiants Qt de nos différents attributs -#include "contenu.h" - -// ====================================================================== -void VueOpenGL::dessine(Contenu const& a_dessiner) -{ - Q_UNUSED(a_dessiner); // Dans cet exemple simple, on n'utilise pas le paramètre. - - /* Création d'une matrice pour modifier le point de vue. * - * Cette matrice sera appliquée aux 8 sommets du cube. * - * Au départ, la matrice est la matrice identité (constructeur par défaut). */ - QMatrix4x4 matrice; - - // Multiplie la matrice à droite par une matrice de translation (0, 0, -4). - matrice.translate(0.0, 0.0, -4.0); - - // Multiplie la matrice à droite par une matrice de rotation de 60 degrés autour de l'axe Y. - matrice.rotate(60.0, 0.0, 1.0, 0.0); - - // Multiplie la matrice à droite par une matrice de rotation de 45 degrés autour de l'axe Z. - matrice.rotate(45.0, 0.0, 0.0, 1.0); - - // Dessine le cube - dessineCube(matrice); - - QMatrix4x4 reference(matrice); // sauvegarde le point de vue de référence - - // Dessine le 2e cube - matrice.translate(0.0, 1.5, 0.0); // on se déplace de 1.5 au dessus (axe y) - matrice.scale(0.25); // on réduit le cube d'un facteur 0.25 (homothétie) - dessineCube(matrice); // et on dessine le cube - - // Revient au point de référence - matrice = reference; - - // Dessine le 3e cube - matrice.translate(0.0, 0.0, 1.5); // (3) puis on se déplace à droite (axe z) - matrice.scale(0.25); // (2) puis on réduit la taille - matrice.rotate(45.0, 0.0, 1.0, 0.0); // (1) on tourne de 45 degrés - dessineCube(matrice); -} - -// ====================================================================== -void VueOpenGL::init() -{ - /* Initialise notre vue OpenGL. - * Dans cet exemple, nous créons et activons notre shader. - * - * En raison du contenu des fichiers *.glsl, le shader de cet exemple - * NE permet QUE de dessiner des primitives colorées - * (pas de textures, brouillard, reflets de la lumière ou autres). - * - * Il est séparé en deux parties VERTEX et FRAGMENT. - * Le VERTEX : - * - récupère pour chaque sommet des primitives de couleur (dans - * l'attribut couleur) et de position (dans l'attribut sommet) - * - multiplie l'attribut sommet par les matrices 'vue_modele' et - * 'projection' et donne le résultat à OpenGL - * - passe la couleur au shader FRAGMENT. - * - * Le FRAGMENT : - * - applique la couleur qu'on lui donne - */ - - prog.addShaderFromSourceFile(QGLShader::Vertex, ":/vertex_shader.glsl"); - prog.addShaderFromSourceFile(QGLShader::Fragment, ":/fragment_shader.glsl"); - - /* Identifie les deux attributs du shader de cet exemple - * (voir vertex_shader.glsl). - * - * L'attribut identifié par 0 est particulier, il permet d'envoyer un - * nouveau "point" à OpenGL - * - * C'est pourquoi il devra obligatoirement être spécifié et en dernier - * (après la couleur dans cet exemple, voir plus bas). - */ - - prog.bindAttributeLocation("sommet", SommetId); - prog.bindAttributeLocation("couleur", CouleurId); - - // Compilation du shader OpenGL - prog.link(); - - // Activation du shader - prog.bind(); - - /* Activation du "Test de profondeur" et du "Back-face culling" - * Le Test de profondeur permet de dessiner un objet à l'arrière-plan - * partielement caché par d'autres objets. - * - * Le Back-face culling consiste à ne dessiner que les face avec ordre - * de déclaration dans le sens trigonométrique. - */ - glEnable(GL_DEPTH_TEST); - glEnable(GL_CULL_FACE); -} - -// ====================================================================== -void VueOpenGL::dessineCube (QMatrix4x4 const& point_de_vue) -{ - prog.setUniformValue("vue_modele", point_de_vue); - - glBegin(GL_QUADS); - // face coté X = +1 - prog.setAttributeValue(CouleurId, 1.0, 0.0, 0.0); // rouge - prog.setAttributeValue(SommetId, +1.0, -1.0, -1.0); - prog.setAttributeValue(SommetId, +1.0, +1.0, -1.0); - prog.setAttributeValue(SommetId, +1.0, +1.0, +1.0); - prog.setAttributeValue(SommetId, +1.0, -1.0, +1.0); - - // face coté X = -1 - prog.setAttributeValue(CouleurId, 0.0, 1.0, 0.0); // vert - prog.setAttributeValue(SommetId, -1.0, -1.0, -1.0); - prog.setAttributeValue(SommetId, -1.0, -1.0, +1.0); - prog.setAttributeValue(SommetId, -1.0, +1.0, +1.0); - prog.setAttributeValue(SommetId, -1.0, +1.0, -1.0); - - // face coté Y = +1 - prog.setAttributeValue(CouleurId, 0.0, 0.0, 1.0); // bleu - prog.setAttributeValue(SommetId, -1.0, +1.0, -1.0); - prog.setAttributeValue(SommetId, -1.0, +1.0, +1.0); - prog.setAttributeValue(SommetId, +1.0, +1.0, +1.0); - prog.setAttributeValue(SommetId, +1.0, +1.0, -1.0); - - // face coté Y = -1 - prog.setAttributeValue(CouleurId, 0.0, 1.0, 1.0); // cyan - prog.setAttributeValue(SommetId, -1.0, -1.0, -1.0); - prog.setAttributeValue(SommetId, +1.0, -1.0, -1.0); - prog.setAttributeValue(SommetId, +1.0, -1.0, +1.0); - prog.setAttributeValue(SommetId, -1.0, -1.0, +1.0); - - // face coté Z = +1 - prog.setAttributeValue(CouleurId, 1.0, 1.0, 0.0); // jaune - prog.setAttributeValue(SommetId, -1.0, -1.0, +1.0); - prog.setAttributeValue(SommetId, +1.0, -1.0, +1.0); - prog.setAttributeValue(SommetId, +1.0, +1.0, +1.0); - prog.setAttributeValue(SommetId, -1.0, +1.0, +1.0); - - // face coté Z = -1 - prog.setAttributeValue(CouleurId, 1.0, 0.0, 1.0); // magenta - prog.setAttributeValue(SommetId, -1.0, -1.0, -1.0); - prog.setAttributeValue(SommetId, -1.0, +1.0, -1.0); - prog.setAttributeValue(SommetId, +1.0, +1.0, -1.0); - prog.setAttributeValue(SommetId, +1.0, -1.0, -1.0); - - glEnd(); -} diff --git a/ex_03(TutoQt)/Qt_GL/vue_opengl.h b/ex_03(TutoQt)/Qt_GL/vue_opengl.h deleted file mode 100644 index b302182..0000000 --- a/ex_03(TutoQt)/Qt_GL/vue_opengl.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef VUEOPENGL_H -#define VUEOPENGL_H - -#include <QGLShaderProgram> // Classe qui regroupe les fonctions OpenGL liées aux shaders -#include <QMatrix4x4> -#include "support_a_dessin.h" - -class VueOpenGL : public SupportADessin { - public: - // méthode(s) de dessin (héritée(s) de SupportADessin) - virtual void dessine(Contenu const& a_dessiner) override; - - // méthode d'initialisation - void init(); - - // méthode set - void setProjection(QMatrix4x4 const& projection) - { prog.setUniformValue("projection", projection); } - - // méthode utilitaire offerte pour simplifier - void dessineCube(QMatrix4x4 const& point_de_vue = QMatrix4x4() ); - - private: - // Un shader OpenGL encapsulé dans une classe Qt - QGLShaderProgram prog; -}; - -#endif diff --git a/ex_03(TutoQt)/ex_03.pro b/ex_03(TutoQt)/ex_03.pro deleted file mode 100644 index 4caac76..0000000 --- a/ex_03(TutoQt)/ex_03.pro +++ /dev/null @@ -1,5 +0,0 @@ -TEMPLATE = subdirs - -SUBDIRS += \ - Qt_GL \ - text diff --git a/ex_03(TutoQt)/general/contenu.h b/ex_03(TutoQt)/general/contenu.h deleted file mode 100644 index 179fbb6..0000000 --- a/ex_03(TutoQt)/general/contenu.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef CONTENU_H -#define CONTENU_H - -#include "dessinable.h" -#include "support_a_dessin.h" - -class Contenu : public Dessinable { -public: - Contenu(SupportADessin* vue) - : Dessinable(vue) - {} - virtual ~Contenu() {} - - virtual void dessine() override - { support->dessine(*this); } -}; - -#endif // CONTENU_H diff --git a/ex_03(TutoQt)/general/dessinable.h b/ex_03(TutoQt)/general/dessinable.h deleted file mode 100644 index 7996eb8..0000000 --- a/ex_03(TutoQt)/general/dessinable.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef DESSINABLE_H -#define DESSINABLE_H - -class SupportADessin; - -class Dessinable { - public: - Dessinable(SupportADessin* support) - : support(support) - {} - virtual ~Dessinable() {} - virtual void dessine() = 0; - - protected: - /* Nous mettons un pointeur au lieu d'une référence * - * au cas où l'on voudrait changer de support (non * - * implémenté ici), ou même copier un dessinable, * - * échanger (swap) deux dessinables, etc. * - * Il n'est pas nécessaire d'implémenter une copie * - * profonde ici ; c'est bien une copie de surface * - * dont nous avons besoin. */ - SupportADessin* support; -}; - -#endif diff --git a/ex_03(TutoQt)/general/support_a_dessin.h b/ex_03(TutoQt)/general/support_a_dessin.h deleted file mode 100644 index aafaa33..0000000 --- a/ex_03(TutoQt)/general/support_a_dessin.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef SUPPORT_A_DESSIN_H -#define SUPPORT_A_DESSIN_H - -class Contenu; - -class SupportADessin -{ - public: - virtual ~SupportADessin() {} - - virtual void dessine(Contenu const& a_dessiner) = 0; - - /* Mettre ici toutes les méthodes nécessaires pour dessiner tous les - * objets que l'on veut dessiner. Par exemple : - * virtual void dessine(Nounours const& a_dessiner) = 0; - * virtual void dessine(Voiture const& a_dessiner) = 0; - */ -}; - -#endif diff --git a/ex_03(TutoQt)/text/main_text.cc b/ex_03(TutoQt)/text/main_text.cc deleted file mode 100644 index 3db2786..0000000 --- a/ex_03(TutoQt)/text/main_text.cc +++ /dev/null @@ -1,20 +0,0 @@ -#include <iostream> -#include "text_viewer.h" -#include "contenu.h" -using namespace std; - -int main() -{ - /* Nous voulons un support à dessin : * - * ici un TextViewer qui écrit sur cout */ - TextViewer ecran(cout); - - /* Nous voulons un contenu à dessiner, et que ce contenu * - * se dessine sur notre support à dessin précédent */ - Contenu c(&ecran); - - // Nous dessinons notre contenu - c.dessine(); - - return 0; -} diff --git a/ex_03(TutoQt)/text/text.pro b/ex_03(TutoQt)/text/text.pro deleted file mode 100644 index 2b62460..0000000 --- a/ex_03(TutoQt)/text/text.pro +++ /dev/null @@ -1,15 +0,0 @@ -QMAKE_CXXFLAGS += -std=c++11 - -TARGET = ex_03_text - -INCLUDEPATH = ../general - -SOURCES += \ - main_text.cc \ - text_viewer.cc - -HEADERS += \ - ../general/contenu.h \ - text_viewer.h \ - ../general/dessinable.h \ - ../general/support_a_dessin.h diff --git a/ex_03(TutoQt)/text/text_viewer.cc b/ex_03(TutoQt)/text/text_viewer.cc deleted file mode 100644 index 5ea6b26..0000000 --- a/ex_03(TutoQt)/text/text_viewer.cc +++ /dev/null @@ -1,13 +0,0 @@ -#include <iostream> // pour endl -#include "text_viewer.h" -#include "contenu.h" - -void TextViewer::dessine(Contenu const&) -{ - /* Dans ce premier exemple très simple, on n'utilise * - * pas l'argument Contenu. Nous ne l'avons donc pas nommé. */ - - flot << "un cube" << std::endl; - flot << "un autre cube à droite" << std::endl; - flot << "un 3e cube au dessus" << std::endl; -} diff --git a/ex_03(TutoQt)/text/text_viewer.h b/ex_03(TutoQt)/text/text_viewer.h deleted file mode 100644 index 7fcc9e4..0000000 --- a/ex_03(TutoQt)/text/text_viewer.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef TEXT_VIEWER_H -#define TEXT_VIEWER_H - -#include <iostream> -#include "support_a_dessin.h" - -class TextViewer : public SupportADessin { - public: - TextViewer(std::ostream& flot) - : flot(flot) - {} - virtual ~TextViewer() {} - - virtual void dessine(Contenu const& a_dessiner) override; - - private: - std::ostream& flot; -}; - -#endif diff --git a/ex_04(TutoQt)/Qt_GL/Qt_GL.pro b/ex_04(TutoQt)/Qt_GL/Qt_GL.pro deleted file mode 100644 index f2d52b8..0000000 --- a/ex_04(TutoQt)/Qt_GL/Qt_GL.pro +++ /dev/null @@ -1,24 +0,0 @@ -QT += opengl -QMAKE_CXXFLAGS += -std=c++11 - -greaterThan(QT_MAJOR_VERSION, 4): QT += widgets - -TARGET = ex_04_gl - -INCLUDEPATH = ../general - -SOURCES += \ - main_qt_gl.cc \ - glwidget.cc \ - vue_opengl.cc - -HEADERS += \ - glwidget.h \ - vertex_shader.h \ - vue_opengl.h \ - ../general/dessinable.h \ - ../general/support_a_dessin.h \ - ../general/contenu.h - -RESOURCES += \ - resource.qrc diff --git a/ex_04(TutoQt)/Qt_GL/fragment_shader.glsl b/ex_04(TutoQt)/Qt_GL/fragment_shader.glsl deleted file mode 100644 index 2f77fe7..0000000 --- a/ex_04(TutoQt)/Qt_GL/fragment_shader.glsl +++ /dev/null @@ -1,6 +0,0 @@ -varying vec3 ma_couleur; - -void main() -{ - gl_FragColor = vec4(ma_couleur, 1.0); -} diff --git a/ex_04(TutoQt)/Qt_GL/glwidget.cc b/ex_04(TutoQt)/Qt_GL/glwidget.cc deleted file mode 100644 index 5b4b9e1..0000000 --- a/ex_04(TutoQt)/Qt_GL/glwidget.cc +++ /dev/null @@ -1,107 +0,0 @@ -#include <QKeyEvent> -#include <QTimerEvent> -#include <QMatrix4x4> -#include "glwidget.h" - -// ====================================================================== -void GLWidget::initializeGL() -{ - vue.init(); -} - -// ====================================================================== -void GLWidget::resizeGL(int width, int height) -{ - /* On commance par dire sur quelle partie de la - * fenêtre OpenGL doit dessiner. - * Ici on lui demande de dessiner sur toute la fenêtre. - */ - glViewport(0, 0, width, height); - - /* Puis on modifie la matrice de projection du shader. - * Pour ce faire on crée une matrice identité (constructeur - * par défaut), on la multiplie par la droite par une matrice - * de perspective. - * Plus de détail sur cette matrice - * http://www.songho.ca/opengl/gl_projectionmatrix.html - * Puis on upload la matrice sur le shader à l'aide de la - * méthode de la classe VueOpenGL - */ - QMatrix4x4 matrice; - matrice.perspective(70.0, qreal(width) / qreal(height ? height : 1.0), 1e-3, 1e5); - vue.setProjection(matrice); -} - -// ====================================================================== -void GLWidget::paintGL() -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - c.dessine(); -} - - -// ====================================================================== -void GLWidget::keyPressEvent(QKeyEvent* event) -{ - constexpr double petit_angle(5.0); // en degrés - constexpr double petit_pas(1.0); - - switch (event->key()) { - - case Qt::Key_Left: - vue.rotate(petit_angle, 0.0, -1.0, 0.0); - break; - - case Qt::Key_Right: - vue.rotate(petit_angle, 0.0, +1.0, 0.0); - break; - - case Qt::Key_Up: - vue.rotate(petit_angle, -1.0, 0.0, 0.0); - break; - - case Qt::Key_Down: - vue.rotate(petit_angle, +1.0, 0.0, 0.0); - break; - - case Qt::Key_PageUp: - case Qt::Key_W: - vue.translate(0.0, 0.0, petit_pas); - break; - - case Qt::Key_PageDown: - case Qt::Key_S: - vue.translate(0.0, 0.0, -petit_pas); - break; - - case Qt::Key_A: - vue.translate( petit_pas, 0.0, 0.0); - break; - - case Qt::Key_D: - vue.translate(-petit_pas, 0.0, 0.0); - break; - - case Qt::Key_R: - vue.translate(0.0, -petit_pas, 0.0); - break; - - case Qt::Key_F: - vue.translate(0.0, petit_pas, 0.0); - break; - - case Qt::Key_Q: - vue.rotate(petit_angle, 0.0, 0.0, -1.0); - break; - - case Qt::Key_E: - vue.rotate(petit_angle, 0.0, 0.0, +1.0); - break; - - case Qt::Key_Home: - vue.initializePosition(); - break; - }; - - updateGL(); // redessine -} diff --git a/ex_04(TutoQt)/Qt_GL/glwidget.h b/ex_04(TutoQt)/Qt_GL/glwidget.h deleted file mode 100644 index 5541d1f..0000000 --- a/ex_04(TutoQt)/Qt_GL/glwidget.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef GLWIDGET_H -#define GLWIDGET_H - -#include <QGLWidget> // Classe pour faire une fenêtre OpenGL -#include "vue_opengl.h" -#include "contenu.h" - -class GLWidget : public QGLWidget -/* La fenêtre hérite de QGLWidget ; - * les événements (clavier, souris, temps) sont des méthodes virtuelles à redéfinir. - */ -{ -public: - GLWidget(QWidget* parent = nullptr) - : QGLWidget(parent) - , c(&vue) - {} - virtual ~GLWidget() {} - -private: - // Les 3 méthodes clés de la classe QGLWidget à réimplémenter - virtual void initializeGL() override; - virtual void resizeGL(int width, int height) override; - virtual void paintGL() override; - - // Méthodes de gestion d'évènements - virtual void keyPressEvent(QKeyEvent* event) override; - - // Vue : ce qu'il faut donner au contenu pour qu'il puisse se dessiner sur la vue - VueOpenGL vue; - - // objets à dessiner - Contenu c; -}; - -#endif // GLWIDGET_H diff --git a/ex_04(TutoQt)/Qt_GL/main_qt_gl.cc b/ex_04(TutoQt)/Qt_GL/main_qt_gl.cc deleted file mode 100644 index 60bb9a5..0000000 --- a/ex_04(TutoQt)/Qt_GL/main_qt_gl.cc +++ /dev/null @@ -1,11 +0,0 @@ -#include <QApplication> -#include "glwidget.h" - -int main(int argc, char* argv[]) -{ - QApplication a(argc, argv); - GLWidget w; - w.show(); - - return a.exec(); -} diff --git a/ex_04(TutoQt)/Qt_GL/resource.qrc b/ex_04(TutoQt)/Qt_GL/resource.qrc deleted file mode 100644 index 7329486..0000000 --- a/ex_04(TutoQt)/Qt_GL/resource.qrc +++ /dev/null @@ -1,6 +0,0 @@ -<RCC> - <qresource prefix="/"> - <file>fragment_shader.glsl</file> - <file>vertex_shader.glsl</file> - </qresource> -</RCC> diff --git a/ex_04(TutoQt)/Qt_GL/vertex_shader.glsl b/ex_04(TutoQt)/Qt_GL/vertex_shader.glsl deleted file mode 100644 index 7494cd6..0000000 --- a/ex_04(TutoQt)/Qt_GL/vertex_shader.glsl +++ /dev/null @@ -1,13 +0,0 @@ -attribute vec3 sommet; -attribute vec3 couleur; - -uniform mat4 projection; -uniform mat4 vue_modele; - -varying vec3 ma_couleur; - -void main() -{ - gl_Position = projection * vue_modele * vec4(sommet, 1.0); - ma_couleur = couleur; -} diff --git a/ex_04(TutoQt)/Qt_GL/vertex_shader.h b/ex_04(TutoQt)/Qt_GL/vertex_shader.h deleted file mode 100644 index 53e0582..0000000 --- a/ex_04(TutoQt)/Qt_GL/vertex_shader.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef VERTEX_SHADER_H -#define VERTEX_SHADER_H - -enum Vertex_Shader_Attribute_Id { - SommetId = 0, - CouleurId, -}; - -#endif diff --git a/ex_04(TutoQt)/Qt_GL/vue_opengl.cc b/ex_04(TutoQt)/Qt_GL/vue_opengl.cc deleted file mode 100644 index 7112331..0000000 --- a/ex_04(TutoQt)/Qt_GL/vue_opengl.cc +++ /dev/null @@ -1,164 +0,0 @@ -#include "vue_opengl.h" -#include "vertex_shader.h" // Identifiants Qt de nos différents attributs -#include "contenu.h" - -// ====================================================================== -void VueOpenGL::dessine(Contenu const& a_dessiner) -{ - Q_UNUSED(a_dessiner); // dans cet exemple simple on n'utilise pas le paramètre - - // Dessine le 1er cube (à l'origine) - dessineCube(); - - QMatrix4x4 matrice; - // Dessine le 2e cube - matrice.translate(0.0, 1.5, 0.0); - matrice.scale(0.25); - dessineCube(matrice); - - // Dessine le 3e cube - matrice.setToIdentity(); - matrice.translate(0.0, 0.0, 1.5); - matrice.scale(0.25); - matrice.rotate(45.0, 0.0, 1.0, 0.0); - dessineCube(matrice); -} - -// ====================================================================== -void VueOpenGL::init() -{ - /* Initialise notre vue OpenGL. - * Dans cet exemple, nous créons et activons notre shader. - * - * En raison du contenu des fichiers *.glsl, le shader de cet exemple - * NE permet QUE de dessiner des primitives colorées - * (pas de textures, brouillard, reflets de la lumière ou autres). - * - * Il est séparé en deux parties VERTEX et FRAGMENT. - * Le VERTEX : - * - récupère pour chaque sommet des primitives de couleur (dans - * l'attribut couleur) et de position (dans l'attribut sommet) - * - multiplie l'attribut sommet par les matrices 'vue_modele' et - * 'projection' et donne le résultat à OpenGL - * - passe la couleur au shader FRAGMENT. - * - * Le FRAGMENT : - * - applique la couleur qu'on lui donne - */ - - prog.addShaderFromSourceFile(QGLShader::Vertex, ":/vertex_shader.glsl"); - prog.addShaderFromSourceFile(QGLShader::Fragment, ":/fragment_shader.glsl"); - - /* Identifie les deux attributs du shader de cet exemple - * (voir vertex_shader.glsl). - * - * L'attribut identifié par 0 est particulier, il permet d'envoyer un - * nouveau "point" à OpenGL - * - * C'est pourquoi il devra obligatoirement être spécifié et en dernier - * (après la couleur dans cet exemple, voir plus bas). - */ - - prog.bindAttributeLocation("sommet", SommetId); - prog.bindAttributeLocation("couleur", CouleurId); - - // Compilation du shader OpenGL - prog.link(); - - // Activation du shader - prog.bind(); - - /* Activation du "Test de profondeur" et du "Back-face culling" - * Le Test de profondeur permet de dessiner un objet à l'arrière-plan - * partielement caché par d'autres objets. - * - * Le Back-face culling consiste à ne dessiner que les face avec ordre - * de déclaration dans le sens trigonométrique. - */ - glEnable(GL_DEPTH_TEST); - glEnable(GL_CULL_FACE); - - initializePosition(); -} - -// ====================================================================== -void VueOpenGL::initializePosition() -{ - // position initiale - matrice_vue.setToIdentity(); - matrice_vue.translate(0.0, 0.0, -4.0); - matrice_vue.rotate(60.0, 0.0, 1.0, 0.0); - matrice_vue.rotate(45.0, 0.0, 0.0, 1.0); -} - -// ====================================================================== -void VueOpenGL::translate(double x, double y, double z) -{ - /* Multiplie la matrice de vue par LA GAUCHE. - * Cela fait en sorte que la dernière modification apportée - * à la matrice soit appliquée en dernier (composition de fonctions). - */ - QMatrix4x4 translation_supplementaire; - translation_supplementaire.translate(x, y, z); - matrice_vue = translation_supplementaire * matrice_vue; -} - -// ====================================================================== -void VueOpenGL::rotate(double angle, double dir_x, double dir_y, double dir_z) -{ - // Multiplie la matrice de vue par LA GAUCHE - QMatrix4x4 rotation_supplementaire; - rotation_supplementaire.rotate(angle, dir_x, dir_y, dir_z); - matrice_vue = rotation_supplementaire * matrice_vue; -} - -// ====================================================================== -void VueOpenGL::dessineCube (QMatrix4x4 const& point_de_vue) -{ - prog.setUniformValue("vue_modele", matrice_vue * point_de_vue); - - glBegin(GL_QUADS); - // face coté X = +1 - prog.setAttributeValue(CouleurId, 1.0, 0.0, 0.0); // rouge - prog.setAttributeValue(SommetId, +1.0, -1.0, -1.0); - prog.setAttributeValue(SommetId, +1.0, +1.0, -1.0); - prog.setAttributeValue(SommetId, +1.0, +1.0, +1.0); - prog.setAttributeValue(SommetId, +1.0, -1.0, +1.0); - - // face coté X = -1 - prog.setAttributeValue(CouleurId, 0.0, 1.0, 0.0); // vert - prog.setAttributeValue(SommetId, -1.0, -1.0, -1.0); - prog.setAttributeValue(SommetId, -1.0, -1.0, +1.0); - prog.setAttributeValue(SommetId, -1.0, +1.0, +1.0); - prog.setAttributeValue(SommetId, -1.0, +1.0, -1.0); - - // face coté Y = +1 - prog.setAttributeValue(CouleurId, 0.0, 0.0, 1.0); // bleu - prog.setAttributeValue(SommetId, -1.0, +1.0, -1.0); - prog.setAttributeValue(SommetId, -1.0, +1.0, +1.0); - prog.setAttributeValue(SommetId, +1.0, +1.0, +1.0); - prog.setAttributeValue(SommetId, +1.0, +1.0, -1.0); - - // face coté Y = -1 - prog.setAttributeValue(CouleurId, 0.0, 1.0, 1.0); // cyan - prog.setAttributeValue(SommetId, -1.0, -1.0, -1.0); - prog.setAttributeValue(SommetId, +1.0, -1.0, -1.0); - prog.setAttributeValue(SommetId, +1.0, -1.0, +1.0); - prog.setAttributeValue(SommetId, -1.0, -1.0, +1.0); - - // face coté Z = +1 - prog.setAttributeValue(CouleurId, 1.0, 1.0, 0.0); // jaune - prog.setAttributeValue(SommetId, -1.0, -1.0, +1.0); - prog.setAttributeValue(SommetId, +1.0, -1.0, +1.0); - prog.setAttributeValue(SommetId, +1.0, +1.0, +1.0); - prog.setAttributeValue(SommetId, -1.0, +1.0, +1.0); - - // face coté Z = -1 - prog.setAttributeValue(CouleurId, 1.0, 0.0, 1.0); // magenta - prog.setAttributeValue(SommetId, -1.0, -1.0, -1.0); - prog.setAttributeValue(SommetId, -1.0, +1.0, -1.0); - prog.setAttributeValue(SommetId, +1.0, +1.0, -1.0); - prog.setAttributeValue(SommetId, +1.0, -1.0, -1.0); - - glEnd(); -} diff --git a/ex_04(TutoQt)/Qt_GL/vue_opengl.h b/ex_04(TutoQt)/Qt_GL/vue_opengl.h deleted file mode 100644 index 3e3772b..0000000 --- a/ex_04(TutoQt)/Qt_GL/vue_opengl.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef VUEOPENGL_H -#define VUEOPENGL_H - -#include <QGLShaderProgram> // Classe qui regroupe les fonctions OpenGL liées aux shaders -#include <QMatrix4x4> -#include "support_a_dessin.h" - -class VueOpenGL : public SupportADessin { - public: - // méthode(s) de dessin (héritée(s) de SupportADessin) - virtual void dessine(Contenu const& a_dessiner) override; - - // méthodes de (ré-)initialisation - void init(); - void initializePosition(); - - // méthode set - void setProjection(QMatrix4x4 const& projection) - { prog.setUniformValue("projection", projection); } - - // Méthodes set - void translate(double x, double y, double z); - void rotate(double angle, double dir_x, double dir_y, double dir_z); - - // méthode utilitaire offerte pour simplifier - void dessineCube(QMatrix4x4 const& point_de_vue = QMatrix4x4() ); - - private: - // Un shader OpenGL encapsulé dans une classe Qt - QGLShaderProgram prog; - - // Caméra - QMatrix4x4 matrice_vue; -}; - -#endif diff --git a/ex_04(TutoQt)/ex_04.pro b/ex_04(TutoQt)/ex_04.pro deleted file mode 100644 index f092f0d..0000000 --- a/ex_04(TutoQt)/ex_04.pro +++ /dev/null @@ -1,4 +0,0 @@ -TEMPLATE = subdirs - -SUBDIRS += \ - Qt_GL diff --git a/ex_04(TutoQt)/general/contenu.h b/ex_04(TutoQt)/general/contenu.h deleted file mode 100644 index 179fbb6..0000000 --- a/ex_04(TutoQt)/general/contenu.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef CONTENU_H -#define CONTENU_H - -#include "dessinable.h" -#include "support_a_dessin.h" - -class Contenu : public Dessinable { -public: - Contenu(SupportADessin* vue) - : Dessinable(vue) - {} - virtual ~Contenu() {} - - virtual void dessine() override - { support->dessine(*this); } -}; - -#endif // CONTENU_H diff --git a/ex_04(TutoQt)/general/dessinable.h b/ex_04(TutoQt)/general/dessinable.h deleted file mode 100644 index 7996eb8..0000000 --- a/ex_04(TutoQt)/general/dessinable.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef DESSINABLE_H -#define DESSINABLE_H - -class SupportADessin; - -class Dessinable { - public: - Dessinable(SupportADessin* support) - : support(support) - {} - virtual ~Dessinable() {} - virtual void dessine() = 0; - - protected: - /* Nous mettons un pointeur au lieu d'une référence * - * au cas où l'on voudrait changer de support (non * - * implémenté ici), ou même copier un dessinable, * - * échanger (swap) deux dessinables, etc. * - * Il n'est pas nécessaire d'implémenter une copie * - * profonde ici ; c'est bien une copie de surface * - * dont nous avons besoin. */ - SupportADessin* support; -}; - -#endif diff --git a/ex_04(TutoQt)/general/support_a_dessin.h b/ex_04(TutoQt)/general/support_a_dessin.h deleted file mode 100644 index aafaa33..0000000 --- a/ex_04(TutoQt)/general/support_a_dessin.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef SUPPORT_A_DESSIN_H -#define SUPPORT_A_DESSIN_H - -class Contenu; - -class SupportADessin -{ - public: - virtual ~SupportADessin() {} - - virtual void dessine(Contenu const& a_dessiner) = 0; - - /* Mettre ici toutes les méthodes nécessaires pour dessiner tous les - * objets que l'on veut dessiner. Par exemple : - * virtual void dessine(Nounours const& a_dessiner) = 0; - * virtual void dessine(Voiture const& a_dessiner) = 0; - */ -}; - -#endif diff --git a/ex_05(TutoQt)/Qt_GL/Qt_GL.pro b/ex_05(TutoQt)/Qt_GL/Qt_GL.pro deleted file mode 100644 index 3379a03..0000000 --- a/ex_05(TutoQt)/Qt_GL/Qt_GL.pro +++ /dev/null @@ -1,27 +0,0 @@ -QT += opengl -QMAKE_CXXFLAGS += -std=c++11 - -greaterThan(QT_MAJOR_VERSION, 4): QT += widgets - -TARGET = ex_05_gl - -LIBS += -L../general -lgeneral -PRE_TARGETDEPS += ../general/libgeneral.a - -INCLUDEPATH = ../general - -SOURCES += \ - main_qt_gl.cc \ - glwidget.cc \ - vue_opengl.cc - -HEADERS += \ - glwidget.h \ - vertex_shader.h \ - vue_opengl.h \ - ../general/dessinable.h \ - ../general/support_a_dessin.h \ - ../general/contenu.h - -RESOURCES += \ - resource.qrc diff --git a/ex_05(TutoQt)/Qt_GL/fragment_shader.glsl b/ex_05(TutoQt)/Qt_GL/fragment_shader.glsl deleted file mode 100644 index 2f77fe7..0000000 --- a/ex_05(TutoQt)/Qt_GL/fragment_shader.glsl +++ /dev/null @@ -1,6 +0,0 @@ -varying vec3 ma_couleur; - -void main() -{ - gl_FragColor = vec4(ma_couleur, 1.0); -} diff --git a/ex_05(TutoQt)/Qt_GL/glwidget.cc b/ex_05(TutoQt)/Qt_GL/glwidget.cc deleted file mode 100644 index 73c860a..0000000 --- a/ex_05(TutoQt)/Qt_GL/glwidget.cc +++ /dev/null @@ -1,137 +0,0 @@ -#include <QKeyEvent> -#include <QTimerEvent> -#include <QMatrix4x4> -#include "glwidget.h" - -// ====================================================================== -void GLWidget::initializeGL() -{ - vue.init(); - timerId = startTimer(20); -} - -// ====================================================================== -void GLWidget::resizeGL(int width, int height) -{ - /* On commance par dire sur quelle partie de la - * fenêtre OpenGL doit dessiner. - * Ici on lui demande de dessiner sur toute la fenêtre. - */ - glViewport(0, 0, width, height); - - /* Puis on modifie la matrice de projection du shader. - * Pour ce faire on crée une matrice identité (constructeur - * par défaut), on la multiplie par la droite par une matrice - * de perspective. - * Plus de détail sur cette matrice - * http://www.songho.ca/opengl/gl_projectionmatrix.html - * Puis on upload la matrice sur le shader à l'aide de la - * méthode de la classe VueOpenGL - */ - QMatrix4x4 matrice; - matrice.perspective(70.0, qreal(width) / qreal(height ? height : 1.0), 1e-3, 1e5); - vue.setProjection(matrice); -} - -// ====================================================================== -void GLWidget::paintGL() -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - c.dessine(); -} - - -// ====================================================================== -void GLWidget::keyPressEvent(QKeyEvent* event) -{ - constexpr double petit_angle(5.0); // en degrés - constexpr double petit_pas(1.0); - - switch (event->key()) { - - case Qt::Key_Left: - vue.rotate(petit_angle, 0.0, -1.0, 0.0); - break; - - case Qt::Key_Right: - vue.rotate(petit_angle, 0.0, +1.0, 0.0); - break; - - case Qt::Key_Up: - vue.rotate(petit_angle, -1.0, 0.0, 0.0); - break; - - case Qt::Key_Down: - vue.rotate(petit_angle, +1.0, 0.0, 0.0); - break; - - case Qt::Key_PageUp: - case Qt::Key_W: - vue.translate(0.0, 0.0, petit_pas); - break; - - case Qt::Key_PageDown: - case Qt::Key_S: - vue.translate(0.0, 0.0, -petit_pas); - break; - - case Qt::Key_A: - vue.translate( petit_pas, 0.0, 0.0); - break; - - case Qt::Key_D: - vue.translate(-petit_pas, 0.0, 0.0); - break; - - case Qt::Key_R: - vue.translate(0.0, -petit_pas, 0.0); - break; - - case Qt::Key_F: - vue.translate(0.0, petit_pas, 0.0); - break; - - case Qt::Key_Q: - vue.rotate(petit_angle, 0.0, 0.0, -1.0); - break; - - case Qt::Key_E: - vue.rotate(petit_angle, 0.0, 0.0, +1.0); - break; - - case Qt::Key_Home: - vue.initializePosition(); - break; - - case Qt::Key_Space: - pause(); - break; - }; - - updateGL(); // redessine -} - -// ====================================================================== -void GLWidget::timerEvent(QTimerEvent* event) -{ - Q_UNUSED(event); - - double dt = chronometre.restart() / 1000.0; - - c.evolue(dt); - updateGL(); -} - -// ====================================================================== -void GLWidget::pause() -{ - if (timerId == 0) { - // dans ce cas le timer ne tourne pas alors on le lance - timerId = startTimer(20); - chronometre.restart(); - } else { - // le timer tourne alors on l'arrête - killTimer(timerId); - timerId = 0; - } -} diff --git a/ex_05(TutoQt)/Qt_GL/glwidget.h b/ex_05(TutoQt)/Qt_GL/glwidget.h deleted file mode 100644 index 8154664..0000000 --- a/ex_05(TutoQt)/Qt_GL/glwidget.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef GLWIDGET_H -#define GLWIDGET_H - -#include <QGLWidget> // Classe pour faire une fenêtre OpenGL -#include <QTime> // Classe pour gérer le temps -#include "vue_opengl.h" -#include "contenu.h" - -class GLWidget : public QGLWidget -/* La fenêtre hérite de QGLWidget ; - * les événements (clavier, souris, temps) sont des méthodes virtuelles à redéfinir. - */ -{ -public: - GLWidget(QWidget* parent = nullptr) - : QGLWidget(parent) - , c(&vue) - {} - virtual ~GLWidget() {} - -private: - // Les 3 méthodes clés de la classe QGLWidget à réimplémenter - virtual void initializeGL() override; - virtual void resizeGL(int width, int height) override; - virtual void paintGL() override; - - // Méthodes de gestion d'évènements - virtual void keyPressEvent(QKeyEvent* event) override; - virtual void timerEvent(QTimerEvent* event) override; - - // Méthodes de gestion interne - void pause(); - - // Vue : ce qu'il faut donner au contenu pour qu'il puisse se dessiner sur la vue - VueOpenGL vue; - - // Timer - int timerId; - // pour faire évoluer les objets avec le bon "dt" - QTime chronometre; - - // objets à dessiner, faire évoluer - Contenu c; -}; - -#endif // GLWIDGET_H diff --git a/ex_05(TutoQt)/Qt_GL/main_qt_gl.cc b/ex_05(TutoQt)/Qt_GL/main_qt_gl.cc deleted file mode 100644 index 60bb9a5..0000000 --- a/ex_05(TutoQt)/Qt_GL/main_qt_gl.cc +++ /dev/null @@ -1,11 +0,0 @@ -#include <QApplication> -#include "glwidget.h" - -int main(int argc, char* argv[]) -{ - QApplication a(argc, argv); - GLWidget w; - w.show(); - - return a.exec(); -} diff --git a/ex_05(TutoQt)/Qt_GL/resource.qrc b/ex_05(TutoQt)/Qt_GL/resource.qrc deleted file mode 100644 index 7329486..0000000 --- a/ex_05(TutoQt)/Qt_GL/resource.qrc +++ /dev/null @@ -1,6 +0,0 @@ -<RCC> - <qresource prefix="/"> - <file>fragment_shader.glsl</file> - <file>vertex_shader.glsl</file> - </qresource> -</RCC> diff --git a/ex_05(TutoQt)/Qt_GL/vertex_shader.glsl b/ex_05(TutoQt)/Qt_GL/vertex_shader.glsl deleted file mode 100644 index 7494cd6..0000000 --- a/ex_05(TutoQt)/Qt_GL/vertex_shader.glsl +++ /dev/null @@ -1,13 +0,0 @@ -attribute vec3 sommet; -attribute vec3 couleur; - -uniform mat4 projection; -uniform mat4 vue_modele; - -varying vec3 ma_couleur; - -void main() -{ - gl_Position = projection * vue_modele * vec4(sommet, 1.0); - ma_couleur = couleur; -} diff --git a/ex_05(TutoQt)/Qt_GL/vertex_shader.h b/ex_05(TutoQt)/Qt_GL/vertex_shader.h deleted file mode 100644 index 53e0582..0000000 --- a/ex_05(TutoQt)/Qt_GL/vertex_shader.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef VERTEX_SHADER_H -#define VERTEX_SHADER_H - -enum Vertex_Shader_Attribute_Id { - SommetId = 0, - CouleurId, -}; - -#endif diff --git a/ex_05(TutoQt)/Qt_GL/vue_opengl.cc b/ex_05(TutoQt)/Qt_GL/vue_opengl.cc deleted file mode 100644 index 2803cd1..0000000 --- a/ex_05(TutoQt)/Qt_GL/vue_opengl.cc +++ /dev/null @@ -1,169 +0,0 @@ -#include "vue_opengl.h" -#include "vertex_shader.h" // Identifiants Qt de nos différents attributs -#include "contenu.h" - -// ====================================================================== -void VueOpenGL::dessine(Contenu const& a_dessiner) -{ - // Dessine le 1er cube (à l'origine) - dessineCube(); - - QMatrix4x4 matrice; - // Dessine le 2e cube - matrice.translate(0.0, 1.5, 0.0); - matrice.scale(0.25); - dessineCube(matrice); - - // Dessine le 3e cube - matrice.setToIdentity(); - matrice.translate(0.0, 0.0, 1.5); - matrice.scale(0.25); - matrice.rotate(45.0, 0.0, 1.0, 0.0); - dessineCube(matrice); - - // Dessine le 4e cube - matrice.setToIdentity(); - matrice.rotate(a_dessiner.infos(), 1.0, 0.0, 0.0); - matrice.translate(0.0, 2.3, 0.0); - matrice.scale(0.2); - dessineCube(matrice); -} - -// ====================================================================== -void VueOpenGL::init() -{ - /* Initialise notre vue OpenGL. - * Dans cet exemple, nous créons et activons notre shader. - * - * En raison du contenu des fichiers *.glsl, le shader de cet exemple - * NE permet QUE de dessiner des primitives colorées - * (pas de textures, brouillard, reflets de la lumière ou autres). - * - * Il est séparé en deux parties VERTEX et FRAGMENT. - * Le VERTEX : - * - récupère pour chaque sommet des primitives de couleur (dans - * l'attribut couleur) et de position (dans l'attribut sommet) - * - multiplie l'attribut sommet par les matrices 'vue_modele' et - * 'projection' et donne le résultat à OpenGL - * - passe la couleur au shader FRAGMENT. - * - * Le FRAGMENT : - * - applique la couleur qu'on lui donne - */ - - prog.addShaderFromSourceFile(QGLShader::Vertex, ":/vertex_shader.glsl"); - prog.addShaderFromSourceFile(QGLShader::Fragment, ":/fragment_shader.glsl"); - - /* Identifie les deux attributs du shader de cet exemple - * (voir vertex_shader.glsl). - * - * L'attribut identifié par 0 est particulier, il permet d'envoyer un - * nouveau "point" à OpenGL - * - * C'est pourquoi il devra obligatoirement être spécifié et en dernier - * (après la couleur dans cet exemple, voir plus bas). - */ - - prog.bindAttributeLocation("sommet", SommetId); - prog.bindAttributeLocation("couleur", CouleurId); - - // Compilation du shader OpenGL - prog.link(); - - // Activation du shader - prog.bind(); - - /* Activation du "Test de profondeur" et du "Back-face culling" - * Le Test de profondeur permet de dessiner un objet à l'arrière-plan - * partielement caché par d'autres objets. - * - * Le Back-face culling consiste à ne dessiner que les face avec ordre - * de déclaration dans le sens trigonométrique. - */ - glEnable(GL_DEPTH_TEST); - glEnable(GL_CULL_FACE); - - initializePosition(); -} - -// ====================================================================== -void VueOpenGL::initializePosition() -{ - // position initiale - matrice_vue.setToIdentity(); - matrice_vue.translate(0.0, 0.0, -4.0); - matrice_vue.rotate(60.0, 0.0, 1.0, 0.0); - matrice_vue.rotate(45.0, 0.0, 0.0, 1.0); -} - -// ====================================================================== -void VueOpenGL::translate(double x, double y, double z) -{ - /* Multiplie la matrice de vue par LA GAUCHE. - * Cela fait en sorte que la dernière modification apportée - * à la matrice soit appliquée en dernier (composition de fonctions). - */ - QMatrix4x4 translation_supplementaire; - translation_supplementaire.translate(x, y, z); - matrice_vue = translation_supplementaire * matrice_vue; -} - -// ====================================================================== -void VueOpenGL::rotate(double angle, double dir_x, double dir_y, double dir_z) -{ - // Multiplie la matrice de vue par LA GAUCHE - QMatrix4x4 rotation_supplementaire; - rotation_supplementaire.rotate(angle, dir_x, dir_y, dir_z); - matrice_vue = rotation_supplementaire * matrice_vue; -} - -// ====================================================================== -void VueOpenGL::dessineCube (QMatrix4x4 const& point_de_vue) -{ - prog.setUniformValue("vue_modele", matrice_vue * point_de_vue); - - glBegin(GL_QUADS); - // face coté X = +1 - prog.setAttributeValue(CouleurId, 1.0, 0.0, 0.0); // rouge - prog.setAttributeValue(SommetId, +1.0, -1.0, -1.0); - prog.setAttributeValue(SommetId, +1.0, +1.0, -1.0); - prog.setAttributeValue(SommetId, +1.0, +1.0, +1.0); - prog.setAttributeValue(SommetId, +1.0, -1.0, +1.0); - - // face coté X = -1 - prog.setAttributeValue(CouleurId, 0.0, 1.0, 0.0); // vert - prog.setAttributeValue(SommetId, -1.0, -1.0, -1.0); - prog.setAttributeValue(SommetId, -1.0, -1.0, +1.0); - prog.setAttributeValue(SommetId, -1.0, +1.0, +1.0); - prog.setAttributeValue(SommetId, -1.0, +1.0, -1.0); - - // face coté Y = +1 - prog.setAttributeValue(CouleurId, 0.0, 0.0, 1.0); // bleu - prog.setAttributeValue(SommetId, -1.0, +1.0, -1.0); - prog.setAttributeValue(SommetId, -1.0, +1.0, +1.0); - prog.setAttributeValue(SommetId, +1.0, +1.0, +1.0); - prog.setAttributeValue(SommetId, +1.0, +1.0, -1.0); - - // face coté Y = -1 - prog.setAttributeValue(CouleurId, 0.0, 1.0, 1.0); // cyan - prog.setAttributeValue(SommetId, -1.0, -1.0, -1.0); - prog.setAttributeValue(SommetId, +1.0, -1.0, -1.0); - prog.setAttributeValue(SommetId, +1.0, -1.0, +1.0); - prog.setAttributeValue(SommetId, -1.0, -1.0, +1.0); - - // face coté Z = +1 - prog.setAttributeValue(CouleurId, 1.0, 1.0, 0.0); // jaune - prog.setAttributeValue(SommetId, -1.0, -1.0, +1.0); - prog.setAttributeValue(SommetId, +1.0, -1.0, +1.0); - prog.setAttributeValue(SommetId, +1.0, +1.0, +1.0); - prog.setAttributeValue(SommetId, -1.0, +1.0, +1.0); - - // face coté Z = -1 - prog.setAttributeValue(CouleurId, 1.0, 0.0, 1.0); // magenta - prog.setAttributeValue(SommetId, -1.0, -1.0, -1.0); - prog.setAttributeValue(SommetId, -1.0, +1.0, -1.0); - prog.setAttributeValue(SommetId, +1.0, +1.0, -1.0); - prog.setAttributeValue(SommetId, +1.0, -1.0, -1.0); - - glEnd(); -} diff --git a/ex_05(TutoQt)/Qt_GL/vue_opengl.h b/ex_05(TutoQt)/Qt_GL/vue_opengl.h deleted file mode 100644 index 3e3772b..0000000 --- a/ex_05(TutoQt)/Qt_GL/vue_opengl.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef VUEOPENGL_H -#define VUEOPENGL_H - -#include <QGLShaderProgram> // Classe qui regroupe les fonctions OpenGL liées aux shaders -#include <QMatrix4x4> -#include "support_a_dessin.h" - -class VueOpenGL : public SupportADessin { - public: - // méthode(s) de dessin (héritée(s) de SupportADessin) - virtual void dessine(Contenu const& a_dessiner) override; - - // méthodes de (ré-)initialisation - void init(); - void initializePosition(); - - // méthode set - void setProjection(QMatrix4x4 const& projection) - { prog.setUniformValue("projection", projection); } - - // Méthodes set - void translate(double x, double y, double z); - void rotate(double angle, double dir_x, double dir_y, double dir_z); - - // méthode utilitaire offerte pour simplifier - void dessineCube(QMatrix4x4 const& point_de_vue = QMatrix4x4() ); - - private: - // Un shader OpenGL encapsulé dans une classe Qt - QGLShaderProgram prog; - - // Caméra - QMatrix4x4 matrice_vue; -}; - -#endif diff --git a/ex_05(TutoQt)/ex_05.pro b/ex_05(TutoQt)/ex_05.pro deleted file mode 100644 index 66a76d6..0000000 --- a/ex_05(TutoQt)/ex_05.pro +++ /dev/null @@ -1,10 +0,0 @@ -TEMPLATE = subdirs - -SUBDIRS += \ - general \ - Qt_GL \ - text - -Qt_GL.depends = general - -text.depends = general diff --git a/ex_05(TutoQt)/general/contenu.cc b/ex_05(TutoQt)/general/contenu.cc deleted file mode 100644 index 35f2a63..0000000 --- a/ex_05(TutoQt)/general/contenu.cc +++ /dev/null @@ -1,8 +0,0 @@ -#include "contenu.h" - -// ====================================================================== -void Contenu::evolue(double dt) -{ - constexpr double omega(100.0); - angle += omega * dt; -} diff --git a/ex_05(TutoQt)/general/contenu.h b/ex_05(TutoQt)/general/contenu.h deleted file mode 100644 index 0940c2a..0000000 --- a/ex_05(TutoQt)/general/contenu.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef CONTENU_H -#define CONTENU_H - -#include "dessinable.h" -#include "support_a_dessin.h" - -class Contenu : public Dessinable { -public: - Contenu(SupportADessin* vue) - : Dessinable(vue), angle(0.0) - {} - virtual ~Contenu() {} - - virtual void dessine() override - { support->dessine(*this); } - - void evolue(double dt); - - // accesseur - double infos() const { return angle; } - -private: - double angle; /* pour le mouvement ; - dans cet exemple, juste une rotation - au cours du temps */ -}; - -#endif // CONTENU_H diff --git a/ex_05(TutoQt)/general/dessinable.h b/ex_05(TutoQt)/general/dessinable.h deleted file mode 100644 index 7996eb8..0000000 --- a/ex_05(TutoQt)/general/dessinable.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef DESSINABLE_H -#define DESSINABLE_H - -class SupportADessin; - -class Dessinable { - public: - Dessinable(SupportADessin* support) - : support(support) - {} - virtual ~Dessinable() {} - virtual void dessine() = 0; - - protected: - /* Nous mettons un pointeur au lieu d'une référence * - * au cas où l'on voudrait changer de support (non * - * implémenté ici), ou même copier un dessinable, * - * échanger (swap) deux dessinables, etc. * - * Il n'est pas nécessaire d'implémenter une copie * - * profonde ici ; c'est bien une copie de surface * - * dont nous avons besoin. */ - SupportADessin* support; -}; - -#endif diff --git a/ex_05(TutoQt)/general/general.pro b/ex_05(TutoQt)/general/general.pro deleted file mode 100644 index 7cd6f6e..0000000 --- a/ex_05(TutoQt)/general/general.pro +++ /dev/null @@ -1,12 +0,0 @@ -QMAKE_CXXFLAGS += -std=c++11 - -TEMPLATE = lib - -CONFIG = staticlib - -SOURCES = contenu.cc - -HEADERS += \ - contenu.h \ - dessinable.h \ - support_a_dessin.h diff --git a/ex_05(TutoQt)/general/support_a_dessin.h b/ex_05(TutoQt)/general/support_a_dessin.h deleted file mode 100644 index aafaa33..0000000 --- a/ex_05(TutoQt)/general/support_a_dessin.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef SUPPORT_A_DESSIN_H -#define SUPPORT_A_DESSIN_H - -class Contenu; - -class SupportADessin -{ - public: - virtual ~SupportADessin() {} - - virtual void dessine(Contenu const& a_dessiner) = 0; - - /* Mettre ici toutes les méthodes nécessaires pour dessiner tous les - * objets que l'on veut dessiner. Par exemple : - * virtual void dessine(Nounours const& a_dessiner) = 0; - * virtual void dessine(Voiture const& a_dessiner) = 0; - */ -}; - -#endif diff --git a/ex_05(TutoQt)/text/main_text.cc b/ex_05(TutoQt)/text/main_text.cc deleted file mode 100644 index 768bb5d..0000000 --- a/ex_05(TutoQt)/text/main_text.cc +++ /dev/null @@ -1,23 +0,0 @@ -#include <iostream> -#include "text_viewer.h" -#include "contenu.h" -using namespace std; - -int main() -{ - TextViewer ecran(cout); - Contenu c(&ecran); - - cout << "Au départ :" << endl; - c.dessine(); - - c.evolue(0.1); - cout << "Après un pas de calcul :" << endl; - c.dessine(); - - c.evolue(0.1); - cout << "Après deux pas de calcul :" << endl; - c.dessine(); - - return 0; -} diff --git a/ex_05(TutoQt)/text/text.pro b/ex_05(TutoQt)/text/text.pro deleted file mode 100644 index 2b4f414..0000000 --- a/ex_05(TutoQt)/text/text.pro +++ /dev/null @@ -1,18 +0,0 @@ -QMAKE_CXXFLAGS += -std=c++11 - -TARGET = ex_05_text - -LIBS += -L../general -lgeneral -PRE_TARGETDEPS += ../general/libgeneral.a - -INCLUDEPATH = ../general - -SOURCES += \ - main_text.cc \ - text_viewer.cc - -HEADERS += \ - ../general/contenu.h \ - text_viewer.h \ - ../general/dessinable.h \ - ../general/support_a_dessin.h diff --git a/ex_05(TutoQt)/text/text_viewer.cc b/ex_05(TutoQt)/text/text_viewer.cc deleted file mode 100644 index 33d95b2..0000000 --- a/ex_05(TutoQt)/text/text_viewer.cc +++ /dev/null @@ -1,8 +0,0 @@ -#include <iostream> // pour endl -#include "text_viewer.h" -#include "contenu.h" - -void TextViewer::dessine(Contenu const& a_dessiner) -{ - flot << a_dessiner.infos() << std::endl; -} diff --git a/ex_05(TutoQt)/text/text_viewer.h b/ex_05(TutoQt)/text/text_viewer.h deleted file mode 100644 index 7fcc9e4..0000000 --- a/ex_05(TutoQt)/text/text_viewer.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef TEXT_VIEWER_H -#define TEXT_VIEWER_H - -#include <iostream> -#include "support_a_dessin.h" - -class TextViewer : public SupportADessin { - public: - TextViewer(std::ostream& flot) - : flot(flot) - {} - virtual ~TextViewer() {} - - virtual void dessine(Contenu const& a_dessiner) override; - - private: - std::ostream& flot; -}; - -#endif