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

Auteur Sujet: SFML - Opengl Impossible de charger une texture  (Lu 1792 fois)

0 Membres et 1 Invité sur ce sujet

lufen34

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
SFML - Opengl Impossible de charger une texture
« le: Août 23, 2016, 12:18:56 am »
Bonjour, après plusieurs recherche en ligne sur les forums, sites etc .... Je n'arrive toujours pas à appliquer ma texture sur mon Cube 3d.

Le fichier ce charge comme il faut, j'ai vérifié si le problème venez pas de la couche "alpha" grâce a un post sur Stack Overflow etc ... Mais je suis bloqué depuis 18h maintenant et ça me fatigue ^^'.

Voici ou j'en suis actuelement :

Engine::Engine() : m_isMovingUp(false), m_isMovingDown(false), m_isMovingLeft(false), m_isMovingRight(false), m_context(24, 8, 4, 3, 3), m_angleX(0), m_angleZ(0)
{
        //Window settings
        m_win.create(sf::VideoMode(800, 600), "SFML Event and with some OpenGL graphics", sf::Style::Default, m_context);
        m_win.setFramerateLimit(144);
       
        //Opengl settings
        glEnable(GL_TEXTURE_2D);
}

void Engine::render()
{
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
        glEnable(GL_DEPTH_TEST);
        m_cam.viewChange(3, 3, 3, 0, 0, 0, 0, 0, 1);
        m_cam.view();
        cube();
        glFlush();
        m_win.display();
}

void Engine::cube()
{
        glRotated(m_angleX, 1, 0, 0);
        glRotated(m_angleZ, 0, 0, 1);
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
        loadTexture("/Data/test.jpg");
        glBegin(GL_QUADS);
        //face Rouge
        //glColor3ub(255, 0, 0);
        glTexCoord2d(0, 1); glVertex3d(1, 1, 1);
        glTexCoord2d(0, 0); glVertex3d(1, 1, -1);
        glTexCoord2d(1, 0); glVertex3d(-1, 1, -1);
        glTexCoord2d(1, 1); glVertex3d(-1, 1, 1);
        glBindTexture(GL_TEXTURE_2D, 0);

        //face verte
        glColor3ub(0, 255, 0);
        glVertex3d(1, -1, 1);
        glVertex3d(1, -1, -1);
        glVertex3d(1, 1, -1);
        glVertex3d(1, 1, 1);

        //face bleu
        glColor3ub(0, 0, 255);
        glVertex3d(1, -1, 1);
        glVertex3d(-1, -1, 1);
        glVertex3d(-1, -1, -1);
        glVertex3d(1, -1, -1);

        //face jaune
        glColor3ub(255, 255, 0);
        glVertex3d(-1, 1, 1);
        glVertex3d(-1, 1, -1);
        glVertex3d(-1, -1, -1);
        glVertex3d(-1, -1, 1);

        //face cyan
        glColor3ub(0, 255, 255);
        glVertex3d(1, 1, -1);
        glVertex3d(1, -1, -1);
        glVertex3d(-1, -1, -1);
        glVertex3d(-1, 1, -1);
       
        //face magenta
        glColor3ub(255, 0, 255);
        glVertex3d(1, -1, 1);
        glVertex3d(1, 1, 1);
        glVertex3d(-1, 1, 1);
        glVertex3d(-1, -1, 1);

        glEnd();
        glFlush();
}

GLuint Engine::loadTexture(string file)
{
        if (!m_image.loadFromFile(file))
                EXIT_FAILURE;
        glGenTextures(1, &m_textureID);
        glBindTexture(GL_TEXTURE_2D, m_textureID);
        glTexImage2D(GL_TEXTURE_2D, 0, 4, m_image.getSize().x, m_image.getSize().y, 0, GL_RGBA, GL_UNSIGNED_BYTE, m_image.getPixelsPtr());

        return m_textureID;
}

Je suis ouvert à tout conseil, critique constructif !

Merci pour votre aide !

PS : J'ai déjà tester la technique du "sf::Texture::bind(&texture);" comme dans la doc :(
« Modifié: Août 23, 2016, 02:05:37 pm par lufen34 »

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : SFML - Opengl Impossible de charger une texture
« Réponse #1 le: Août 23, 2016, 02:50:17 pm »
https://www.opengl.org/wiki/Common_Mistakes#Creating_a_complete_texture
Je pense que tu dois mettre GL_TEXTURE_BASE_LEVEL et GL_TEXTURE_MAX_LEVEL à 0 si tu génères pas plusieurs niveaux de mipmaps.
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0);
Ou mettre GL_TEXTURE_MIN_FILTER et GL_TEXTURE_MAG_FILTER à GL_LINEAR ou GL_NEAREST (au choix suivant ce que tu veux) pour pas utiliser de mipmap.
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

PS: je te conseille pas de charger ta texture à chaque frame (c'est long), tu peux la charger une seule fois avant. ;)
« Modifié: Août 23, 2016, 02:52:31 pm par G. »

lufen34

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
Re : SFML - Opengl Impossible de charger une texture
« Réponse #2 le: Août 23, 2016, 03:27:15 pm »
Hello !

Merci pour ta réponse ! Oui j'ai vue concernant le chargement à chaque frames haha je viens tout juste de le corriger !

Erf .. Jamais entendu parler de ces méthodes et des mipmaps :s je vais me renseigner et tenir au jus de mon avancement !

Merci beaucoup !

ps: ça marche toujours pas avec les deux param :(

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : SFML - Opengl Impossible de charger une texture
« Réponse #3 le: Août 23, 2016, 03:43:13 pm »
Je sais pas alors. En plus on sait même pas ce que ça t'affiche. Rien du tout ? Une face blanche ? Une face noire ?

Si t'avais un code minimal qui permet de tester en 1 copier/coller on pourrait tester. :p