CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[OpenGL] Transparence

Aldebran
Aldebran
Niveau 10
20 février 2006 à 16:21:26

J´ai une image au format PNG, dans cette image certains pixels sont transparents : comment faire pour que les pixels transparents soient transparents quand je les rends avec OpenGL.

Pour charger la texture, j´applique la méthode du site de JYY et ensuite je l´affiche sur un quad comme sur le site de JYY.

J´ai déjà utilisé plusieurs méthodes pour la transparence mais je n´ai pas trouvé la bonne et en plus, je ne suis pas un pro de la transparence sous OpenGL.

On va peut être me dire de rechercher mais si quelqu´un sait comment faire, je le remercie de dire comment.

Aldebran
Aldebran
Niveau 10
20 février 2006 à 16:22:35

Je pense que le problème vient des arguments à passer dans glBlendFunc();

rastacouer
rastacouer
Niveau 8
20 février 2006 à 17:28:22

va voir les tutoriaux de nehe :

http://nehe.gamedev.net

le tutorial 7 ou 8 parle de blending, et puis nehe c´est un must en openGL, si veux apprendre, et si l´anglais ne t´effrais pas.

JeanYvesYves
JeanYvesYves
Niveau 10
20 février 2006 à 17:32:51

Vérifie aussi le truc suivant :
si tu t´appuies sur les valeurs alpha des pixels, vérifie que la fonction qui charge ton PNG prend en charge la lecture du canal alpha.

Sinon, en effet, le tuto de Nehe est fabuleux :)

Aldebran
Aldebran
Niveau 10
21 février 2006 à 12:46:45

En fait, je charge une image avec SDL sur 24 bits (si je fais sur 32, ça plante sans que je sache pourquoi) et ensuite, à l´aide d´une fonction je transforme tout les pixels violets en pixels transparents puis j´envoie la texture à OpenGL (je travaille en RAM tout le long).

Le principal problème est que si j´utilise glEnable(GL_BLEND) avec glBlendFunc(GL_SRC_ALPHA, GL_ONE) et bien les pixels transparents ne sont plus visibles mais tout le reste de l´image est rendu transparent au 2/3 (environ). Etrangement, tout ce que j´ai essayé avec les fonctions d´Alpha Test n´a pas réussi à faire disparaître les pixels transparents.

En fait, je programme une sorte de librairie 2D/3D basée sur SDL et OpenGL et qui aurait pour but de permettre de programmer sous OpenGL de la même façon qu´avec SDL pour créer des jeux en 2D mais tout en profitant des accélérations 3D, du système de caméra pour le scrolling, des zooms, etc.

Aldebran
Aldebran
Niveau 10
22 février 2006 à 11:01:00

Je viens de trouver mon problème :
Quand je charge une texture avec OpenGL, je le fais comme sur le site de JYY et du coup, je dit à OpenGL que je travaille sur 3 couleurs. Comment faire pour le faire travailler sur les quatres couleurs R, G, B et A ?

Aldebran
Aldebran
Niveau 10
25 février 2006 à 20:52:23

Comment fait-on avec OpenGL pour charger une texture en gérant le canal alpha ?

Pixcoder
Pixcoder
Niveau 4
25 février 2006 à 21:01:21

Salut
dans le programme que je fais, je n´utilise pas encore la composante alfa, mais au chargement des .BMP (je n´utilise que ça pour l´instant), j´ai ca :

for (i=0; i < infoheader.biWidth*infoheader.biHeight; i++)
{
// We load an RGB value from the file
fread(&rgb, sizeof(rgb), 1, l_file);

// And store it
l_texture[j+0] = rgb.rgbtRed; // Red component
l_texture[j+1] = rgb.rgbtGreen; // Green component
l_texture[j+2] = rgb.rgbtBlue; // Blue component
l_texture[j+3] = 255; // Alpha value
j += 4; // Go to the next position
}

sachant que ´l_texture´ est la donnée des infos de l´image. (tu vois : vu que je n´utilise pas encore le canal alfa, je mets 255...)
Ensuite, on lie la texture à ogl avec ca (apres quelques autres manip):

glTexImage2D(
GL_TEXTURE_2D, //target
0, //mipmap level
4, //nb couleurs
infoheader.biWidth, //largeur
infoheader.biHeight, //hauteur
0, //largeur du bord
GL_RGBA, //type des couleurs
GL_UNSIGNED_BYTE, //codage de chaque composante
l_texture //Image
);

Aldebran
Aldebran
Niveau 10
25 février 2006 à 22:03:22

Oui, c´est comme ça que lie ma texture à opengl mais en utilisant SDL. Mais quand je fais ça, j´obtiens un écran tout noir :(

Aldebran
Aldebran
Niveau 10
26 février 2006 à 10:55:38

Dans mon programme, au lieu de mettre l_texture en dernier paramètre de ma fonction, je met :

surface->pixels

Est-ce que le problème pourrait venir de là ?

Aldebran
Aldebran
Niveau 10
26 février 2006 à 10:56:13
  • en dernier paramètre de la fonction glTexImage2D()
Pixcoder
Pixcoder
Niveau 4
26 février 2006 à 12:46:23

unsigned char *l_texture;

chez moi, donc si c´est lebon type... ensuite, reste a vérifier les tailles de l´image, voir si t´as les bonnes et si tu les mets bien en paramètre de glTexImage2D()

Aldebran
Aldebran
Niveau 10
26 février 2006 à 15:20:21

Arf, moi le type c´est SDL_Surface :)
Je charge mes images avec SDL. Peut-être que le problème vient de là, peut-être que SDL est incapable de charger une image contenant un canal alpha ?

Aldebran
Aldebran
Niveau 10
26 février 2006 à 20:01:24

Est-ce que SDL peut charger des images avec un canal alpha ?

JeanYvesYves
JeanYvesYves
Niveau 10
27 février 2006 à 00:45:10

Aldebran > ça n´a rien a voir avec les capacités de SDL : SDL_LoadBMP ne charge pas des images en utilisant le canal Alpha pour la raison simple :

Les BMP ne gerent pas d´alpha :)

Sinon, rien ne t´empeche de charger l´image, de la copier en 32 bits, du locker l´image, et de modifier le canal Alpha des pixels désirés, puis ensuite de la monter en tant que texture OpenGL.
J´ai des fonctions qui permettent de faire ça...

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment