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 :

probleme de texture (2d simple directX vb.net)


Sujet :

DirectX

  1. #1
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut probleme de texture (2d simple directX vb.net)
    bonjour

    je voudrais gérer les images 2d de mon appli avec directx
    le framework n'étant pas assez efficaces pour afficher plusieurs centaines d'images sur une image de fond

    je me suis donc penché sur directx et après moults trucs chiants je bloque encore, mais pas loin de la fin (enfin tout est relatif)

    j'ai réussi à créer un device
    j'arrive à instancier, une surface, une texture, un sprite
    par contre pour afficher tout ca, c'est pas vraiment le cas

    voici le code :
    objDX.Clear(ClearFlags.Target, Color.Aqua, 1.0F, 0)

    objDX.BeginScene()
    texture.FromBitmap(objDX, Image.FromFile("F:\CLE\images bmp\API4.bmp"), Usage.Dynamic, Pool.Default)

    sprite1.Begin(SpriteFlags.SortTexture)
    sprite1.Draw2D(texture, New PointF(-200.0F, 0.0F), 1, New PointF(100.0F, 50.0F), Color.Violet)
    sprite1.End()
    objDX.EndScene()
    objDX.Present(picturebox)

    là j'ai un fond de la couleur choisie et un carré rotationé à souhait mais tout noir
    l'image n'est pas dedans

    de plus je voudrais choisir le fond, et je pensais que l'objet surface servait à ca, mais j'ai pas réussi non plus à l'utiliser

    si qqn peut m'orienter dans la bonne direction, car les infos sur directx pour les nons connaisseurs en graphismes c'est pas simples, et les 3/4 des codes sont en C++

    merci
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    j'ai réussi à passer ce problème avec Direct3D.TextureLoader.FromFile
    là j'ai vu que directX ne gèrait pas les gif (ptete pour ca que ca faisait un carré noir)

    m'enfin j'ai fait des png à la place (format qui gère la transparence aussi)
    mais mon image n'apparait pas transparente sur le fond alors qu'elle l'est bien dans un picturebox

    nouvelle question :
    quelqu'un sait comment gérer la transparence ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Par défaut
    en c++, on prend l'alpha en compte comme sa:


    Device->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_NOTEQUAL);

    Device->SetRenderState(D3DRS_ALPHAREF, 0x00);
    Device->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
    Device->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_SRCALPHA);
    Device->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);


    Je suppose que tu connais l'équivalence du renderstate en vb.
    Je sais si c'est déja fait et que ton problème c'est que sa marche toujours pas

  4. #4
    Membre confirmé Avatar de Ingham
    Profil pro
    Inscrit en
    Août 2002
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 156
    Par défaut
    Plus simplement remplace ceci:

    sprite1.Begin(SpriteFlags.SortTexture)

    par ceci:

    sprite1.Begin(SpriteFlags.SortTexture | SpriteFlags.AlphaBlend)

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    j'ai réussi avec autre chose ... je ne sais pas trop quoi

    nouvelle question, comment changer la couleur d'une texture ^^
    enfin je vais ptete ouvrir un nouveau thread

    en attendant, je detaille ici:
    j'ai une image, que je place donc dans une texture
    cette image est un objet rouge (plusieurs nuances)
    je voudrais le transformer en vert (en gardant les nuances)
    plein de logiciels d'images font ca, en changeant la teinte surement
    pour l'instant j'oriente mes recherches sur les textureshaders (pas tres fructueux encore)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre confirmé Avatar de Ingham
    Profil pro
    Inscrit en
    Août 2002
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 156
    Par défaut
    Le plus simple c'est d'utiliser uen image en niveau de gris, et de faire ca quand tu la rends:

    Draw2D(... ... .. Color.Green);

    Ca multiplie ta texture par la couleur donnée, d'ou l'utilisation d'une image en niveau de gris

  7. #7
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    interressant mais étrange, ca ne change pas trop le noir, ca me va, ca change le blanc ca me va pas trop, ca change transforme du rouge en noir ...
    va falloir que je fasse quelques tests pour voir si ca peut me convenir

    et je croyait que ce parametre servait pour la transparence


    à quoi sert la couleur à la fin de la création d'une texture ?

    texture1 = Direct3D.TextureLoader.FromFile(objDX, "f:\tremie.png", 400, 600, 1, Usage.None, Format.A8R8G8B8, Pool.Managed, Filter.None, Filter.None, Color.White.ToArgb)


    enfin sinon moi je faisais sprite1.Draw2D(textu, New PointF(x / 2, y / 2), 0, New PointF(x, y), Color.White.ToArgb)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    interressant mais étrange, ca ne change pas trop le noir, ca me va, ca change le blanc ca me va pas trop, ca change transforme du rouge en noir ...
    va falloir que je fasse quelques tests pour voir si ca peut me convenir
    Ca module (multiplie) avec la couleur de la texture. Donc noir x couleur = noir, blanc x couleur = couleur, rouge x vert = noir, etc...
    Donc normalement si tu définis bien tes nuances en niveau de gris, moduler par une couleur devrait faire ce que tu veux.

    et je croyait que ce parametre servait pour la transparence
    On peut aussi fournir une couleur qui a une valeur alpha plus petite que 255

    à quoi sert la couleur à la fin de la création d'une texture ?
    C'est une couleur dont le canal alpha sera remplacé par 0 dans la texture (donc transparente si tu actives l'alpha-blending ou l'alpha-test).

    enfin sinon moi je faisais sprite1.Draw2D(textu, New PointF(x / 2, y / 2), 0, New PointF(x, y), Color.White.ToArgb)
    Tu modulais avec du blanc, l'effet était donc de garder la couleur originale de la texture.

  9. #9
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    une derniere question, comment redimensionner une texture ?

    sinon merci bien à tous, ca devrait me suffire (c'est pas moi qui decide ca...)
    en effet ca gère la transparence via l'argb (belle invention cet argb)
    donc on peut voir different niveaux

    enfin le seul truc c'est que j'aurais rarement du blanc à l'écran avec cette méthode ...



    autre question aussi
    Try
    objDX.TestCooperativeLevel()
    Catch DeviceLostException

    End Try
    ca me dit que devicelostexception n'est pas valable ici car c'est pas une variable ou un parametre
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  10. #10
    Membre confirmé Avatar de Ingham
    Profil pro
    Inscrit en
    Août 2002
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 156
    Par défaut
    Pour redimensionner une texture à l'affichage, utilise simplement un autre override de la méthode Draw2D

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sprite1.Draw2D(tatexture, new Rectangle(0, 0, TextureWidth, TextureHeight), new SizeF(300, 300), new PointF(0, 0), Color.White);
    TextureWidth et TextureHeight sont les dimensions originales de ta texture (ce qu'il va "sélectionner" pour rendre quoi), le SizeF est la taille du sprite au rendu.

  11. #11
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    j'ai meme trouvé une méthode pour changer les couleurs d'une image sans traiter par pixel :

    avec ColorMatrix du framework
    pas évident à comprendre ce machin (et le produit matriciel est loin dans ma mémoire) mais en cherchant un peu je devrais reussir à comprendre ^^
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. DirectX VB.NET - Simple initialisation - Exception
    Par LudoParis dans le forum VB.NET
    Réponses: 0
    Dernier message: 02/04/2011, 17h54
  2. Probleme de texture
    Par Dmnbp7ip dans le forum DirectX
    Réponses: 1
    Dernier message: 13/05/2005, 12h51
  3. probleme de texture sur une sphère
    Par sebpp dans le forum OpenGL
    Réponses: 2
    Dernier message: 12/04/2005, 19h46
  4. Réponses: 3
    Dernier message: 08/04/2004, 13h40
  5. [debutant] Probleme pour dessiner un simple cube
    Par scorpiwolf dans le forum DirectX
    Réponses: 6
    Dernier message: 02/07/2003, 20h29

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