1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
   | #include "scene.h"
#include "window.h"
#include "Shader.h"
#include <glm/glm.hpp>
#include <glm/gtx/transform.hpp>
#include <glm/gtc/type_ptr.hpp>
#include "scene.h"
SceneOpenGL::SceneOpenGL(QString titreFenetre, QGLFormat format) : m_titreFenetre(titreFenetre), m_contexteOpenGL(format)
{
    m_contexteOpenGL.create();
}
SceneOpenGL::~SceneOpenGL()
{
    m_fenetre->close();
}
void SceneOpenGL::bouclePrincipale()
{
    // Variables
 
    bool terminer(false);
    float vertices[] = {-0.5, -0.5, -1.0,   0.0, 0.5, -1.0,   0.5, -0.5, -1.0};
    float couleurs[] = {1.0, 0.0, 0.0,  0.0, 1.0, 0.0,  0.0, 0.0, 1.0};
 
 
    // Shader
    Shader shaderCouleur("C:\\Users\\Administrateur\\Desktop\\programmes\\OpenGL\\Shaders\\couleur3D.vert", "C:\\Users\\Administrateur\\Desktop\\programmes\\OpenGL\\Shaders\\couleur3D.frag", &m_contexteOpenGL);
    shaderCouleur.charger();
    // Matrices
    glm::mat4 projection;
    glm::mat4 modelview;
    projection = glm::perspective(70.0, (double) m_largeurFenetre / m_hauteurFenetre, 1.0, 100.0);
    modelview = glm::mat4(1.0);
 
    // Boucle principale
 
    while(!terminer)
    {
        // Nettoyage de l'écran
        glClear(GL_COLOR_BUFFER_BIT);
        // Réinitialisation de la matrice modelview
        modelview = glm::mat4(1.0);
        // On spécifie quel shader utiliser
        f.glUseProgram(shaderCouleur.getProgramID());
            // On remplie puis on active le tableau Vertex Attrib 0
            f.glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, vertices);
            f.glEnableVertexAttribArray(0);
            // Même chose avec le tableau Vertex Attrib 1
            f.glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, couleurs);
            f.glEnableVertexAttribArray(1);
            // On envoie les matrices au shader
            f.glUniformMatrix4fv(f.glGetUniformLocation(shaderCouleur.getProgramID(), "modelview"), 1, GL_FALSE, glm::value_ptr(modelview));
            f.glUniformMatrix4fv(f.glGetUniformLocation(shaderCouleur.getProgramID(), "projection"), 1, GL_FALSE, glm::value_ptr(projection));
            // On affiche le polygone
            glDrawArrays(GL_TRIANGLES, 0, 3);
            // On désactive les tableaux Vertex Attrib puisque l'on n'en a plus besoin
            f.glDisableVertexAttribArray(1);
            f.glDisableVertexAttribArray(0);
        // On n'utilise plus le shader
        f.glUseProgram(0);
        // Actualisation de la fenêtre
        m_fenetre->updateGL();
    }
}
bool SceneOpenGL::initialiserFenetre()
{
 
    // Création de la fenêtre
 
    QDesktopWidget bureau;
    QGLFormat format;
    format.setDoubleBuffer(true);
    QRect surface_bureau = bureau.screenGeometry();
    int w = surface_bureau.width()/2;
    int h = surface_bureau.height()/2;
    int x = w/2;
    int y = h/2;
    m_fenetre = new window(m_titreFenetre, x, y, w, h, &format);
    m_fenetre->setContext(&m_contexteOpenGL);
    m_fenetre->makeCurrent();
    f.initializeGLFunctions(&m_contexteOpenGL);
 
    if(m_fenetre == 0)
    {
        std::cout << "Erreur lors de la creation de la fenetre " << std::endl;
 
        return false;
    }
 
 
    if(m_contexteOpenGL.isValid() == false)
    {
        std::cout << "erreur contexte opengl" << std::endl;
        m_fenetre->close();
        delete m_fenetre;
        return false;
    }
    return true;
} | 
Partager