Bien le bonjour à toutes et tous.
Je suis actuellement sur la création d'un petit moteur 2D générique exploitant openGL et SDL ainsi que la bibliothèque SDL_Image.
Ce moteur a pour but de faciliter le développement de jeux bidimentionels.
Pour le moment, j'en suis juste à la gestion des graphismes, mais malheureusement, j'ai un problème.
le principe est simple pour la gestion du graphisme, vous avez 4 classes principales.
-Screen
-Object
-Tile
-Sprite
Screen est une classe gérant la fenêtre SDL.
Object est une classe regroupant tout les objets graphiques à afficher dans la fenetre via openGL.
Tile est une classe fille de Object et permet de gérer efficacement les Tiles.
Sprite est une classe fille de Object et permet de gérer efficacement les Sprites.
La classe Object contient une liste chainée statique qui permet d'accèder à toutes les instances de la classe Object qui ont étées crées.
Grâce à cette liste chainée, la classe Screen qui est ami de la classe Object, et réciproquement.
Une méthode de la classe Screen permet d'afficher toutes les instances de la classe Object crées (donc les tiles, sprites.)
Par contre, la ou j'ai un soucis, je n'arrive pas à pousser openGL à gerer la transparence, en premier lieu je voulais rendre transparent le font de certaines textures, à la manière de SDL_SetColorKey()
Voici le code, en espérant que vous pourrez m'aider...
En l'occurence la methode SetColorKey de la classe Texture devrait permettre de rendre un fond transparent en modifiant le canal alpha de la texture, de plus j'ai activé le blending avec glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
Cette activation se fait directement dans le constructeur de l'objet Screen.
Beurk, c'est caca de mélanger SDL et OpenGL pour l'affichage. Fais soit l'un soit l'autre, mais dans tous les cas évites les mélanges douteux (SetColorKey & Blending OpenGL...).
Crées simplement une texture au format .png, et rends-la transparente dans ton logiciel d'édition d'image. Ensuite, en activant simplement le blending OpenGL la transparence de tes textures apparaîtra tout de suite sans que tu n'ai rien d'autre à faire.
Citation : castorus
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
Fais gaffe avec ce mode de blending, il requiert de dessiner tes polygones dans l'ordre du plus éloigné au plus proche (suppose que tu veuille faire de la 3D Iso, ou une GUI...).
Beurk, c'est caca de mélanger SDL et OpenGL pour l'affichage. Fais soit l'un soit l'autre, mais dans tous les cas évites les mélanges douteux (SetColorKey & Blending OpenGL...).
Justement, c'est ce que je fais, j'utilise uniquement OpenGL pour l'affichage. Merci de lire les posts avant de répondre.
Citation : T4g1
Pourquoi n'utilise tu pas SDL tout seul ?! OpenGL c'est pour la 3D !
Simplifie toi la vie ...
Et oui merci pour cette replique de noob, "openGL c'est pour la 3d" heeuu openGL est une librairie graphique, faites aussi bien pour la gestion du 2d que du 3d....
"Simplifie toi la vie..." C'est ce que je fais, openGL permet des gestion graphiques bien plus poussées et rapides que SDL. Donc merci de ton conseil super utile hein mais ma question c'était pas de savoir ce que t'en pense, mais comment faire pour rendre transparent un fond, ce serait cool de répondre aux questions posées et pas de partir en HS à chaque fois.
Franchement Castorus tu dépasse les bornes et même si j'ai peut etre pas ton niveau je suis obligé de réagir .
Ton comportement est désagréable au possible lorsque quiconque te répond et que cela ne te plaît pas. Met ton comportement négatif de coté quand tu rentres sur ce site(non je ne fais le modérateur ^^) et ca ira beaucoup mieux.
Au lieu d'utiliser GL_BLEND (qui est davantage fait pour bosser sur la transparance, et qui peut poser probleme avec le Z-buffer dans certains cas), essaie d'utiliser GL_ALPHA_TEST : qui lui sera bien plus rapide, et sera du "tout ou rien" : soit il affiche le pixel, soit non : ideal pour simuler en 32 bits une colorkey.
Et oui merci pour cette replique de noob, "openGL c'est pour la 3d" heeuu openGL est une librairie graphique, faites aussi bien pour la gestion du 2d que du 3d....
"Simplifie toi la vie..." C'est ce que je fais, openGL permet des gestion graphiques bien plus poussées et rapides que SDL. Donc merci de ton conseil super utile hein mais ma question c'était pas de savoir ce que t'en pense, mais comment faire pour rendre transparent un fond, ce serait cool de répondre aux questions posées et pas de partir en HS à chaque fois.
Ben si t'est plus malin que tout le monde t'avais qu'a te debrouiller seul.
Seul non, sans toi oui parce que sur le coup je suis peut être un connard mais toi tu postes pour rien donc tu sors ->[] ...
(Et puis de toute façon que ce soit avec ton aide ou sans c'est du pareil au même hein vu comment tu parles pour dire des anneries du genre "OpenGL c'est que pour le 3d !" aucun poste constructif de ta part hormis pour m'insulter...)
Enfin bon.
Donc, j'ai résolut mon problème, mais il semblerait que sous windows vista (Je suis sous xp home j'ai testé l'affichage sous windows vista aujourd'hui même) l'affichage des textures ait un soucis, je me retrouve avec un écran blanc lorsque les textures sont actives, quelqu'un pourrait me dire si cela vient concrêtement de Vista ou alors d'un bout de code à adapter pour cette plateforme?
(Parce que c'est éttonant sur les plateformes Xp aucun soucis.)
Merci de votre aide future.
Sûr si c'est pour balancer un troll du genre openGL est uniquement pour la 3D, normal que je réponde de façon impulsive étant donné que cela distribue une image faussée de cette API graphique.
Après c'est aux gens de juger si leur dires sont fondés ou non.
Vous êtes priés de rester calmes, castorus évite d'envoyer chier quand on te répond, si la réponse est pas centrée, explique en quoi, et T4g1, t'es prié de ne jamais en venir aux insultes.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html