Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre averti
    L'informatique c'est mystique! Supercherie graphique en Opengl + SFML
    Alors voilà, je viens de vivre quelque chose que je ne pourrais jamais expliquer sans votre aide
    Je suis en train de faire du mix SFML Opengl. Jusqu'ici rien de choquant.
    Ma scène est toute simple, elle consiste de deux quads. Le premier étant un terrain immense qui a pour texture une RenderTexture de SFML (je bind avec un sf.Texture.bind). Et l'autre c'est un sprite 3D, un billboard qui a une animation sympas!
    Voici à quoi ressemble la scène (la plaque de bois c'est juste pour tester la profondeur de mon sprite) :

    Pour afficher la texture correctement, j'ai du convertir les coordonnées de texture SFML (le coin en haut à gauche étant 0,0) en coordonnées de texture OpenGL (le coin en bas à gauche étant 0,0) : un petit changement était donc nécessaire pour les Y.

    Maintenant passons à la supercherie!
    Si je ne bind pas la texture du terrain, ou alors je fais un glBindTexture à la place, le résultat est tout à l'envers!

    L'animation du sprite est incorrect!
    Cependant, en prenant en compte les coordonnées de texture SFML, sans donc faire de conversions, l'animation redeviens correct, mais le sprite reste à l'envers (faudra du coup inverser les coordonnées de la texture en Y)!


    D'ailleurs j'ai une autre bizarrerie , si je veux tracer un cube ou un carré blanc sur le terrain, sur les deux dernières scènes, la couleur blanche s'affiche correctement, or sur la scène avec la texture verte bindé par SFML, le carré a la couleur verte de la texture du terrain!!!!

    Je n'arrive pas à voir la logique! Quelqu’un pourrait m'expliquer ces supercheries! C'est vraiment inexplicable

  2. #2
    Rédacteur/Modérateur

    Hello,
    SFML a des coordonnées de haut gauche vers le bas droit. OpenGL a des coordonnées de bas gauche vers haut droit. Il faut inverser l'axe Y dans ton shader.
    sf::Texture::bind a un second paramètre.

    Quand tu as fini d'utiliser la texture il faut réinitialiser le bind.
    https://www.sfml-dev.org/tutorials/2...th-opengl-code

    Enfin tu as fourni tellement de code que deviner ce qui va pas tient du miracle.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre averti
    Eh bien si! Ta boule de cristal marche très bien!
    En fait, il fallait mettre sf.Texture.bind(null) après chaque utilisation ce que je ne faisais pas et donc provoquait des comportements inattendus.
    Merci!

  4. #4
    Rédacteur/Modérateur

    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.