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 :

Shaders : Transformation sur tous les pixels de l'écran


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de betsprite
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    472
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 472
    Par défaut Shaders : Transformation sur tous les pixels de l'écran
    Bonjour,

    J'aimerais réaliser, pour un petit FPS, un effet de flash lors d'un tir d'arme avec les shaders.

    Cependant, je ne sais pas comment affecter dans mon vertexshader l'effet du flash à tout l'écran et non seulement aux vertex dessinés récupérés avec gl_Position.

    Je vous remercie

  2. #2
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 034
    Billets dans le blog
    12
    Par défaut
    Il faut pour cela le faire dans le fragment shader, qui est fait pour le travail sur les pixels (le vertex shader étant limité aux vertex).
    Cependant, si je ne me trompe pas, ça n'affectera toujours que les géométries auxquelles ton shader est affecté (s'il est bien affecté à des géométries).
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  3. #3
    Membre éclairé
    Avatar de betsprite
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    472
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 472
    Par défaut
    Merci dragonjoker59 pour ta réponse !

    Citation Envoyé par dragonjoker59
    Il faut pour cela le faire dans le fragment shader, qui est fait pour le travail sur les pixels (le vertex shader étant limité aux vertex).
    D'accord mais c'est dans le vertexshader qu'on récupère la position des pixels avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gl_Position = gl_ModelViewProjectionMatrix*gl_Vertex;
    Seulement, il me faut la position dans la scène et non sur l'écran pour pouvoir effectuer en fonction de la distance par rapport à la position de la caméra dans la scène une atténuation du flash.
    (Sachant que la caméra est en 0.0, 0.0, 0.0 et que c'est la scène qui tourne autour. Donc, j'imagine que récupérer la position dans la scène 3D des vertex suffit à avoir la distance qui sépare la caméra du vertex non ?)

    Donc j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pos = vec3(gl_ModelViewMatrix*gl_Vertex);
    Mais je ne sais pas comment faire des conditions sur pos ensuite dans mon fragment shader :s

    Je ne vois pas vraiment quelles valeurs peut prendre pos dans ma scène...

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 150
    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 150
    Billets dans le blog
    150
    Par défaut
    Bonjour,

    Pour les effets se basant sur la distance entre deux points, il faut juste se pencher sur la fonction length() (entre la position de la camera, et la position du point (ou vertex)).
    Cela nous retourne un float, le float exprimant la distance bien sur. Il suffit de multiplier cette valeur, à la couleur, et cela varie sur la distance.

    Pour un effet de flash sans géométrie (idée non valide ici, mais j'explique), il aurait fallu faire un premier rendu (de la scène) dans une texture (render to texture) et affiché cette texture sur l'écran.
    Comme cela, on peut faire des effets de post process (genre des flash) car l'affichage de la texture, nous permet le parcours de tout les pixels.
    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.

Discussions similaires

  1. TXMLDocument, ne fonctionne pas sur tous les PC
    Par Neilos dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/10/2005, 22h33
  2. [JDBC]Boucle sur tous les éléments du ResultSet
    Par Terminator dans le forum JDBC
    Réponses: 1
    Dernier message: 22/09/2005, 19h30
  3. Recherche sur tous les fichiers d'un projet
    Par Kaorichan dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 28/04/2005, 11h28

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