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 :

pb d'affichage de matériaux/mesh


Sujet :

DirectX

  1. #1
    Membre régulier
    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
    Points : 75
    Points
    75
    Par défaut pb d'affichage de matériaux/mesh
    J'ai un problème d'affichage de mes matériaux. En effet, si je désactive la gestion de la lumière :

    device.RenderState.Lighting = false ;

    ma mesh s'affiche avec le mapping, sinon si la valeur est true, ma mesh est noire ! malgré la lumière (rouge) que j'ai mise en place.

    mon autre mesh, lorsque celle citée ci-dessus s'affiche avec le mapping (lumière en false), elle s'affiche en blanc sans mapping, et en rouge lorsque l'autre est affichée en noir !

    J'utilise 3dsmax 5 pour faire mes meshes (la première c un tigre du sdk, et la deuxième une simple boite avec un mapping brique).

    Bref pour résumer : j'ai deux meshes, l'une affichée blanc, l'autre correctement avec son mapping, lorsque la lumière est désactivée ;
    Par contre lorsque j'active la lumière, la première mesh est rouge là où la lumière l'éclaire, et l'autre mesh est toute noire...

    Je pense que le pb vient de l'affichage de mes matériaux (j'utilise une fonction progressive de la mesh) :

    for (int i = 0; i < meshMaterials.Length; i++)
    {
    dev.Material = meshMaterials[i];
    dev.SetTexture(0, meshTextures[i]);
    pmesh.DrawSubset(i);

    }

    Merci à ceux qui comprendront mon problème ( car c pas simple à expliquer)

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Les normales des vertices de tes meshes sont bien définies ?

  3. #3
    Membre régulier
    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
    Points : 75
    Points
    75
    Par défaut
    Oui elles sont bien définies. J'ai résolu mon problème, ça fonctionne (c t la meshe qui était mal faite). Par contre, mes meshes transparentes sous 3dsmax ne le sont pas sous directX. J'ai ajouté cette ligne :

    device.RenderState.AlphaBlendEnable=true;

    mais rien de plus, ça ne marche pas ; j'imagine qu'il y a d'autre paramètres.

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Il faut effectivement paramètrer d'autres states, en C# je ne sais pas mais ça devrait ressembler à device.RenderState.SrcBlend et device.RenderState.DestBlend. Il y a aussi les unités de texture à paramètrer, selon que tu prends l'alpha de tes vertices ou celui de ta texture.

  5. #5
    Membre régulier
    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
    Points : 75
    Points
    75
    Par défaut
    Ok merci, je vais me renseigner/tester, et si je trouve je mettrai la réponse.

  6. #6
    Membre régulier
    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
    Points : 75
    Points
    75
    Par défaut
    En effet, c'est bien ce genre de syntaxe, sauf que cela n'a aucun effet sur ma mesh :

    device.RenderState.SourceBlend = Blend.SourceAlpha;

    device.RenderState.DestinationBlend = Blend.InvDestinationAlpha;

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Plutôt

    device.RenderState.DestinationBlend = Blend.InvSourceAlpha;

    Sinon, est-ce que ta texture comporte bien un canal alpha ? Est-il correctement chargé ?

  8. #8
    Membre régulier
    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
    Points : 75
    Points
    75
    Par défaut
    Oui j'ai remplacé avec ce que tu m'as dit ça me parait plus logique, mais toujours rien.

    Sinon, est-ce que ta texture comporte bien un canal alpha ? Est-il correctement chargé ?


    J'en sais rien du tout lol, tu me parles en chinois... Si tu pouvais m'expliquer comment charger un canal alpha ? ou me donner un élément de réponse pour que je trouve ça (dans la doc du sdk). Merci[/quote]

  9. #9
    Membre régulier
    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
    Points : 75
    Points
    75
    Par défaut
    J'ai trouvé ce code qui me parait bon mais rien de marche ! c'est vrai que les tutoriaux directx ne se trouvent pas à la pelle !

    /Render States
    device.RenderState.AlphaBlendEnable = true;
    device.RenderState.AlphaFunction = Compare.Greater;
    device.RenderState.AlphaTestEnable = true;
    device.RenderState.DestinationBlend = Blend.InvSourceAlpha;
    device.RenderState.SourceBlend = Blend.SourceAlpha;
    device.RenderState.DiffuseMaterialSource = ColorSource.Material;

    //Color blending ops
    device.TextureState[0].ColorOperation = TextureOperation.Modulate;
    device.TextureState[0].ColorArgument1 = TextureArgument.TextureColor;
    device.TextureState[0].ColorArgument2 = TextureArgument.Diffuse;

    //set the first alpha stage to texture alpha
    device.TextureState[0].AlphaOperation = TextureOperation.SelectArg1;
    device.TextureState[0].AlphaArgument1 = TextureArgument.TextureColor;

  10. #10
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    C'est bien là-dedans qu'il faut aller trifouiller, mais pour savoir quoi y mettre il faudrait déjà savoir ou se situent tes informations de transparence (sommets ? texture ?) par exemple. Ensuite si ces informations (ie. le canal alpha) est dans une de tes textures, il faut s'assurer qu'il soit bien chargé dans la texture DirectX correspondante.

    En attendant tu peux lire la doc du SDK pour savoir exactement à quoi correspondent tous ces paramètres, ça ne pourra pas faire de mal .

  11. #11
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 99
    Points : 115
    Points
    115
    Par défaut
    Les normales sont-elles correctement normalisees ?
    Laurent -- http://jeux-directx.com/

  12. #12
    Membre régulier
    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
    Points : 75
    Points
    75
    Par défaut
    Les normales d'une de mes meshes étaient inexistantes ou inversées :
    voici donc le code nécessaire à la gestion de matériaux transparents :

    device.RenderState.AlphaBlendEnable = true;
    device.RenderState.AlphaFunction = Compare.Greater;
    device.RenderState.AlphaTestEnable = true;
    device.RenderState.DestinationBlend = Blend.InvSourceAlpha;
    device.RenderState.SourceBlend = Blend.SourceAlpha;
    device.RenderState.DiffuseMaterialSource = ColorSource.Material;

    Bien sûr le matériaux (sous 3dsmax par exemple) doit bien sûr être transparent.

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

Discussions similaires

  1. Affichage bizarre de mes mesh créés via blender
    Par supertom dans le forum Ogre
    Réponses: 0
    Dernier message: 26/10/2008, 17h33
  2. [C#][DirectX] Probleme affichage Meshes
    Par Malko06 dans le forum Moteurs 3D
    Réponses: 2
    Dernier message: 07/02/2008, 11h08
  3. directx managed affichage simple mesh
    Par t-die dans le forum DirectX
    Réponses: 3
    Dernier message: 24/05/2006, 09h52
  4. affichage d'un mesh transparent
    Par conrad dans le forum DirectX
    Réponses: 4
    Dernier message: 09/03/2005, 19h30
  5. [C#] Affichage foireux des meshs
    Par Ingham dans le forum DirectX
    Réponses: 8
    Dernier message: 29/11/2004, 23h24

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