cs_ansizak
Messages postés191Date d'inscriptionmercredi 11 juillet 2007StatutMembreDernière intervention30 juin 2011
-
22 nov. 2008 à 17:17
cs_ansizak
Messages postés191Date d'inscriptionmercredi 11 juillet 2007StatutMembreDernière intervention30 juin 2011
-
25 nov. 2008 à 16:21
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 ?
bubbathemaster
Messages postés339Date d'inscriptiondimanche 26 janvier 2003StatutMembreDernière intervention25 mars 20094 25 nov. 2008 à 16:10
[../auteur/ANSIZAK/1106703.aspx 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:
bubbathemaster
Messages postés339Date d'inscriptiondimanche 26 janvier 2003StatutMembreDernière intervention25 mars 20094 23 nov. 2008 à 16:39
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?
bubbathemaster
Messages postés339Date d'inscriptiondimanche 26 janvier 2003StatutMembreDernière intervention25 mars 20094 24 nov. 2008 à 02:31
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.
cs_ansizak
Messages postés191Date d'inscriptionmercredi 11 juillet 2007StatutMembreDernière intervention30 juin 2011 24 nov. 2008 à 15:58
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;
bubbathemaster
Messages postés339Date d'inscriptiondimanche 26 janvier 2003StatutMembreDernière intervention25 mars 20094 24 nov. 2008 à 16:29
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.
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
cs_ansizak
Messages postés191Date d'inscriptionmercredi 11 juillet 2007StatutMembreDernière intervention30 juin 2011 24 nov. 2008 à 19:57
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 ?
bubbathemaster
Messages postés339Date d'inscriptiondimanche 26 janvier 2003StatutMembreDernière intervention25 mars 20094 25 nov. 2008 à 16:12
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.
cs_ansizak
Messages postés191Date d'inscriptionmercredi 11 juillet 2007StatutMembreDernière intervention30 juin 2011 25 nov. 2008 à 16:21
Salut à vous et merci.
Pour Lutinore, j'avais déjà jeté un coup d'oeil au XNA, mais j'avais eu l'impression de manquer de liberté quant à l'agencement des methodes
(update du terrain etc) mais effectivement ça peut valoir le coup.
Et merci bubba, ça m'a l'air bien propre ce que tu me montre là, mais j'avais déjà recherché mais trouvé le SDK uniquement pour DirectX 10 et non 9.
Je vais continuer mes recherches dans cette voie.