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 :

Mosaïque texturée


Sujet :

OpenGL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 3
    Par défaut Mosaïque texturée
    J'en peux plus !
    J'aimerais créer un pavage de l'écran à l'aide de quads de 32 pixels de côté, en mode de projection Orthographique ( gluOrtho2D() ou glOrtho(), c'est pareil ). Chacun de ces Quads doit être texturé avec un bitmap qui fait lui aussi 32 pixels.

    J'obtiens de tout, des textures déformées, des écrans blanc ou noir, mais pas ce qu'il faut. Alors si quelqu'un pouvait m'aider , parce que ça fait une semaine que je suis dessus, et je suis au bord de la crise de nerfs...

    En C/C++/Delphi/Java, on se débrouillera.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 55
    Par défaut
    J'ai un peu de mal aussi en 2D avec OpenGL, mais j'ai réussi à afficher du texte à base de bitmap. Voilà ce que je peux te dire :
    Ma classe Scene commence par préparer le terrain en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	glMatrixMode(GL_PROJECTION);
    	glLoadIdentity();
    	glOrtho(0, w, 0, h, -1, 1);
    	glMatrixMode(GL_MODELVIEW);
    	glLoadIdentity();
    w et h étant la taille de la fenêtre, 1024 et 768 par ex.

    Ensuite, quand on demande à la classe Font d'afficher un caractère, elle fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	glRasterPos2i(x,y);
    	glDrawPixels (width, height,  GL_RGBA,  GL_UNSIGNED_BYTE, data);
    x et y étant la position, en pixel et en partant d'en bas à gauche, du caractère à dessiner. data est l'image représentant le caractère à afficher et width et height sont ses dimensions.

    Le code pour paver ton écran ne doit pas être très éloigné de ça...

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 3
    Par défaut
    Voilà mes procédures d'initialisation OpenGL, de chargement de textures et de dessin, je suppose que le problème vient de l'une d'entre elles.

    Chargement de textures :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure LoadGLTextures;
    var texture1: PTAUX_RGBImageRec;
    begin
    	texture1 := auxDIBImageLoadA('tile.bmp');
    	if not Assigned(texture1) then	Halt(1);
     
    	glGenTextures(1, texture[0]);
    	glBindTexture(GL_TEXTURE_2D, texture[0]);
     
       	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
      	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
     
                    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, texture1^.sizeX, texture1^.sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, texture1^.data);
    end;
    Initialisation OpenGL :

    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
     
    procedure InitGL(Width: GLsizei; Height: GLsizei);
    begin
    	LoadGLTextures();					glEnable(GL_TEXTURE_2D);			
     
    	glClearColor(0.0, 0.0, 0.0, 0.0);			glClearDepth(1.0);					
    	glMatrixMode(GL_PROJECTION);
    	glLoadIdentity();				
     
                    glEnable(GL_DEPTH_TEST);
     
                    glViewport(0, 0, Width, Height);
                    glMatrixMode(GL_PROJECTION);
                    glLoadIdentity();
     
                    gluOrtho2D(0, Width, 0, Height);
                    glMatrixMode(GL_MODELVIEW);
     
    end;
    Dessin OpenGL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure DrawGLScene();
    begin
    	glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);	glBindTexture(GL_TEXTURE_2D, texture[0]);
     
                    glLoadIdentity();
     
            glBegin(GL_QUADS);
                    glTexCoord2f( 0.0, 0.0); glVertex3f(  0.0,  0.0, 0.0);
                    glTexCoord2f(32.0, 0.0); glVertex3f( 32.0,  0.0, 0.0);
                    glTexCoord2f(32.0,32.0); glVertex3f( 32.0, 32.0, 0.0);
                    glTexCoord2f( 0.0,32.0); glVertex3f(  0.0, 32.0, 0.0);
            glEnd();
    end;
    Je n'ai affiché qu'un Quad pour simplifier, mais le principe est le même avec une mosaïque ( boucle du style for i:=1 to Width... ).
    Au fait, mon code est en Delphi, mais compréhensible par les codeurs Objet de tous les langages


  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 3
    Par défaut
    Eh, j'ai trouvé. Je sais, je suis un clampin, mais les coordonnées d'une texture vont de 0.0 à 1.0. Pas au-delà. OK, no comment.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2002
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 9
    Par défaut
    Si, les coord de textures peuvent aller au dela de 1.0 mais dans ce cas tu repete ta texture ( d ou la mosaique). De meme si tu es en dessous de 1.0 tu ne vas dessiner qu une seule partie de la texture.

  6. #6
    Membre éclairé
    Inscrit en
    Mars 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 84
    Par défaut
    GL_REPEAT pour mosaique

    GL_WRAP pour redimensionner a la taille voulu

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

Discussions similaires

  1. Couleur et texture
    Par MAGNUM_HEAD dans le forum OpenGL
    Réponses: 4
    Dernier message: 23/05/2003, 17h12
  2. Afficher une image sans passer par les textures
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/05/2003, 19h13
  3. Chargement d'une texture a partir de la mémoire
    Par logramme dans le forum DirectX
    Réponses: 6
    Dernier message: 27/01/2003, 14h57
  4. appliquer des textures de taille 2n+1
    Par Katsuo chris dans le forum DirectX
    Réponses: 4
    Dernier message: 14/11/2002, 00h11
  5. Changer l'image d'une texture
    Par alltech dans le forum DirectX
    Réponses: 5
    Dernier message: 21/08/2002, 01h31

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