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

DirectX Discussion :

[c#][Directx] blending de texture


Sujet :

DirectX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 134
    Par défaut [c#][Directx] blending de texture
    Je cherche à faire du blending de texture pour mon terrain :

    un type de terrain (herbe, sable, etc) est appliqué à chaque intervalle de hauteur de ma heightmap. Voici mon approche erronée mais que vous pourriez peut être rectifier :

    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
    device.SetTexture(0, tex[0]);
            device.SetTexture(1, tex[1]);
     
    device.SetTextureStageState(0, TextureStageStates.ColorArgument1, true);
            device.SetTextureStageState(0, TextureStageStates.ColorArgument2, true);
            device.SetTextureStageState(0, TextureStageStates.ColorOperation, true);
     
     
            device.SetTextureStageState(1, TextureStageStates.ColorArgument1, true);
            device.SetTextureStageState(1, TextureStageStates.ColorArgument2, true);
            device.SetTextureStageState(1, TextureStageStates.ColorOperation, true);
     
     
            device.TextureState[0].ColorArgument1 = TextureArgument.TextureColor;
            device.TextureState[0].ColorArgument2 = TextureArgument.Diffuse;
            device.TextureState[0].ColorOperation = TextureOperation.Modulate;
     
            device.TextureState[1].ColorArgument1 = TextureArgument.TextureColor;
            device.TextureState[1].ColorArgument2 = TextureArgument.Diffuse;
            device.TextureState[1].ColorOperation = TextureOperation.BlendTextureAlpha;
    L'idéal sera de faire un blending avec plusieurs textures différentes.
    Merci

  2. #2
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 53
    Par défaut
    Voici un lien sur la technique que tu cherche a utilisé :
    http://www.alrj.org/viewdoc.php?doc_id=145
    L'auteur utilise opengl pour le rendu mais le principe reste le meme.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 134
    Par défaut
    Merci beaucoup ça répond pile à ce que je désirai.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 134
    Par défaut
    J'ai essayé de faire du splatting mais pas évident à mettre en place, certaines choses doivent m'échapper. J'utilise une heitmap 64*64 en stage 0 et une texture d'herbe en stage 1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    device.SetTexture(0, tex[0]);
            device.SetTexture(1, tex[2]);
     
            device.TextureState[0].ColorOperation = TextureOperation.Modulate;        
            device.TextureState[0].ColorArgument1 = TextureArgument.TextureColor;        
            device.TextureState[0].ColorArgument2 = TextureArgument.Diffuse;        
            device.TextureState[0].AlphaOperation = TextureOperation.SelectArg1;        
            device.TextureState[0].AlphaArgument1 = TextureArgument.TextureColor;        
     
            device.TextureState[1].ColorOperation = TextureOperation.SelectArg1;        
            device.TextureState[1].ColorArgument1 = TextureArgument.Current;        
            device.TextureState[1].AlphaOperation = TextureOperation.SelectArg1;        
            device.TextureState[1].AlphaArgument1 = TextureArgument.Current;
            device.TextureState[1].AlphaArgument2 = TextureArgument.TextureColor;
    Cependant rien n'y fait, merci pour vos conseils.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 134
    Par défaut
    j'ai trouvé une réponse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    device.SetTexture(0, texMap[1]);
            device.SetTexture(1, texMap[3]);
            device.SetTextureStageState(0, TextureStageStates.ColorArgument1, (int)TextureArgument.TextureColor);
            device.SetTextureStageState(0, TextureStageStates.ColorOperation, (int)TextureOperation.SelectArg1);
            device.SetTextureStageState(1, TextureStageStates.ColorArgument1, (int)TextureArgument.Current);
            device.SetTextureStageState(1, TextureStageStates.ColorArgument2, (int)TextureArgument.TextureColor);
            device.SetTextureStageState(1, TextureStageStates.ColorOperation, (int)TextureOperation.AddSigned);
    Ce code signifie qu'on utilise une texture générale pour toute la map et une autre texture pour le détail en fondu avec la première. Cela augmente considérablement le détail et sans perdre une FPS (ou presque car je n'ai pas compté) et surtout sans utiliser les pixels shader.

    Cependant, pensez-vous qu'il est possible d'utiliser une troisième texture pour augmenter le détail ?

Discussions similaires

  1. OpenSceneGraph: problème de blending de texture
    Par cheveche4 dans le forum OpenSceneGraph
    Réponses: 4
    Dernier message: 08/04/2008, 19h14
  2. DirectX RenderMonkey génération texture
    Par Moth13 dans le forum API graphiques
    Réponses: 4
    Dernier message: 20/12/2007, 08h17
  3. Réponses: 1
    Dernier message: 06/04/2006, 17h04
  4. Format d'image et texture directx
    Par Johngame dans le forum DirectX
    Réponses: 1
    Dernier message: 04/02/2004, 21h39
  5. Alpha blending et Z-buffer directx 8
    Par Cesar4 dans le forum DirectX
    Réponses: 1
    Dernier message: 23/05/2002, 12h58

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