Welcome, Guest. Please login or register. Did you miss your activation email?

Author Topic: [Résolu][OpenGL] Ecran noir (Premier Triangle)  (Read 5355 times)

0 Members and 1 Guest are viewing this topic.

Daymo

  • Newbie
  • *
  • Posts: 19
    • View Profile
[Résolu][OpenGL] Ecran noir (Premier Triangle)
« on: October 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 !
« Last Edit: October 10, 2012, 01:59:10 pm by Daymo »
"C'est en forgeant qu'on devient musicien" - Les Shadocks

Laurent

  • Administrator
  • Hero Member
  • *****
  • Posts: 32498
    • View Profile
    • SFML's website
    • Email
Re : [OpenGL] Ecran noir
« Reply #1 on: October 08, 2012, 11:45:09 pm »
Et pourquoi serait-il blanc ce triangle ?
Laurent Gomila - SFML developer

Daymo

  • Newbie
  • *
  • Posts: 19
    • View Profile
Re : [OpenGL] Ecran noir
« Reply #2 on: October 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
  • *
  • Posts: 19
    • View Profile
Re : [OpenGL] Ecran noir
« Reply #3 on: October 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
  • *****
  • Posts: 32498
    • View Profile
    • SFML's website
    • Email
Re : [OpenGL] Ecran noir
« Reply #4 on: October 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
  • *
  • Posts: 19
    • View Profile
[Résolu][OpenGL 3.1] Ecran noir (Premier triangle)
« Reply #5 on: October 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
  • ****
  • Posts: 493
    • View Profile
Re : [Résolu][OpenGL] Ecran noir (Premier Triangle)
« Reply #6 on: October 22, 2012, 08:58:50 pm »
Post le code qui fonctionne s'il te plait, ça m'intéresse. :]

 

anything