Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [Résolu][OpenGL] Ecran noir (Premier Triangle)  (Lu 4086 fois)

0 Membres et 1 Invité sur ce sujet

Daymo

  • Newbie
  • *
  • Messages: 19
    • Voir le profil
[Résolu][OpenGL] Ecran noir (Premier Triangle)
« 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 !
« Modifié: Octobre 10, 2012, 01:59:10 pm par Daymo »
"C'est en forgeant qu'on devient musicien" - Les Shadocks

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : [OpenGL] Ecran noir
« Réponse #1 le: Octobre 08, 2012, 11:45:09 pm »
Et pourquoi serait-il blanc ce triangle ?
Laurent Gomila - SFML developer

Daymo

  • Newbie
  • *
  • Messages: 19
    • Voir le profil
Re : [OpenGL] Ecran noir
« Réponse #2 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.)
"C'est en forgeant qu'on devient musicien" - Les Shadocks

Daymo

  • Newbie
  • *
  • Messages: 19
    • Voir le profil
Re : [OpenGL] Ecran noir
« Réponse #3 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 !
"C'est en forgeant qu'on devient musicien" - Les Shadocks

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : [OpenGL] Ecran noir
« Réponse #4 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)
Laurent Gomila - SFML developer

Daymo

  • Newbie
  • *
  • Messages: 19
    • Voir le profil
[Résolu][OpenGL 3.1] Ecran noir (Premier triangle)
« Réponse #5 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, pour ceux que ça interresse. (Dois-je poster le code qui fonctionne ?)
Désolé pour le dérangement.  :-\
"C'est en forgeant qu'on devient musicien" - Les Shadocks

Spidyy

  • Sr. Member
  • ****
  • Messages: 493
    • Voir le profil
Re : [Résolu][OpenGL] Ecran noir (Premier Triangle)
« Réponse #6 le: Octobre 22, 2012, 08:58:50 pm »
Post le code qui fonctionne s'il te plait, ça m'intéresse. :]