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 :

Multi-texturing, Bump Mapping et VBOs


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 41
    Par défaut Multi-texturing, Bump Mapping et VBOs
    Bonjour à tous.
    Je bosse sur les VBOs en ce moment, car je trouve qu'il allie rapidité et puissance. Néanmoins, pour améliorer mon rendu, je me suis mis en tête d'intégrer le Bump Mapping.

    J'ai copié les vertex Shader et pixel Shader. Bien sûr, mon loader de Shader et la compilation marchent parfaitement.

    Pixel Shader :

    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
     
    varying vec3 normal,lightVec,viewVec;
     
    uniform sampler2D Texture0;
    uniform sampler2D Texture1;
     
    void main()
    {
    	vec4 color=gl_Color;	
     
    	vec3 N=vec3(texture2D(Texture1,gl_TexCoord[1].st));
    	N.x=N.x-0.5;
    	N.y=N.y-0.5;
    	N.z=N.z-0.5;
          N=normalize(N);
     
    	vec3 L=normalize(lightVec);		
    	vec3 V=normalize(viewVec);	
    	vec3 R=normalize(2.0*dot(N,V)*N-V);
     
    	float LdotN=dot(L,N);
    	float LdotR=dot(L,R);
     
    	// diffuse
          if(LdotN<=0.5)color=gl_Color*LdotN*2.0;
     
    	// speculaire
    	else if(LdotR>0.7)color=gl_Color*LdotR*1.5-0.05;
     
     
    	gl_FragColor=color*texture2D(Texture0,gl_TexCoord[0].st);
    }
    et le vertex Shader :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    varying vec3 normal,lightVec,viewVec;
     
    void main()
    {
    	normal=gl_NormalMatrix*gl_Normal;
    	viewVec=-(gl_ModelViewMatrix*gl_Vertex).xyz;
    	lightVec=(gl_LightSource[0].position).xyz+viewVec;	
     
    	gl_Position=ftransform();
    	gl_FrontColor = gl_Color;
    	gl_TexCoord[0]= gl_MultiTexCoord0; 
    	gl_TexCoord[1]= gl_MultiTexCoord1;
    }
    J'ai recopié la partie d'initialisation des 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
    15
    16
    17
    18
    19
    20
    21
    22
     
    glActiveTextureARB(GL_TEXTURE0_ARB);
     glEnable(GL_TEXTURE_2D);
     glBindTexture(GL_TEXTURE_2D,  Tex_id[0]);
     glActiveTextureARB(GL_TEXTURE1_ARB);
     glEnable(GL_TEXTURE_2D);
     glBindTexture(GL_TEXTURE_2D,  Tex_id[1]);
     
     
     int my_sampler_uniform_location;
     glUseProgram(program);
     
     my_sampler_uniform_location = glGetUniformLocationARB(program, "Texture0");
     glActiveTexture(GL_TEXTURE0 + 0);
     glBindTexture(GL_TEXTURE_2D, Tex_id[0]);
     glUniform1i(my_sampler_uniform_location, 0);
     
     my_sampler_uniform_location = glGetUniformLocationARB(program, "Texture1");
     glActiveTexture(GL_TEXTURE0 + 1);
     glBindTexture(GL_TEXTURE_2D, Tex_id[1]);
     glUniform1i(my_sampler_uniform_location, 1);
     glUseProgram(0);
    Et j'ai un peu de mal à comprendre pourquoi il fait appel deux fois aux mêmes fonctions ?!

    De plus, lorsque j'appelle cette fonction, mon HUD 2D disparaît, et pas moyen de le faire réapparaître sans enlever cette fonction......


    J'ai également recopié la partie du texturing, mais là un problème se pose, l'auteur utilise la vieille technique du glBegin(), glEnd(), pas pratique pour le chargement de modèles...

    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
     
    float position[] = {100*sin(-(float)clock()/1000),1.0,100*cos(-(float)clock()/1000),0.0};
     glLightfv(GL_LIGHT0, GL_POSITION, position);
     
     glDisable(GL_LIGHTING);
     glDisable(GL_TEXTURE_2D);
     glColor3f(1,0,0);
     glPointSize(5);
     glBegin(GL_POINTS);
     glVertex3fv(position);
     glEnd();
     glEnable(GL_TEXTURE_2D);
     glEnable(GL_LIGHTING);
     
     glColor3f(1,1,1);
     glUseProgram(program);
     glNormal3f(0,1,0);
     glBegin(GL_QUADS);
     glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 0.0f, 0.0f);
     glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 0.0f, 0.0f);
     glVertex3f(-100,0,-100);
     
     glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 1.0f, 0.0f);
     glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 1.0f, 0.0f);
     glVertex3f( 100,0,-100);
     
     glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 1.0f, 1.0f);
     glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 1.0f, 1.0f);
     glVertex3f( 100,0, 100);
     
     glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 0.0f, 1.0f);
     glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 0.0f, 1.0f);
     glVertex3f(-100,0, 100);
     glEnd();
     glUseProgram(0);
    De plus, je ne vois pas ou il rebind les textures ?!
    Et même lorsque je copie tout en remplaçant mon système par celui ci, je vois juste un face texturée avec les deux textures mais aucun effet de Bump Mapping, toujours ces couleurs fluo de la texture de Bump.....

    ça fait plusieurs heures que je cherche désespérement un moyen d'afficher cette effet, à savoir faire du Multi texturing avec les VBOs, puis appliquer le Bump Mapping, mais je n'y arrive pas ......
    Les liens que j'ai trouvé viennent de ce forum, et il y a plusieurs fonctions d'activations, mais dans un désordre complexe, j'ai du mal à m'y retrouver.

    Voilà, merci d'avance à ceux qui pourront m'aider !!

  2. #2
    Membre très actif Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Par défaut
    Je serais tenter de te dire qu'au lieu de simplement copier des bouts de code, tu devrais essayer de comprendre la partie théorique du bump mapping. Avec la théorie comprise tu devras ensuite essayer de l'appliquer en pratique et si tu n'y arrives pas inspire toi d'un autre code. Tu risque de bien mieux comprendre le pourquoi en procédant par étape.

  3. #3
    Membre éclairé Avatar de AuraHxC
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 652
    Par défaut
    +1 avec oxyde, rien de mieux que de comprendre la théorie derrière ce qu'est le Bump Mapping pour pouvoir l'implanter correctement. Ainsi que voir correctement comment fonctionne Opengl.

    Et j'ai un peu de mal à comprendre pourquoi il fait appel deux fois aux mêmes fonctions ?!
    Pourquoi il appelle deux fois glUniform, etc...
    Il utilise deux fois parce qu'il y a deux textures de déclaré dans ton shader, il faut bien les liées et les utilisées.

  4. #4
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    Pour le rebind des textures, il n'est pas nécessaire de le faire car il n'y a que 2 textures chargées et donc aucun besoin de soulager la mémoire de la CG en déchargeant les textures pour les rebinder par la suite.
    Pour le résultat que tu obtiens (les 2 images superposées sans effet de bump), est-ce que tu affiches bien les logs de compilation et de link des shaders ? Parce que c'est un résultat que j'obtiens fréquemment quand j'ai des problèmes de compilation ou link d'un shader de type bump-normal-parallax.

    Allez, un peu de pub. Si tu veux voir le multi-texturing avec les VBO, je le fais dans mon moteur 3D dont le lien se trouve dans ma signature. Tu pourras de plus tester ton shader ^^.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 41
    Par défaut
    Merci pour vos réponses, mais en fait j'ai surtout besoin d'aide au niveau du multi-texturing. En effet, je m'entraine au GLSL, et je pensais tester ce shader comme ça, même si je dois apprendre à le construire d'abord.

    dragonjoker59 : j'ai beau cherché partout dans ton code, je ne trouve pas la fonction d'affichage, tu pourrais juste me la citer ici, si cela ne te dérange pas ? (ou m'indiquer le fichier ou elle est)

    AuraHxC : je parlais plutot de la fonction

    glActiveTextureARB(GL_TEXTURE0_ARB);

    et

    glBindTexture(GL_TEXTURE_2D, Tex_id[0]);


    qu'il appelle deux fois par texture .... ?! de plus il faut que je trouve la différence entre glActiveTexture et glActiveTextureARB, ainsi que glClientActiveTexture....

    le reste la fonction glUniform, j'avais compris

  6. #6
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    L'affichage se fait dans le GLRenderSystem, pour les textures dans GLTextureRenderer.cpp (tu peux aussi voir GMMaterialRenderer.cpp et GLSubmeshRenderer.cpp)
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

Discussions similaires

  1. Multi texturing VBO
    Par Lintel-oo dans le forum OpenGL
    Réponses: 6
    Dernier message: 23/03/2012, 07h56
  2. Multi texture dans avec les VBO
    Par yvesall dans le forum OpenGL
    Réponses: 5
    Dernier message: 28/04/2009, 01h05
  3. Réponses: 22
    Dernier message: 28/07/2005, 21h37
  4. Comment faire du bump mapping
    Par CladStrife dans le forum DirectX
    Réponses: 7
    Dernier message: 01/01/2004, 05h07
  5. Bump mapping
    Par Francky033 dans le forum DirectX
    Réponses: 7
    Dernier message: 22/11/2003, 18h35

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