Forum de la communauté SFML

Aide => Fenêtrage => Discussion démarrée par: Daymo le Octobre 08, 2012, 10:02:12 pm

Titre: [Résolu][OpenGL] Ecran noir (Premier Triangle)
Posté par: Daymo le Octobre 08, 2012, 10:02:12 pm
Est ce normal que mon seul affichage soit une fenêtre noire avec ce code ? (Pas de triangle blanc ?) ^^

#include <iostream>


#ifdef WIN32
    #include <GL/glew.h>
#else
    #define GL3_PROTOTYPES 1
    #include <GL3/gl3.h>
#endif


#include <SFML_2.0/Window.hpp>
#include <SFML_2.0/OpenGL.hpp>


int main()
{
    // crée la fenêtre
    sf::Window MainWindow(sf::VideoMode(800, 600), "OpenGL", sf::Style::Default, sf::ContextSettings(24, 0, 0, 3, 1));
    MainWindow.setVerticalSyncEnabled(true);


    #ifdef WIN32


    GLenum InitialisationGLEW(glewInit());
    if(InitialisationGLEW != GLEW_OK)
    {
        // On affiche l'erreur grâce à la fonction : glewGetErrorString(GLenum code)
        std::cout << "Erreur d'initialisation de GLEW : " << glewGetErrorString(InitialisationGLEW) << std::endl;
        exit(-1);
    }


    #endif


    int vertices[] = {-0.5, -0.5,   0.0, 0.5,   0.5, -0.5};


    // la boucle principale
    while(MainWindow.isOpen())
    {
        // gestion des évènements
        sf::Event event;
        while (MainWindow.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
            {
                // on stoppe le programme
                MainWindow.close();
            }
        }


        glClear(GL_COLOR_BUFFER_BIT);


        glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, vertices);
        glEnableVertexAttribArray(0);


        glDrawArrays(GL_TRIANGLES, 0, 3);


        glDisableVertexAttribArray(0);


        MainWindow.display();
    }


    return 0;
}


Toute aide est bien venue !
Titre: Re : [OpenGL] Ecran noir
Posté par: Laurent le Octobre 08, 2012, 11:45:09 pm
Et pourquoi serait-il blanc ce triangle ?
Titre: Re : [OpenGL] Ecran noir
Posté par: Daymo le Octobre 09, 2012, 07:47:18 am
Le résultat attendu était un triangle blanc, mais c'est vrai qu'un triangle noir sur fond noir ne se remarque pas beaucoup...  ;D
Je vais tenter d'ajouter les Shaders et regarder ça avec un peu de couleur !
(Désolé pour les balises codes, je n'avais pas réussi à les faire fonctionner.)
Titre: Re : [OpenGL] Ecran noir
Posté par: Daymo le Octobre 09, 2012, 07:52:30 pm
Finalement les shaders ne changent rien... (A moins que je ne les utilise mal !)
Toujours aucun résultat :
#include <iostream>

#ifdef WIN32
    #include <GL/glew.h>
#else
    #define GL3_PROTOTYPES 1
    #include <GL3/gl3.h>
#endif

#include <SFML_2.0/Window.hpp>
#include <SFML_2.0/Graphics.hpp>
#include <SFML_2.0/OpenGL.hpp>

int main()
{
    // Crée la fenêtre
    sf::Window MainWindow(sf::VideoMode(800, 600), "OpenGL", sf::Style::Default, sf::ContextSettings(24, 0, 0, 3, 1));
    MainWindow.setVerticalSyncEnabled(true);

    // Chargement de Glew
#ifdef WIN32
    GLenum InitialisationGLEW(glewInit());
    if(InitialisationGLEW != GLEW_OK)
    {
        // On affiche l'erreur grâce à la fonction : glewGetErrorString(GLenum code)
        std::cout << "Erreur d'initialisation de GLEW : " << glewGetErrorString(InitialisationGLEW) << std::endl;
        exit(-1);
    }
#endif

    // Initialisation des tableaux
    int vertices[] = {-0.5, -0.5,   0.0, 0.5,   0.5, -0.5};
    float couleurs[] = {1.0, 0.0, 0.0,    0.0, 1.0, 0.0,    0.0, 0.0, 1.0};

    // Chargement des shaders
    sf::Shader Shader;
    Shader.loadFromFile("Shaders/couleurs_2D.vert", "Shaders/couleurs.frag");

    // La boucle principale
    while(MainWindow.isOpen())
    {
        // Gestion des évènements
        sf::Event event;
        while (MainWindow.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
            {
                // On stoppe le programme
                MainWindow.close();
            }
        }

        // On netoie l'écran
        glClear(GL_COLOR_BUFFER_BIT);

        // On rentre les valeurs de position (2D) dans le tableau Vertex Attrib 1
        glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, vertices);
        glEnableVertexAttribArray(0);

        // On rentre les valeurs de couleur (3D) dans le tableau Vertex Attrib 1
        glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, couleurs);
        glEnableVertexAttribArray(1);

        // On affiche le triangle grâce au shader
        Shader.bind();
        glDrawArrays(GL_TRIANGLES, 0, 3);
        Shader.unbind();

        // On désactive les tableaux Vertex Attrib
        glDisableVertexAttribArray(1);
        glDisableVertexAttribArray(0);

        // On affiche le résultat
        MainWindow.display();
    }

    return 0;
}

Avec les shaders tirés directement de la doc d'OpenGL :
// Vertex Shader
#version 140
 
in  vec3 in_Position;
in  vec3 in_Color;
out vec3 ex_Color;
 
void main(void)
{
    gl_Position = vec4(in_Position, 1.0);
    ex_Color = in_Color;
}


// Fragment Shader
#version 140
 
in  vec3 ex_Color;
out vec4 out_Color;
 
void main(void)
{
    out_Color = vec4(ex_Color,1.0);
}

En espérant que mon code soit clair et concis, et que l'erreur soit mienne (que je ne doive pas me tourner vers autre chose qu'SFML :-\).
Merci d'avance pour toute aide qui pourra m'être apportée !
Titre: Re : [OpenGL] Ecran noir
Posté par: Laurent le Octobre 09, 2012, 10:47:47 pm
Ton exemple de code vient d'où ? Tu es sûr qu'il est censé marcher ? (désolé je fais très peu d'OpenGL 3, alors je ne peux pas te dire en l'examinant s'il est ok ou non)
Titre: [Résolu][OpenGL 3.1] Ecran noir (Premier triangle)
Posté par: Daymo le Octobre 10, 2012, 01:25:35 pm
Ton exemple de code vient d'où ? Tu es sûr qu'il est censé marcher ?
Merci !!!
C'était la bonne question. ;D
Mon code venait du site du zero (original !), où il parrassait fonctionner avec un contexte SDL, je ne sait pas si on peut faire un rapprochement avec ça, mais dans mon contexte SFML, je n'ai pus afficher quelque chose qu'en utilisant les VBO !
J'ai été pas mal aidé par cette page (http://"http://www.opengl-tutorial.org/beginners-tutorials/tutorial-2-the-first-triangle/"), pour ceux que ça interresse. (Dois-je poster le code qui fonctionne ?)
Désolé pour le dérangement.  :-\
Titre: Re : [Résolu][OpenGL] Ecran noir (Premier Triangle)
Posté par: Spidyy le Octobre 22, 2012, 08:58:50 pm
Post le code qui fonctionne s'il te plait, ça m'intéresse. :]