Forum de la communauté SFML

Aide => Fenêtrage => Discussion démarrée par: Tyr le Février 04, 2013, 04:04:11 pm

Titre: [Résolu] SFML et OpenGL
Posté par: Tyr le Février 04, 2013, 04:04:11 pm
Rebonjour,

Me revoilà avec un nouveau problème : je cherche à afficher des images 2D via SFML au sein d'un affichage 3D géré par OpenGL. Or, mon image 2D ne s'affiche pas, ou encore, elle s'affiche, mais le décor 3D ne s'affiche, lui, pas ; d'où ce problème vient-il ?
Voici mon code (attention c'est le bazar, y'a tout et n'importe quoi^^) :

// Includes nécessaires
#include "SceneManager.h"
#include "Game/Scenes/TitleScreen.h"
#include "ScriptingEngine/LuaDatabase.h"

#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include <GL/gl.h>
#include <GL/glu.h>

// Namespaces utilisés
using namespace sf;

// Point d'entrée du programme
int main()
{
    LuaDatabase lua;
    lua.setWindowSize();
    lua.setWindowTitle();

    // Fenêtre de rendu
    RenderWindow *app =
        new RenderWindow(VideoMode(lua.getWindowSize().width, lua.getWindowSize().height), lua.getWindowTitle());


    // Gestionnaire de scène
    SceneManager *sceneManager = new SceneManager(app);
    Sprite sprite;
    Image img;
    img.LoadFromFile("Graphics/Pictures/Cursor.png");
    sprite.SetImage(img);
    // Create a clock for measuring time elapsed
    sf::Clock Clock;

    // Set color and depth clear value
    glClearDepth(1.f);
    glClearColor(0.f, 0.f, 0.f, 0.f);

    // Enable Z-buffer read and write
    glEnable(GL_DEPTH_TEST);
    glDepthMask(GL_TRUE);

    // Setup a perspective projection
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(90.f, 1.f, 1.f, 500.f);

    // Boucle principale
    while (app->IsOpened())
    {

        sprite.SetPosition(app->GetInput().GetMouseX(), app->GetInput().GetMouseY());
        sf::Event Event;
        while (app->GetEvent(Event))
        {
            // Close window : exit
            if (Event.Type == sf::Event::Closed)
                app->Close();

            // Escape key : exit
            if ((Event.Type == sf::Event::KeyPressed) && (Event.Key.Code == sf::Key::Escape))
                app->Close();

            // Resize event : adjust viewport
            if (Event.Type == sf::Event::Resized)
                glViewport(0, 0, Event.Size.Width, Event.Size.Height);
        }

        app->SetActive();

        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
        glTranslatef(0, 0, -200);
        glRotatef(Clock.GetElapsedTime() * 50, 1, 0, 0);
        glRotatef(Clock.GetElapsedTime() * 30, 0, 1, 0);
        glRotatef(Clock.GetElapsedTime() * 90, 0, 0, 1);

        glBegin(GL_QUADS);

            glVertex3f(-50.f, -50.f, -50.f);
            glVertex3f(-50.f,  50.f, -50.f);
            glVertex3f( 50.f,  50.f, -50.f);
            glVertex3f( 50.f, -50.f, -50.f);

            glVertex3f(-50.f, -50.f, 50.f);
            glVertex3f(-50.f,  50.f, 50.f);
            glVertex3f( 50.f,  50.f, 50.f);
            glVertex3f( 50.f, -50.f, 50.f);

            glVertex3f(-50.f, -50.f, -50.f);
            glVertex3f(-50.f,  50.f, -50.f);
            glVertex3f(-50.f,  50.f,  50.f);
            glVertex3f(-50.f, -50.f,  50.f);

            glVertex3f(50.f, -50.f, -50.f);
            glVertex3f(50.f,  50.f, -50.f);
            glVertex3f(50.f,  50.f,  50.f);
            glVertex3f(50.f, -50.f,  50.f);

            glVertex3f(-50.f, -50.f,  50.f);
            glVertex3f(-50.f, -50.f, -50.f);
            glVertex3f( 50.f, -50.f, -50.f);
            glVertex3f( 50.f, -50.f,  50.f);

            glVertex3f(-50.f, 50.f,  50.f);
            glVertex3f(-50.f, 50.f, -50.f);
            glVertex3f( 50.f, 50.f, -50.f);
            glVertex3f( 50.f, 50.f,  50.f);

        glEnd();

        app->Draw(sprite);
        app->Display();
    }

    // On libère l'espace mémoire alloué
    free(app);
    free(sceneManager);
    app = NULL;
    sceneManager = NULL;

    // Fin du programme
    return EXIT_SUCCESS;
}
 
Titre: Re : SFML et OpenGL
Posté par: Laurent le Février 04, 2013, 04:09:03 pm
app->PreserveOpenGLStates(true);
Titre: Re : SFML et OpenGL
Posté par: Tyr le Février 04, 2013, 04:10:53 pm
Merci !

De cette manière, je peux utiliser conjointement SFML et OpenGL ?
Par exemple, HUD / title screen / menu avec SFML et le reste avec OpenGL ? =O
Titre: Re : SFML et OpenGL
Posté par: Laurent le Février 04, 2013, 04:17:57 pm
Oui.
Titre: Re : SFML et OpenGL
Posté par: Tyr le Février 04, 2013, 04:18:27 pm
Super ! Merci !

Problème résolu.