IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

OpenGL Discussion :

Light blending avec opengl


Sujet :

OpenGL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2016
    Messages : 3
    Par défaut Light blending avec opengl
    Bonjour à tous,
    J’essaie depuis quelques heures maintenant de reproduire un effet de lumière réaliste. Pour cela j'utilise une liste de lumières qui possèdent des coordonnées une intensité une couleur et un rayon. J'ai un shader GLSL fonctionnel qui me génère un halo de lumière autour de chaque lumières.
    Ce process tourne très bien sur un petit projet avec rien que ça, mais maintenant j’essaie de l'intégrer a un plus gros projet qui contient un système de carte, d'entités ect...

    Je fais donc des tests en essayant de rendre une texture en dessous de mes lumières. L'objectif est que l'image soit complètement noire sauf autour de la lumière. Par exemple pour une lumière de couleur 1,1,1,1 une intensité de 1 et un rayon de 10 positionnée au centre de l'écran, l’entièreté de l'écran devrait être noir sauf dans un cercle de rayon 10 au centre de l'image ou on verrai en fade out en partant du centre, l'image dans sa couleur originelle.

    Pour cela j’essaie d'utiliser les fonctions de blending d'opengl mais l'écran reste entièrement noir, voici le code que j'utilise:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    private void render() {
    	        glClear(GL_COLOR_BUFFER_BIT);
                    Texture.TEXTURE.bind();
    		glBegin(GL_QUADS);
    		glColor4f(0.2f, 0.2f, 0.2f, 1);
    		glTexCoord2d(0, 0); glVertex2f(0, 0);
    		glTexCoord2d(1, 0); glVertex2f(width, 0);
    		glTexCoord2d(1, 1); glVertex2f(width, height);
    		glTexCoord2d(0, 1); glVertex2f(0, height);
    		glEnd();
    		Texture.TEXTURE.unbind();
                    for (Light light : lights) {
                         glUseProgram(shaderProgram);
    			glUniform2f(glGetUniformLocation(shaderProgram, "lightLocation"), light.location.getX(), height - light.location.getY());
    			glUniform3f(glGetUniformLocation(shaderProgram, "lightColor"), light.red, light.green, light.blue);
     
    			glEnable(GL_BLEND);
    			//glBlendFunc(GL_ONE, GL_ONE);
     
    			glBlendFunc(GL_ZERO, GL_SRC_ALPHA);
    			glBlendEquation(GL_FUNC_ADD);
     
    			glBegin(GL_QUADS); {
    				glVertex2f(0, 0);
    				glVertex2f(0, height);
    				glVertex2f(width, height);
    				glVertex2f(width, 0);
    			} glEnd();
     
    			glDisable(GL_BLEND);
    			glUseProgram(0);
                    }
    }
    Je pense avoir mal compris la fonction blend, pour moi après le blend le rendu d'un pixel sera donc:
    0*(opacitéDeLaLumièreRendue) + opacitéDeLaLumièreRendue*(initialColor) je me trompe ?
    En utilisant https://www.andersriggelsen.dk/glblendfunc.php avec ces paramètres de blending j'obtient le résultat souhaité alors je ne comprend pas pourquoi avec ce code l'écran est complètement noir

    Merci d'avance !

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 141
    Billets dans le blog
    150
    Par défaut
    Bonjour,

    D'après le site d'exemple, votre code ne me semble pas bon, à cause du GL_ZERO comme premier paramètre à glBlendFunc().
    Aussi, je pense que vous pouvez sortir le code de blend de la boucle.

    Finalement, ce que vous faites ressemble énormément à du deffered shading.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Octobre 2008
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Octobre 2008
    Messages : 187
    Par défaut
    Tu utilise une très vieille version d'OpenGL, est-ce que c'est voulu ? Je ne sais pas si tu vas avoir beaucoup d'aide sur des API obsolètes...

  4. #4
    Expert confirmé
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 226
    Par défaut
    C'est un mélange étrange avec des shader et de l'OpenGL 1 avec glBegin/glEnd
    si tu peux faire de OGL 2 (voir 3) , je vois pas l’intérêt de ces fonctions là ^^'

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2016
    Messages : 3
    Par défaut
    Merci pour vos réponses !

    J'ai essayé en sortant le blending de la boucle et cette fois ci j'ai juste la lumière de rendue mais pas la texture d'arrière plan (en sortant juste le glEnable(GL_BLEND); j'ai gardé tout le reste dans la boucle) (et sur le site d'exemple j'ai bien le résultat attendu avec mes paramètres c'est bizarre ).

    Pour ce qui est de ma version d'openg j'ai mis 1.X mais j'ai accès a bien plus de versions, c'est juste que je n'ai pas trouvé d'autres solutions (je suis novice avec opengl je l'utilise que pour faire des choses très simples habituellement), si vous avez d'autres solutions plus simple éclairez moi je prend tout

Discussions similaires

  1. Probleme avec OpenGL
    Par Sh. dans le forum OpenGL
    Réponses: 3
    Dernier message: 04/11/2004, 12h48
  2. Boite de dialogue avec opengl
    Par inddzen dans le forum OpenGL
    Réponses: 3
    Dernier message: 23/04/2004, 20h25
  3. interface utilisateur avec OpenGL
    Par demis20 dans le forum OpenGL
    Réponses: 6
    Dernier message: 03/10/2002, 12h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo