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 :

GL_POINTS et partie de texture


Sujet :

OpenGL

  1. #1
    Membre averti

    Inscrit en
    Avril 2012
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 16
    Par défaut GL_POINTS et partie de texture
    Bonjour,

    Je travaille encore sur mon moteur de jeu en OpenGL ES 2 (, afin d'avoir moins de données, je souhaite modifier ma classe "Text" afin que celle-ci affiche les lettres à l'aide de GL_POINTS.

    J'ai donc une texture contenant la liste des caracteres. Suivant le caractere fourni à la fonction, je trouve la position du caractere sur la texture et je la converti en coordonnées écran. J'arrive actuellement à afficher à l'écran le résultat, seulement mon GL_POINTS affiche toute la texture malgré les paramètres tx et ty fournis.

    J'aimerai donc savoir si il était possible d'afficher une partie (sub rect) de la texture à l'aide de GL_POINTS ? J'ai vu que la bibliothèque SFML le faisait avec sa classe Text, seulement la SFML n'utilise pas les shaders et OpenGL ES 2.

    Merci d'avance.
    Dono.

    Le shader actuel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #ifdef GL_ES
    precision mediump float
    #endif
     
    uniform sampler2D texture;
    varying vec4 vColor;
    varying vec2 vTexCoord;
     
    void main()
    {
           gl_FragColor = vColor * texture2D(texture, vTexCoord );
    }
    J'ai aussi tenté le vTextCoord.st mais je me retrouve avec un pixel d'une couleur unie.

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


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

    Pour dessiner qu'une sous partie de la texture, il faut envoyer des coordonnées qui sont entre 0 et 1.
    Disons que j'ai une grille de 16 éléments (4x4), pour dessiner le premier éléments, les coordonnées seront (pour un carré) :
    0,0
    0.25, 0
    0.25, 0.25
    0, 0.25
    Pour le dernier :
    0.75 ,0.75
    1, 0.75
    1, 1
    0.75, 1
    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 averti

    Inscrit en
    Avril 2012
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 16
    Par défaut
    Bonjour,

    Merci d'avoir répondu, seulement j'utilise déjà cela pour les sprites ordinaires ayant 4 sommets.

    Ici je souhaite afficher l'élément à l'aide d'un GL_POINTS, donc un seul sommet.

    Lorsque j'utilise "gl_PointCoord" dans mon shader j'obtiens toute la texture affiché sur mon point. Lorsque j'utilise "vTexCoord" je me retrouve avec un seul pixel de l'image.

    Ce que je souhaite c'est afficher un une partie d'un sprite à l'aide d'un unique sommet :/

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 171
    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 171
    Billets dans le blog
    155
    Par défaut
    Il faut croire que les coordonnées de texture que de votre vTexCoord sont fausses, comment les générez vous ?
    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.

  5. #5
    Membre averti

    Inscrit en
    Avril 2012
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 16
    Par défaut
    Pour afficher à l'aide de GL_POINTS je n'ai qu'un seul vTexCoord.

    Je vais essayer d'expliquer un peu mieux le soucis ^^.

    À l'heure actuelle, j'affiche mon texte à l'aide de GL_TRIANGLE_STRIP. Pour cela, j'ai 4 sommets par lettre et donc chaque lettre à ses propres vTexCoord, mes vTexCoord sont bons car j'affiche bien le texte à l'écran (chaque lettre est bien prise au bon endroit sur la texture et correctement affiché).

    Le soucis, c'est que je souhaite optimiser cela en modifiant le système actuel qui utilise des GL_TRIANGLE-STRIP par des GL_POINTS.

    En gros, au lieu d'avoir 4 sommets par lettre, j'en ai plus qu'un seul.

    Sur le texte "coucou", j'aurais :
    Avant : 6 * 4 => 24 sommets
    Apres : 6 * 1 => 6 sommets

    J'affiche donc chaque lettre une à une avec un GL_POINTS seulement je n'arrive pas à afficher une partie de la texture sur mon GL_POINTS.

    Pour afficher mes éléments à l'écran, j'utilise un shader (voir le premier post). Pour que mon point soit visible, j'ai mis un "gl_PointSize = 16.0;"

    Vu que j'ai uniquement un sommet par lettre, je ne vois pas comment je peut renseigner la position sur la texture.

    J'ai tenté plusieurs chose :
    -> Remplacer vTexCoord par gl_PointCoord seulement j'obtient toute la texture et non une partie de celle-ci.
    -> Remplate vTexCoord par vec2( 0.5, 0.5 ), ici j'obtiens une autre couleur unie (je dois pointer sur le centre de la texture)

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 171
    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 171
    Billets dans le blog
    155
    Par défaut
    -> Remplacer vTexCoord par gl_PointCoord seulement j'obtient toute la texture et non une partie de celle-ci.
    Je vois ici, que si vous passez aussi l'ID (numéro) de la lettre en uniform, vous pourrez faire les calcul qu'il faut pour retrouver les coordonnées de textures adéquates.

    Sinon, utilisez vous un géometry shader ? Je crois que d'un point, on pourra en reconstituer quatre, de la taille que l'on veut.
    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.

  7. #7
    Membre averti

    Inscrit en
    Avril 2012
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 16
    Par défaut
    Merci pour votre réponse,

    J'ai finalement opté pour les 4 sommets par lettre le tout stocké dans un VBO. J'ai cherché un peu partout sur internet et il s'avère qu'on ne peut pas afficher une partie d'un sprite sur un point avec OpenGL ES 2. L'équivalent avec OpenGL est GL_POINT_SPRITE.

    Merci d'avoir pris le temps de me répondre en tout cas

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

Discussions similaires

  1. Répétition d'une partie d'une texture
    Par xwindoo dans le forum OpenGL
    Réponses: 4
    Dernier message: 16/07/2010, 19h55
  2. Réponses: 2
    Dernier message: 26/09/2009, 21h23
  3. Répéter une partie de texture
    Par Djakisback dans le forum OpenGL
    Réponses: 8
    Dernier message: 27/09/2007, 11h55
  4. Réponses: 3
    Dernier message: 24/10/2005, 15h26
  5. Réponses: 5
    Dernier message: 18/09/2004, 22h30

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