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 :

[OpenGL/C++] Opérations sur les Textures


Sujet :

OpenGL

  1. #1
    Membre averti Avatar de Bob.Killer
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    336
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 336
    Points : 332
    Points
    332
    Par défaut [OpenGL/C++] Opérations sur les Textures
    Oyo

    Je cherche à créer un terrain, et je veux faire apparaitre plusieurs texture dessus. Jusque là c pas dur, mais je veux faire ça bien alors g une texture d'herbe et une texture de sable que je veux faire répeter sur le surface. Je veux utiliser une image en niveau de gris pour spécifier ou l'herbe se voit ainsi que le sable... En gros qd c blanc c l'herbe et qd c noir c le sable. (J'espère me faire comprendre...)

    J'ai donc 3 texture : un mask, une d'herbe et une de sable. Je veux multitexturé tt ça sur le terrain donc sur 3 étages de texture. Mais le pb c que je comprend rien aux paramêtre sur les opération de mélange
    Si qq un se sent de m'aider ça serais cool

    Le code devrait ressembler à ça je pense :

    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
    ...
    //Init opengl
    ...
    // Draw
    glBindTexture(GL_TEXTURE_2D, Mask);
    glActiveTextureARB( GL_TEXTURE0 );
    glTexEnvi(?);
     
    glBindTexture(GL_TEXTURE_2D, Sable);
    glActiveTextureARB( GL_TEXTURE1 );
    glTexEnvi(?);
     
    glBindTexture(GL_TEXTURE_2D, Herbe);
    glActiveTextureARB( GL_TEXTURE2 );
    glTexEnvi(?);
     
    // Dessin du terrain
    ...
    J'espère que vous capterez lol

  2. #2
    Membre averti Avatar de Bob.Killer
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    336
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 336
    Points : 332
    Points
    332
    Par défaut
    re... bon ça inspire personne

    sinon si vous avez d autres idées qui peuvent donner le même résultat je suis preneur ! Moi g pensé a un petit fragment programme super simple, mais j aimerais que cela soit pas fait en shader

    "please help !"

  3. #3
    Membre averti Avatar de Bob.Killer
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    336
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 336
    Points : 332
    Points
    332
    Par défaut
    re...

    bon g continué à cherché et g trouvé une méthode qui s appelle le "splatting". Elle consiste à appliquer un masque avec un canal apha avant d'utiliser une texture. Par contre autant de texture on veut plaquer sur le terrain autant de fois il faudra l'afficher

    code trouvé sur gamedev :

    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
    // set alpha map as TEXTURE UNIT 0
    glActiveTextureARB(GL_TEXTURE0);
    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
    glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE0);
    glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
    alphamap->bind();
     
    // set image map as TEXTURE UNIT 1
    glActiveTextureARB(GL_TEXTURE1);
    glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
    glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
    glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PRIMARY_COLOR);
    glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
    glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE1);
    glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
    glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE0);
    glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
    glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB, GL_TEXTURE0);
    glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_ARB, GL_SRC_ALPHA);
    imagemap->bind();
     
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
     
    // Dessin du terrain

  4. #4
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 528
    Points : 5 198
    Points
    5 198
    Par défaut
    Dis, ton masque Alpha, il doit être plutot grand pour couvrir tout le terrain et tes textures herbe et sable plus petites (pas obligatoire si on veut plus de détail par exemple) et surtout répétées non ?

    je demande parceque ce que tu fais m'intéresse et dans ma tête le masque alpha doit couvrir tout le terrain pour indiquer là où il fait apparaitre une texture ou une autre

    tu ne dois pas avoir autant de masques que de types de textures (par type j'entend que herbe en est un et sable un autre)

  5. #5
    Membre averti Avatar de Bob.Killer
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    336
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 336
    Points : 332
    Points
    332
    Par défaut
    ouai tt à fais t as tt capté mon truc lol mais bon les maps alpha peuvent être de petites résolutions car c juste pour placer les autres texture donc ça évite de foutre une grosse map HQ pour couvrir le terrain donc gain de place en mémoire graphique

  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
    si tu utilise une carte assez recente, utilise des fragments program pour faire ca, ca te permettra de faire le rendu en 1 passe tres facilement...

  7. #7
    Membre averti Avatar de Bob.Killer
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    336
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 336
    Points : 332
    Points
    332
    Par défaut
    ouai je sais j y ai pensé comme g dis au dessus... mais bon je voulais que ça marche sur n importe quelle machine

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

Discussions similaires

  1. Opérations sur les textures dans pixels shader
    Par ultimanu dans le forum DirectX
    Réponses: 10
    Dernier message: 27/04/2007, 09h32
  2. Opération sur les dossier...
    Par bdaboah dans le forum Langage
    Réponses: 5
    Dernier message: 01/11/2005, 17h28
  3. Opérations sur les matrices...
    Par aokiseiichiro dans le forum C
    Réponses: 32
    Dernier message: 28/07/2005, 17h10
  4. opérations sur les bits d'un byte
    Par petitours dans le forum C++Builder
    Réponses: 4
    Dernier message: 10/02/2004, 20h42
  5. opérations sur les dates
    Par coucoucmoi dans le forum Débuter
    Réponses: 2
    Dernier message: 12/08/2003, 11h45

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