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

Auteur Sujet: [Résolu] SFML et OpenGL  (Lu 2015 fois)

0 Membres et 1 Invité sur ce sujet

Tyr

  • Newbie
  • *
  • Messages: 23
    • Voir le profil
[Résolu] SFML et OpenGL
« 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;
}
 
« Modifié: Février 04, 2013, 04:18:42 pm par Tyr »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : SFML et OpenGL
« Réponse #1 le: Février 04, 2013, 04:09:03 pm »
app->PreserveOpenGLStates(true);
Laurent Gomila - SFML developer

Tyr

  • Newbie
  • *
  • Messages: 23
    • Voir le profil
Re : SFML et OpenGL
« Réponse #2 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

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : SFML et OpenGL
« Réponse #3 le: Février 04, 2013, 04:17:57 pm »
Oui.
Laurent Gomila - SFML developer

Tyr

  • Newbie
  • *
  • Messages: 23
    • Voir le profil
Re : SFML et OpenGL
« Réponse #4 le: Février 04, 2013, 04:18:27 pm »
Super ! Merci !

Problème résolu.