begin process at 2012 02 09 10:30:58
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Multimédia

 > 

DirectX

 > 

DIrectX Objet transparent !


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

DIrectX Objet transparent !

samedi 22 novembre 2008 à 17:17:16 | DIrectX Objet transparent !

ansizak

Bonjour,

Je me suis récemment initié à DirectX 9 avec l'idée de réaliser un moteur 3D Isométrique (vue 3e personne).
J'arrive ainsi à générer une "carte" constituée de pavés.
J'applique donc des textures à ces pavés mais ils s'avère que l'ont voit à travers mes objets, comme si la texture était transparente. Comment puis-je résoudre ce problème ?

Merci par avance,
Cordialement,
Anz.
dimanche 23 novembre 2008 à 16:39:14 | Re : DIrectX Objet transparent !

bubbathemaster

Salut:
1. Abandonne DirectX avec .NET: c'est un projet officiellement annulé par MS.
2. Pour ton probleme, as-tu vérifié que tu ne passe pas une couleur d'alpha quand tu dessine?

lundi 24 novembre 2008 à 00:20:23 | Re : DIrectX Objet transparent !

ansizak

Ok...
Je n'ai pas vraiment saisi ton point 2.
Et qu'entend tu par "c'est un projet officiellement annulé par MS" exactement ?
lundi 24 novembre 2008 à 02:31:43 | Re : DIrectX Objet transparent !

bubbathemaster

DirectX pour .NET est abandonné par MS. Les dernières versions du SDK ne le comporte pas: donc tu dev avec une technologie que microsoft ne compte pas supporter à l'avenir. Il va falloir revenir au C++ :)

Pour en revenir à la transparence, typiquement tes vertex ont un attribut color qui est un dword (donc 32bits), avec RGBA.
Donc tu définis ça avec 0xRRGGBBAA

Si tu ne veux pas d'alpha mets AA à 0xFF. Pour appliquer une texture sur un quad (je suppose que c'est ce que tu fais), vérifie que la couleur de tes vertex est bien à 0xFFFFFFFF.
lundi 24 novembre 2008 à 15:58:27 | Re : DIrectX Objet transparent !

ansizak

Et bien merci pour tes informations.. Je me mettrais au C++, mais je dois avouer que pour le moment je ne sais pas trop par où commencer.
Par contre je n'applique pas réellement de texture directement sur un quadrillatère.. Je débute, je ne savais même ps qu'il était possible de définir un quadrillatère, je me contente de les créer des triangle strip via des CustomVertex.PositionTextured et j'applique une partie de la texture sur chaque triangle..

Je n'ai toujours pas vraiment compris quelle propriété contient l'information qui précise si ma texture contient un canal alpha...

Voici un extrait de code qui permet de générer un pavé:

VertexBuffer[,] buf = new VertexBuffer[i, j];
           
            //Pour chaque ligne de la carte
            for (int l = 0;l<i;l++)
            {
                //pour chaque colonne de la carte
                for (int m = 0; m < j; m++)
                {
                    //creation du buffer [ligne,colonne] correpondant à une tuile
                    buf[l, m] = new VertexBuffer(typeof(CustomVertex.PositionTextured), 30, device, 0, CustomVertex.PositionTextured.Format, Pool.Default);
                    CustomVertex.PositionTextured[] tile = (CustomVertex.PositionTextured[])buf[l, m].Lock(0, 0);

                    // 2 triangles par face
                    tile[0].Position = new Vector3(l, 0.5f + (float)(0.2*hights[l,m]), -m);
                    tile[0].Tv = 0.0f;
                    tile[0].Tv = 0.0f;

                    tile[1].Position = new Vector3(l, 0.0f, -m);
                    tile[1].Tu = 0.0f;
                    tile[1].Tv = 1.0f;

                    tile[2].Position = new Vector3((l + 1), 0.5f + (float)(0.2*hights[l,m]), -m);
                    tile[2].Tu = 1.0f;
                    tile[2].Tv = 0.0f;

                    tile[3].Position = new Vector3((l + 1), 0.0f, -m);
                    tile[3].Tu = 1.0f;
                    tile[3].Tv = 1.0f;

                    tile[4].Position = new Vector3((l + 1), 0.5f + (float)(0.2*hights[l,m]), -(m + 1));
                    tile[4].Tu = 2.0f;
                    tile[4].Tv = 0.0f;

                    tile[5].Position = new Vector3((l + 1), 0.0f, -(m + 1));
                    tile[5].Tu = 2.0f;
                    tile[5].Tv = 1.0f;

                    tile[6].Position = new Vector3(l, 0.5f + (float)(0.2*hights[l,m]), -(m + 1));
                    tile[6].Tu = 3.0f;
                    tile[6].Tv = 0.0f;

                    tile[7].Position = new Vector3(l, 0.0f, -(m + 1));
                    tile[7].Tu = 3.0f;
                    tile[7].Tv = 1.0f;

                    tile[8].Position = new Vector3(l, 0.5f + (float)(0.2*hights[l,m]), -m);
                    tile[8].Tu = 4.0f;
                    tile[8].Tv = 0.0f;

                    tile[9].Position = new Vector3(l, 0.0f, -m);
                    tile[9].Tu = 4.0f;
                    tile[9].Tv = 1.0f;


                    //base
                    tile[10].Position = new Vector3(l, 0.5f + (float)(0.2*hights[l,m]), -m);
                    tile[10].Tu = 0.0f;
                    tile[10].Tv = 0.0f;

                    tile[11].Position = new Vector3((l + 1), 0.5f + (float)(0.2*hights[l,m]), -m);
                    tile[11].Tu = 0.0f;
                    tile[11].Tv = 1.0f;

                    tile[12].Position = new Vector3(l, 0.5f + (float)(0.2*hights[l,m]), -(m + 1));
                    tile[12].Tu = 1.0f;
                    tile[12].Tv = 0.0f;

                    tile[13].Position = new Vector3((l + 1), 0.5f + (float)(0.2*hights[l,m]), -(m + 1));
                    tile[13].Tu = 1.0f;
                    tile[13].Tv = 1.0f;

                    buf[l, m].Unlock();

                }
            }


Peut-être pourras tu me préciser ou je doit définir l'absence de canal alpha.

Merci à toi,

Cordialement,
Anz

lundi 24 novembre 2008 à 16:29:18 | Re : DIrectX Objet transparent !

bubbathemaster

Oui un quad est formé de 2 triangles, donc c'est normal :)

Par contre tu as des coordonnées certaines UV supérieures à 1, ce n'est pas correct.

La couleur de tes vertex est un attribut de CustomVertex. Je ne sais aps comment tu as déclaré tes vertex, car tu peux mettre un peu ce que tu veux dedans.

Tiens un petit exemple en C++:
http://www.two-kings.de/tutorials/dxgraphics/dxgraphics07.html

D'ailleurs je me suis mélangé les pinceaux avec OpenGL, dans directx les couleurs c'est ARGB, et non pas RGBA.

Tu devrais reprendre les tutoriaux de base fournis avec le SDK et reprendre morceau par morceau: dessiner un triangle, un quad, texturer un quad avec des coordonnées UV :p
lundi 24 novembre 2008 à 19:57:15 | Re : DIrectX Objet transparent !

ansizak

Salut à toi, je vais regarder tes liens de ce pas.
Pour les coordonnées de textures supérieures à 1, c'est possible, cela me permet de dupliquer la texture (en commençant à 1 et en allant juqu'à 2 c'est comme si j'allais de 0 à 1, cela peut paraitre tordu, mais ça me permet de mettre en relation les sommets de mon pavé avec leurs textures).

Tu m'a donnée un coup de motive, je me suis lancé dans le C++, je vais essayer de recréer mon projet dans ce langage. Mais pour le moment les tutos que j'ai suivis mentionnent surtout la SDL en ce qui concerne le traitement d'image.
Pour la creation de fenetre dois-je passer par la SDL ou bien DirectX permet-t-il de gérer cela lui-même ?


mardi 25 novembre 2008 à 05:21:17 | Re : DIrectX Objet transparent !

Lutinore

Administrateur CodeS-SourceS
Réponse acceptée !
Salut, avec Direct3D en C++ les fenêtres sont crées via l'API Win32 :

http://msdn.microsoft.com/en-us/library/ms632586(VS.85).aspx

Managed DirectX est maintenant remplacé par XNA mais tes connaissances de MDX ne sont pas perdues puisque XNA est basé sur Direct3D.

http://msdn.microsoft.com/en-us/xna/default.aspx
mardi 25 novembre 2008 à 16:10:27 | Re : DIrectX Objet transparent !

bubbathemaster

Réponse acceptée !
ansizak ne perds pas ton temps à chercher des tutos directx sur le net:

Télécharger le DirectX sdk directement sur Microsoft, après t'as TOUT ce que tu cherche, mais vraiment hein! Microsoft se casse le cul pour créer des tutos débutants comme des tutos super avancés sur les shaders, sers t-en! En plus à chaque fois c'est des projets Visual Studio tout près à être utilisés.

Par exemple, créer une fenêtre, c'est un tuto disponible! Sers toi du browser:


mardi 25 novembre 2008 à 16:12:35 | Re : DIrectX Objet transparent !

bubbathemaster

Tu vas voir qu'en dehors de cette gestion de fenêtre très bas niveau tu vas retrouver +/- ce que tu as vu en C#. DirectX pour C# c'était juste une sorte de wrapper pour l'API native, tu ne seras pas perdu.

1 2

Cette discussion est classée dans : objet, transparent, directx, pavés


Répondre à ce message

Sujets en rapport avec ce message

PictureBox transparent [ par Chebitou ] Bonjour, Voici mon problème : j'ai un PictureBox qui contient une image et je voudrais simuler le déplacement d'un objet sur l'image, mais je veux q Capture audio [ par locus ] Bonjour,j'essaie de faire un logiciel de visioconference avec une webcam pour acquerir un savoir faire.Pour cela je me sers de directshow.net et la li insert et objet [ par babe59 ] Bonjour,Hypothèse :    - une table TBL_CLIENT : données es clients    - un objet "Client" qui permet (entre autre) de géré un client. Cet objet contie Reflection et Instances d'attributs [ par t00f ] Bonjour,J'ai un objet List.Je veux que T soit en fonction d'un objet récupérer par réflexion. Je l'ai récupéré mais je sais pas comment l'écrire.Si mo transformer un champ d'un objet sqlReader en DateTime [ par fabian86 ] bonjour,J'ai besoin d'une âme charitable qui pourrait m'aider. Je réalise une application windows connecté à une DB. J'ai une table patient qui a 5 ch Reflection sur une méthode statique [ par t00f ] Bonjour à tous,Je viens vers vous pour une question concernant la réflection.Lorsque j'appelle une méthode normalement (non statique) je peux récupére Drag and Drop TreeView vers DataGridView [ par ulysse1976 ] BonjourVoila j'ai un treeview avec des noeud qui represante des objets et j'aimerais glisser-deposser l'un de ces noeud vers une DataGridView.Mon prob SOS sur l'objet backgroundWorker [ par rocaro ] J'ai crée une appli avec une forme dans laquelle j'utilise le composant backgroundWorker pour exécuter une tache en arriere plan.Or j'ai vérifié avec DirectX insertion image [ par bolandfranck ] Bonjour,Le code ci-après est une partie d'un projet de menu carousel récupéré sur le net.Mon problème est qu'il utilise du directX et que je ne connai Reflection sur une liste [ par t00f ] Bonjour à tous,Je reviens vers vous pour une nouvelle question sur la reflexion.J'ai une class qui possède une List d'objet B, avec B qui hérite de la


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,640 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales