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 :

Paramètres ARB et lightmap statique


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 18
    Par défaut Paramètres ARB et lightmap statique
    Salut,

    J'ai un petit soucis avec les textures ARB (mon programme doit rester utilisable sur des plateformes portables (opengl es) leur utilisation est donc impérative).

    J'ai 2 maps:
    - diffuse RGBA 8888 (A est utilisé)
    - lightmap statique RGBA 8888 (A est plein mais il sert à autre chose, donc doit être ignoré)

    J'aimerai afficher mes polygones en utilisant l'alpha de la map diffuse sur la lightmap.
    Apparemment j'y parviens mais ce qui est affiché est semi-transparent.
    Ce qui me gène le plus c'est que quelque soit les paramètres que j'utilise l'affichage ne change pratiquement pas et j'ai un mal fou pour trouver des info sur les paramètres ARB (tout le monde est passé -à juste raison- sur les shaders, mais c'est impératif dans mon cas)

    Code de base pour l'affichage:
    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
     
    void gl_face_drawFace_TEXTUREARB2(sFACE *pface, sVERT *pverts, sMAPVERT *pmapverts0,sMAPVERT *pmapverts1){
    long id, x0,y0,z0,  x1,y1,z1,  x2,y2,z2 ; // ne sautez pas au plafond c'est en fixed .12 ;)
    id = pface->vertsId[0] ;
    x0 = pverts[id].pos_world[0] ;
    y0 = pverts[id].pos_world[1] ;
    z0 = pverts[id].pos_world[2] ;
    id = pface->vertsId[1] ;
    x1 = pverts[id].pos_world[0] ;
    y1 = pverts[id].pos_world[1] ;
    z1 = pverts[id].pos_world[2] ;
    id = pface->vertsId[2] ;
    x2 = pverts[id].pos_world[0] ;
    y2 = pverts[id].pos_world[1] ;
    z2 = pverts[id].pos_world[2] ;
     
    glBegin(GL_TRIANGLES) ;
    glMultiTexCoord2fARB(GL_TEXTURE0_ARB, pmapverts0[0].pos[0],pmapverts0[0].pos[1]) ;
    glMultiTexCoord2fARB(GL_TEXTURE1_ARB, pmapverts1[0].pos[0],pmapverts1[0].pos[1]) ;
    glVertex3i(x0,y0,z0) ;
    glMultiTexCoord2fARB(GL_TEXTURE0_ARB, pmapverts0[1].pos[0],pmapverts0[1].pos[1]) ;
    glMultiTexCoord2fARB(GL_TEXTURE1_ARB, pmapverts1[1].pos[0],pmapverts1[1].pos[1]) ;
    glVertex3i(x1,y1,z1) ;
    glMultiTexCoord2fARB(GL_TEXTURE0_ARB, pmapverts0[2].pos[0],pmapverts0[2].pos[1]) ;
    glMultiTexCoord2fARB(GL_TEXTURE1_ARB, pmapverts1[2].pos[0],pmapverts1[2].pos[1]) ;
    glVertex3i(x2,y2,z2) ;
    glEnd() ;
    }
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    // unité 0 (la texture + alpha)
    glActiveTextureARB(GL_TEXTURE0_ARB);
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, ptexture0->numTex);
     
    // unité 1 (la lightmap)
    glActiveTextureARB(GL_TEXTURE1_ARB);
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, ptexture1->numTex);
     
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    Ce qui m'étonne c'est que quelque soit les paramètres de combinaison que je peux passer au unités, l'affichage ne change pas.



    Question subsidiaire pour les pro de cette lib:
    Est-il possible de faire tout ça en une passe ?.
    - Multiplier les canaux RGB de la lightmap par les canaux RGB de la diffusemap et utiliser le canal ALPHA de la diffusemap pour alphamapper le tout.
    Ou alors je suis forcé d'utiliser soit trois unités de textures soit 2 passes (la première solution est proscrite ; toujours pour une question de portabilité, la seconde solution est juste un peu lente)

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 18
    Par défaut
    Resalut,

    J'ai finalement réussit à solutionner mon problème.
    Il suffisait simplement de faire en sorte que la texture lightmap n'ai que 3 canaux actifs tout en conservant le flag GL_RGBA.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    glTexImage2D(GL_TEXTURE_2D, 0, 3, 1<<ptexture->ushift, 1<<ptexture->vshift, 0, GL_RGBA, GL_UNSIGNED_BYTE, ptexture->data[mipmap])  ;
    Et en effet le produit et l'alpha sont appliqués en une passe, je suis bien content
    Il me reste juste à trouver une solution pour faire du multiplicatif + additif en une passe.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 02/05/2009, 15h27
  2. initialisation d'un paramètre template statique
    Par Ulath0 dans le forum Langage
    Réponses: 3
    Dernier message: 22/02/2009, 11h29
  3. Utiliser des variables statiques pour des paramètres
    Par el_slapper dans le forum VB.NET
    Réponses: 4
    Dernier message: 11/03/2008, 08h55
  4. Paramètre dynamique et statique
    Par lecharcutierdelinux dans le forum Oracle
    Réponses: 1
    Dernier message: 10/05/2007, 21h28

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