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 :

Image Bitmap inversé


Sujet :

OpenGL

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2003
    Messages : 72
    Points : 43
    Points
    43
    Par défaut Image Bitmap inversé
    Bonjour,

    J'essais de charger des images Bitmap avec glTexImage2D mais l'adresse du premier pixel est celle en bas...Lorsque je passe ca à glTexImage2D il place l'image inversé à la vertical...

    Le problème c'est lorsque j'affiche une portion de l'image comme texture...il prend pas la bonne.. Si je cadre dans la moitier supérieur...il prend la moitier inférieur...

    J'essais de trouver une opération OpenGL qui permet de dire que le tampon est inversé... Est-ce qu'il y a quelque chose pour arrangé ca?

    Merci
    C# + OpenGL, IA, GL et le développement de jeux sont mes passions.

  2. #2
    Membre averti
    Profil pro
    Responsable technique
    Inscrit en
    Février 2006
    Messages
    363
    Détails du profil
    Informations personnelles :
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Responsable technique

    Informations forums :
    Inscription : Février 2006
    Messages : 363
    Points : 353
    Points
    353
    Par défaut
    Inverse les coordonnées de ta texture sur l'image. L'origine du repere commence dans le coin bas gauche de l'image.

    Donc pour faire un carré par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            glTexCoord2i(0,1);glVertex3f(0,0,0);
    	glTexCoord2i(1,1);glVertex3f(10,0,0);
    	glTexCoord2i(1,0);glVertex3f(10,-10,0);
    	glTexCoord2i(0,0);glVertex3f(0,-10,0);

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2003
    Messages : 72
    Points : 43
    Points
    43
    Par défaut
    Merci de ton aide,

    Le problème c'est que je ne peut pas faire ca car je n'ai aucune idées de la position des coordonnées de texture puisque je charge un objet de 3ds max dont j'ai positionner la texture dessus pour lui collé les coordonnées...ensuite quand c'est chargé je met ca dans un tableau parce que j'utilise glDrawElement().

    Je peut avoir une image que j'ai plusieurs section découpé dedant...
    C# + OpenGL, IA, GL et le développement de jeux sont mes passions.

  4. #4
    Membre averti
    Profil pro
    Responsable technique
    Inscrit en
    Février 2006
    Messages
    363
    Détails du profil
    Informations personnelles :
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Responsable technique

    Informations forums :
    Inscription : Février 2006
    Messages : 363
    Points : 353
    Points
    353
    Par défaut
    Whahou!!!
    Ben la j'avoue que je ne peux pas t'aider. Je ne connais pas le format 3DS.
    Mais, tu as essayé de modifier les paramètres de glTextCoord?

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2003
    Messages : 72
    Points : 43
    Points
    43
    Par défaut
    Le format de 3ds n'est pas en problème, c'est l'image bitmap que je doit chargé après...Les coordonnée de texture sont bonne mais puisque c'est une image bitmap la première adresse de memoire qui indique le data est le coin en bas de l'image alors c'est cette dernière que je veut remettre à l'endroit...pas modifier les coordonnées de texture dans le chargeur parce que ca ne marchera pas bien si je décide de charger un autre format d'image...

    Puisque j'utilise les tableaux et que je les affiches avec glDrawElement....je n'utilise pas glTextCoord....c'est glTexCoordPointer(...); que j'utilise, sauf qu'il ne faut pas modifier les coordonées...elle sont bonne et si on les modifies le chargeur ne va juste être utilisable qu'avec les textures bitmap et c'est un module général que j'ai écrit, en bref c'est un chargeur d'objet 3ds et non un chargeur d'objet 3ds qui sont texturé par des bitmaps

    Au début j'avais de la difficulté à lire la bonne couleur parce que le bitmap est à l'interne en BGR au lieu de RGB et j'inversais le rouge et le bleu mais ca ralentissais de beaucoup de chargement au point que c'étais pénible, alors j'ai fini par trouver après une longue recherche qu'on pouvais mettre le paramètre GL_BGR_EXT à glTexImage2D. Ca réglé mon problème de lenteur mais là j'ai remarqué que la texture est à l'envers depuis le début et je ne veut pas encore inverser le data à la main pour revenir a mon problème. Alors je cherche une facon de dire à OpenGL de lire l'image dans l'autre sens...

    Est-ce qu'il y a quelqu'un qui a été confronté au image bitmap et qui sait s'il y a de quoi pour ca ?
    C# + OpenGL, IA, GL et le développement de jeux sont mes passions.

  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
    comme ca a déjà été dit, la solution la plus simple est de modifier les coordonnées de textures lors du chargement (l'origine d'une texture en OpenGL est le point en bas à gauche). Il suffit de savoir commen le 3DS stock les coordonnées de textures et de faire la modif.
    c'est un calcul tout simple du genre
    texCoord.u = 1-texCoord.u

    sinon, tu a la possibilité de passer par la matrice de texture avec un petit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    glMatrixMode(GL_TEXTURE);
    glPushMatrix();
    glMatrixMode(GL_MODELVIEW);
    glScale(1,-1);
    // dessin de la scène
    glMatrixMode(GL_TEXTURE);
    glPopMatrix();
    glMatrixMode(GL_MODELVIEW);
    * 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
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2003
    Messages : 72
    Points : 43
    Points
    43
    Par défaut
    la solution la plus simple est de modifier les coordonnées de textures lors du chargement
    Après le chargement parce que je désire séparer mon chargeur d'objet 3DS de l'utilisation des images... Inversé les coordonées dans ce cas au chargement va bien marcher pour les coordonées de texture mais je vais revenir au même problème si je charge une image différente dont le data n'est pas inversé comme les Bitmaps, mes coordonnées ne seront plus bonne pour une image jpeg par exemple.

    Donc, je ne doit pas toucher les coordonnées lors du chargement...c'est possible après, ca va avoir comme conséquence de sélectionner la bonne zone que je désire mais cette zone va être afficher à l'envers pareil parce que les pixels de l'image Bitmaps est lue à l'envers dans la mémoire...Si j'ai du texte dans une texture elle apparait à l'envers même si la bonne zone est sélectionner.

    C'est comme si l'image subirait une rotation de 180 degrée et serais lu ainsi...donc changer les coordonées permettrais de trouver la bonne zone mais elle serais affiché à l'envers.

    C'est pour ca que je veut m'attaquer directement à la lecture du tampon dans OpenGL pour l'image Bitmaps...Un peu comme dire à glTexImage2D de lire l'image en considérant la suite de couleur BGR au lieu de RGB qui va avoir l'effet d'afficher correctement les couleurs du tampon, ce que j'ai du faire pour inversé le Rouge et le Bleu.

    Je ne sais pas si cette manière d'utilisé le glScale va inversé les pixels?

    Je reviens à mon problème...

    je cherche une facon de dire à OpenGL de lire l'image dans l'autre sens.

    Je vais tester ca bafman glScale afin de vérifier si l'image s'inverse...si ca marche et que j'arrive à lire le texte sur la texture bitmap correctement, mon problème est réglé. Mais je suis pas sur que ca va l'inversé
    C# + OpenGL, IA, GL et le développement de jeux sont mes passions.

  8. #8
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Personnellement j'inverse l'image avant de l'envoyer vers OpenGL.

  9. #9
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2003
    Messages : 72
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par Ti-R
    Personnellement j'inverse l'image avant de l'envoyer vers OpenGL.
    Est-ce que tu utilises une technique rapide et optimale pour inversé l'image?

    C'est ce que je fesait mais quand tu as plusieurs image le processus d'inversion ralenti beaucoup le chargement des images en mémoire. Dans mon cas j'inversais les pixels un à un à travers une boucle car je ne connais pas de méthode qui les inverses d'un bloc... Alors ca me prenais une bonne minute pour charger mes images....

    Je cherche à diminuer ce temps et je me demande si OpenGL a de quoi pour ca...comme il a de quoi pour lire l'image en BGR au lieu de RGB.

    DestinyWar
    C# + OpenGL, IA, GL et le développement de jeux sont mes passions.

  10. #10
    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
    normalement, on peut le faire en O(n/2) avec n = width*height.
    bien entendu, on peut swaper par lignes, mais au final, on se retrouve toujours a deplacer des pixels
    * 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

  11. #11
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Avec memcpy, qui copie chaque ligne, c'est assez rapide.
    Je dirais que ce n'est pas spécialement remarquable dans le chargement global.

  12. #12
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2003
    Messages : 72
    Points : 43
    Points
    43
    Par défaut
    memcpy c'est du C et je travaille en C# mais il y a moyen de convertir les API C++ en C#... Je vais essayer de convertir memcpy en C# si c'est possible, je n'ai jamais amener une fonction C en C# mais ca doit surement ce faire pour que je puisse essayer ça.

    Je réfléchissait surtout en C# alors j'ai pas pensé à memcpy...

    Merci

    DestinyWar
    C# + OpenGL, IA, GL et le développement de jeux sont mes passions.

Discussions similaires

  1. Réponses: 6
    Dernier message: 22/12/2004, 11h00
  2. Comment changer l'image Bitmap en fond d'écran du bureau ?
    Par Maddelphi dans le forum API, COM et SDKs
    Réponses: 8
    Dernier message: 23/06/2004, 19h57
  3. Afficher et comparer 2 images bitmap
    Par leplusnul dans le forum MFC
    Réponses: 2
    Dernier message: 12/01/2004, 16h54
  4. generer une image bitmap a partir d'une scene OGL
    Par FreshLog dans le forum OpenGL
    Réponses: 4
    Dernier message: 01/07/2003, 11h29
  5. Lecture d'une image bitmap
    Par Geronimo dans le forum x86 32-bits / 64-bits
    Réponses: 18
    Dernier message: 28/06/2002, 12h01

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