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 :

Cohabitation Multitexturing et Texture de base [OpenGL][JOGL]


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 2
    Par défaut Cohabitation Multitexturing et Texture de base [OpenGL][JOGL]
    Bien le bonjour.
    J'ai un problème de cohabitation de textures dans mon programme JOGL.

    - D'un côté j'utilise un texture de ciel plaquée sur une sphère afin de réaliser un SkyDome
    - De l'autre j'effectue un bump mapping sur une surface plane avec une texture de base et une normal map.

    Séparément, les deux méthodes fonctionnes, mais ensembles dans le même programme j'obtiens un merveilleux écran noir

    Du côté initialisation de texture ça donne ceci :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    /******************************* 
     *   TEXTURES INITIALISATION              *
     *******************************/
    private void loadGLTextures(GL gl, GLU glu) throws IOException
        {   
            // Skydome texture
    gl.glGenTextures(1, skyTexture, 0);   // Create one Textures
    TextureReader.Texture texture = TextureReader.readTexture("sky_MD.jpg");  
    gl.glBindTexture(GL.GL_TEXTURE_2D, skyTexture[0]);
    gl.glTexImage2D(GL.GL_TEXTURE_2D, 0, GL.GL_RGB8, texture.getWidth(),texture.getHeight(), 0, GL.GL_RGB, GL.GL_UNSIGNED_BYTE,texture.getPixels());
    gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_NEAREST);
    gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_NEAREST);
     
    System.err.println("Texture : sky_MD.jpg "+texture.getWidth()+"x"+texture.getHeight()+" LOADED");
     
    // Load Water texture
    texture = TextureReader.readTexture("waterTextureHD.jpg");  
    gl.glGenTextures(2, waterTexture, 0);   // Create Three Textures
    gl.glBindTexture(GL.GL_TEXTURE_2D, waterTexture[0]); // Create Nearest Filtered Texture
    gl.glTexImage2D(GL.GL_TEXTURE_2D, 0, 3, texture.getWidth(), texture.getHeight(), 0, GL.GL_RGB, GL.GL_UNSIGNED_BYTE, texture.getPixels());
    gl.glTexParameteri(GL.GL_TEXTURE_2D,GL.GL_TEXTURE_MIN_FILTER,GL.GL_LINEAR);	// Linear Filtering
    gl.glTexParameteri(GL.GL_TEXTURE_2D,GL.GL_TEXTURE_MAG_FILTER,GL.GL_LINEAR);	// Linear Filtering
     
    System.err.println("Texture : waterTextureHD.jpg "+texture.getWidth()+"x"+texture.getHeight()+" LOADED");
     
    // Load The Bumpmaps
    texture = TextureReader.readTexture("waterTextureHDNormalMap2.jpg");  
    gl.glBindTexture(GL.GL_TEXTURE_2D, waterTexture[1]); // Create Nearest Filtered Texture
    gl.glTexImage2D(GL.GL_TEXTURE_2D, 0, GL.GL_RGB8, texture.getWidth(), texture.getHeight(), 0, GL.GL_RGB, GL.GL_UNSIGNED_BYTE, texture.getPixels());
    gl.glTexParameteri(GL.GL_TEXTURE_2D,GL.GL_TEXTURE_MIN_FILTER,GL.GL_LINEAR);	// Linear Filtering
    gl.glTexParameteri(GL.GL_TEXTURE_2D,GL.GL_TEXTURE_MAG_FILTER,GL.GL_LINEAR);	// Linear Filtering
     
    System.err.println("Texture : waterTextureHDNormalMap.jpg "+texture.getWidth()+"x"+texture.getHeight()+" LOADED");
     
    gl.glActiveTexture(GL.GL_TEXTURE1);
    gl.glEnable(GL.GL_TEXTURE_2D);
    gl.glBindTexture(GL.GL_TEXTURE_2D, waterTexture[1]);
    gl.glTexEnvi(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, GL.GL_COMBINE);
    gl.glTexEnvi(GL.GL_TEXTURE_ENV, GL.GL_COMBINE_RGB, GL.GL_DOT3_RGB) ;
    gl.glTexEnvi(GL.GL_TEXTURE_ENV, GL.GL_SOURCE0_RGB, GL.GL_PREVIOUS) ;
    gl.glTexEnvi(GL.GL_TEXTURE_ENV, GL.GL_SOURCE1_RGB, GL.GL_TEXTURE) ;
     
    gl.glActiveTexture(GL.GL_TEXTURE2);
    gl.glEnable(GL.GL_TEXTURE_2D);
    gl.glBindTexture(GL.GL_TEXTURE_2D, waterTexture[0]);
    gl.glTexEnvi(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, GL.GL_MODULATE);
        }

    Ensuite dans mon display() je commence par la création du skydome :

    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
    20
    21
     
    /** Skydome display
     * Create a glu sphere and map sky texture
     */
     
    gl.glPushMatrix();
    gl.glDisable(GL.GL_LIGHTING);
    gl.glEnable(GL.GL_TEXTURE_2D);
    gl.glBindTexture(GL.GL_TEXTURE_2D, skyTexture[0]);
    glu.gluQuadricOrientation(g_quadratic, GLU.GLU_CW);
    glu.gluQuadricNormals(g_quadratic, GLU.GLU_SMOOTH);
    glu.gluQuadricTexture(g_quadratic, true);
    glu.gluQuadricDrawStyle(g_quadratic, GLU.GLU_FILL);
    gl.glTranslatef(poscam.getX(), poscam.getY(), poscam.getZ());
    gl.glRotatef(-90f, 1.0f, 0f, 0f);
     
    glu.gluSphere(g_quadratic,far,50,100);
    gl.glPopMatrix();
    gl.glEnable(GL.GL_DEPTH_TEST);
     
    gl.glDepthMask(true);
    Ensuite pour le texturage de la surface j'effctue ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    gl.glEnable(GL.GL_TEXTURE_2D);
    gl.glBegin(GL.GL_QUADS);
    gl.glMultiTexCoord2f(GL.GL_TEXTURE1, xTextureCoordinate*10-textureMotion,yTextureCoordinate*10-textureMotion);
    gl.glMultiTexCoord2f(GL.GL_TEXTURE2, xTextureCoordinate*10+textureMotion,yTextureCoordinate*10+textureMotion);
    gl.glVertex3f(oceanMesh.elementAt(temp).elementAt(temp2).getX(),oceanMesh.elementAt(temp).elementAt(temp2).getY(),			  oceanMesh.elementAt(temp).elementAt(temp2).getZ());
     
    // Idem pour les trois autres point du QUAD
     gl.glEnd();
    D'un côté j'ai donc un simple bind de texture, de l'autre j'ai deux texture unit GL_TEXTURE1 et GL_TEXTURE2.
    Donc je cherche un moyen de spécifier la bonne texture à appliquer et de désactiver temporairement les autres.

    Merci d'avance à ceux qui prendrons le temps de m'aider, et n'hésitez pas à me demander des infos supplémentaires si besoin ^^

  2. #2
    Nouveau candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 2
    Par défaut Amélioration
    EDIT 31/05 : j'ai progressé maintenant mon ciel est texturé mais la texture est celle de la normal map, de plus il clignote étrangement en nuance de bleu...
    J'ai modifié le code dans le premier message.

    Autre chose bizarroïde, le simple fait de rajouter la déclaration de la texture du ciel, comme ci-dessous, dans ma fonction d'initialisation de texture loadGLTextures, change l'aspect du rendu, alors que nul part dans le display je n'y fais référence, elle serait donc active par défaut ? Dans ce cas il doit bien y avoir un moyen de désactiver certaine texture lors du calcul de la frame...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    gl.glActiveTexture(GL.GL_TEXTURE3);
    gl.glEnable(GL.GL_TEXTURE_2D);
    gl.glBindTexture(GL.GL_TEXTURE_2D, skyTexture[0]);
    gl.glTexEnvi(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, GL.GL_REPLACE);


    Bref, je désespère de trouver la bonne combinaison

    PS : j'ai rajouté le .java correspondant au main de mon programme si ça peut aider.
    VagueGUI.java

Discussions similaires

  1. Texture video en OpenGL ES sous Linux
    Par Aladin.LAM dans le forum OpenGL
    Réponses: 4
    Dernier message: 06/03/2013, 14h25
  2. [2D/3D] Chargement de texture JPG avec OpenGL
    Par purplepachiderme dans le forum Qt
    Réponses: 8
    Dernier message: 28/11/2010, 23h27
  3. texture visage en openGL
    Par acnalbasac dans le forum Développement 2D, 3D et Jeux
    Réponses: 5
    Dernier message: 19/11/2007, 12h08
  4. Taille maxi des textures suivant version OpenGL
    Par Invité dans le forum OpenGL
    Réponses: 11
    Dernier message: 28/07/2006, 19h42
  5. BP avec Textures en OpenGL
    Par skyghis dans le forum OpenGL
    Réponses: 11
    Dernier message: 27/11/2003, 17h15

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