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 :

OpenGL - Afficher une image sur un quad


Sujet :

OpenGL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 26
    Points
    26
    Par défaut OpenGL - Afficher une image sur un quad
    Bonjour,

    Je réalise dans le cadre d'un projet scolaire un jeu (style FPS)...
    Depuis plusieurs jours déjà, je cherche à faire apparaitre des impacts sur un mur... En fait, le joueur tire des projectiles (du genre boules de peinture). J'ai déjà réalisé le tire de projectile... Seulement je voudrais désormais que lorsque ce dernier touche un mur, une tache de peinture y soit affichée.. J'ai pour ce faire dessiné une tache avec une couleur de fond (vert) qui me servirait de transparence...
    Je ne sais pas trop comment ça peut se faire.
    Si vous connaissez des tutos, codes, ou autres... Je suis preneur.
    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    tu as le choix entre l'incontournable, l'inimitable, l'inmanquable en français siouplé
    http://jeux.developpez.com/faq/openg...S_transparence

    ou le tuto 32 de nehe en anglais
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    Merci beaucoup !! Je regarde ça

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    Merci, ça marche nikel ! Mais je me demandais comment faire pour pouvoir coller mon impact (ma tâche) sur le mur sans pour autant qu'il y ai de soucis avec le mur... Style les textures qui clignotent ! J'ai un quad transparent (ma tache) que je place sur un autre (mon mur) en gros. Pour l'instant je feinte en affichant mon impact à quelques pixels du mur. ça marche très bien comme ça et au pire je laisserai ainsi.
    Merci bcp ! Génial ce forum

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Au moment d'afficher tes tâches, tu changes légèrement la matrice de projection : tu diminues l'élément (3, 3) (le [10] si tu as un tableau de float) d'un pouillème (* 0.999f par exemple). Ca aura comme effet de décaler la tâche de suffisamment pour éviter le Z-fighting, mais pas assez pour que ça se voie. Et en plus, le décalage sera toujours dans la direction de la vue, puisqu'effectué en espace caméra.
    C'est pas parfait, mais c'est beaucoup mieux que ta solution, et mieux que le Z-Bias.

  6. #6
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    Citation Envoyé par Laurent Gomila
    Au moment d'afficher tes tâches, tu changes légèrement la matrice de projection : tu diminues l'élément (3, 3) (le [10] si tu as un tableau de float) d'un pouillème (* 0.999f par exemple). Ca aura comme effet de décaler la tâche de suffisamment pour éviter le Z-fighting, mais pas assez pour que ça se voie. Et en plus, le décalage sera toujours dans la direction de la vue, puisqu'effectué en espace caméra.
    C'est pas parfait, mais c'est beaucoup mieux que ta solution, et mieux que le Z-Bias.
    c'est un poil goret quand même comme technique non... mais elle me fait bien rire
    en fait, on doit pouvoir obtenir le même resultat en utilisant une petite compression de frustum (un appel à glFrustum avec un farPlane plus eloigné que le précédent) comme ca, l'espace de mapping des coordonnée de profondeur sera plus etendu et donc to fragment sera plus "proche" lors du rendu... et la au moins c'est presque classe comme méthode (carmack inside encore une fois)
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Bah, c'est pas si goret, je l'utilise pour le rendu de tous les décals dans un projet, ça fonctionne suffisamment bien. C'est une technique décrite par Lengyel pour ses décals, dans je ne sais plus quel Game Programming Gem.

    Et puis comme je le dis, c'est au moins meilleur que le décalage de la géometrie à la main, et meilleur aussi que d'utiliser le Z-Bias. Par contre par rapport à ta méthode, je ne sais pas ce qui est le mieux. Faudra se pencher sur la question un jour où on n'aura rien à faire

  8. #8
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    ma technique a l'avantage d'être un poil plus generique car elle permet par exemple d'afficher une arme qui ne traverse jamais les decors (en compressant à mort le frustum)
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  9. #9
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    juste une idée comme ça, la fonction du depth buffer est configurée comment ? GL_LESS ou GL_LEQUAL ?
    je pense que ça peut avoir son importance car GL_LEQUAL permet de laisser passer des pixels qui auraient étés éliminés
    mais bon, ça ne résoud pas tout
    la technique de laurent, même si elle meut sembler "goret", elle est rapide et efficace, j'aime bien
    la technique de bafman est plus propre mais peut être un poil plus longue si on doit recalculer toute la matrice de projection
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  10. #10
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Après 5 min de reflexion, je me rends compte que les deux techniques sont identiques : changer le ZFar via glFrustum, pour une matrice de projection perspective, va modifier l'élément (3, 3) de la matrice de projection. Ton ratio VieuZFar / NouveauZFar, c'est mon 0.999.

    Ma solution est donc meilleure, puisqu'elle fonctionne sur tout type de matrice de projection

  11. #11
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    ta technique modifie tout simplement le diviseur de perspective, ce qui revient au même, mais d'un point de vue abstrait, c'est quand même pas joli
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  12. #12
    Nouveau membre du Club
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    Je débute un peu... Je n'ai pas tout compris...
    Citation Envoyé par Laurent Gomila
    Au moment d'afficher tes tâches, tu changes légèrement la matrice de projection : tu diminues l'élément (3, 3) (le [10] si tu as un tableau de float) d'un pouillème (* 0.999f par exemple).
    Comment je fais pour changer ma matrice de projection ?

    Citation Envoyé par bafman
    en fait, on doit pouvoir obtenir le même resultat en utilisant une petite compression de frustum (un appel à glFrustum avec un farPlane plus eloigné que le précédent) comme ca, l'espace de mapping des coordonnée de profondeur sera plus etendu et donc to fragment sera plus "proche" lors du rendu...
    Pour glFrustum à quel moment je dois faire l'appel ? C'est dans le style glPerspective en fait ?

    Merci pour toutes vos réponses

  13. #13
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    pour changer ta matrice de projection, par rapport à ce que dit Laurent, tu fais de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // récupération de la matrice de projection
    float projMatrix[16];
    glGetFloatv(GL_PROJECTION_MATRIX, projMatrix);
    // modification du Z
    projMatrix[10] *= 0.999999;
    // remplacement de la matrice de projection
    glMatrixMode(GL_PROJECTION_MATRIX);
    glLoadMatrixf(projMatrix);
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  14. #14
    Nouveau membre du Club
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    Merci beaucoup !
    Mais à la compil' j'ai un message d'erreur comme quoi glLoadMatrix n'existe pas... Il y a une lib particuliaire à mettre ? Je n'ai inclus que gl.h et glu.h...

  15. #15
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Un peu de recherche que diable...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    glLoadMatrixf
    glLoadMatrixd

  16. #16
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    oups, j'ai pas fait gaffe non plus, je corrige le post précédent
    ene même temps, ça t'apprendra à copier coller sans chercher à comprendre
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  17. #17
    Nouveau membre du Club
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    Merci beaucoup ! ça ne marche pas encore mais je vais tâcher de chercher par moi même

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. comment afficher une image sur un cadre
    Par pakita dans le forum JBuilder
    Réponses: 3
    Dernier message: 30/04/2007, 15h11
  2. Afficher une image sur un écran 3D.
    Par pan99 dans le forum 3D
    Réponses: 1
    Dernier message: 16/04/2007, 13h48
  3. Afficher une image sur clic d'un bouton
    Par thibane dans le forum GTK+ avec C & C++
    Réponses: 16
    Dernier message: 21/02/2007, 10h09
  4. [débutant]Afficher une image sur une JFrame
    Par mavina dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 09/08/2006, 16h25
  5. afficher une image sur toute la fenêtre
    Par argon dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 18/02/2006, 09h44

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