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#] Creer un rectangle avec des contours epais


Sujet :

DirectX

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 24
    Points : 18
    Points
    18
    Par défaut [C#] Creer un rectangle avec des contours epais
    bonjour, j'aimerai savoir comment creer un rectangle (non plein) avec une bordure epaisse.
    pour le moment j'arrive juste a creer le rectangle, mais avec une bordure d'un pixel
    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
    vertexBuffer = new VertexBuffer(typeof(CustomVertex.PositionColored), 6, device, 0, CustomVertex.PositionColored.Format, Pool.Managed);
     
    CustomVertex.PositionColored[] verts = new CustomVertex.PositionColored[6];
     
     
    GraphicsStream stm = vertexBuffer.Lock(0, 0, 0);
    verts[0].X = points[0].X; verts[0].Y = points[0].Y; verts[0].Z = 0.5f; verts[0].Color = rectangleBgColor.ToArgb();
    verts[1].X = points[1].X; verts[1].Y = points[1].Y; verts[1].Z = 0.5f; verts[1].Color = rectangleBgColor.ToArgb();
    verts[2].X = points[2].X; verts[2].Y = points[2].Y; verts[2].Z = 0.5f; verts[2].Color = rectangleBgColor.ToArgb();
    verts[3].X = points[3].X; verts[3].Y = points[3].Y; verts[3].Z = 0.5f; verts[3].Color = rectangleBgColor.ToArgb();
    verts[4].X = points[0].X; verts[4].Y = points[0].Y; verts[4].Z = 0.5f; verts[4].Color = rectangleBgColor.ToArgb();
    verts[5].X = points[1].X; verts[5].Y = points[1].Y; verts[5].Z = 0.5f; verts[5].Color = rectangleBgColor.ToArgb();
     
    stm.Write(verts);
     
    device.SetStreamSource(0, vertexBuffer, 0);
    device.VertexFormat = CustomVertex.PositionColored.Format;
     
    device.DrawPrimitives(PrimitiveType.LineStrip, 0, 4);
    vertexBuffer.Unlock();

  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
    La classe Line avec sa propriété Width devrait t'aider (si j'ai bien lu la doc de Dx managé).

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    en effet je pourrai passer par la classe line

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Line ligne = new Line(device);
    ligne.Width = 5;
    mais j'aimerai m'en passer, et creer mon rectangle avec un vertex buffer, parceque le rectangle est juste un exmple, je veux pouvoir faire des coutours d'autre polygones. Si je reste dependant de la classe Line :s

  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
    A part utiliser des triangles texturés (comme le fait Line) tu n'as pas le choix, étant donné que tu ne peux pas changer l'épaisseur de tracé pour les primitives de type lignes.

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    k
    sinon une autre solution est de creer d'autres rectangles de dimension "un pixel inferieur" à l'interieur de mon premier rectangle. Ca simule l'epaisseur du trait

  6. #6
    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
    Aussi. Mais c'est plus compliqué avec des formes plus complexes (faut calculer la bissectrice pour chaque sommet).

  7. #7
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    enfin la je me retrouve confronté a un autre probleme, je travaille avec des coordonnées normées( de 0 à 1 ), et j'aimerai declater d'un pixel ecran mon trait. il faut que je reussisse a convertir cette taille pixel de facon generique en taille normée

  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 : 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
    Et avec 1 pixel = 1 / resolution, tout simplement ?

  9. #9
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    c'est ce que j'ai fait, mais en faisant ca, 1/resolution est tellement petit qu'il l'approxime a 0

  10. #10
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    non en fait, en prenant 1/resolution, ca marche bien, j'avais simplement oublié de caster en float, et donc le resultat de ma division me renvoyait toujours 0

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

Discussions similaires

  1. Creer un pendule avec des maillons
    Par Premium dans le forum OpenGL
    Réponses: 1
    Dernier message: 26/10/2006, 17h49
  2. Réponses: 9
    Dernier message: 13/04/2005, 22h08
  3. Creer une DLL avec des icônes
    Par Larion dans le forum C++Builder
    Réponses: 5
    Dernier message: 13/03/2005, 17h28
  4. Creer une requete avec des LEFT JOIN et des GRO
    Par donbuz dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/09/2004, 15h53
  5. [MFC] creer une liste avec des check????
    Par ginounet dans le forum MFC
    Réponses: 4
    Dernier message: 16/06/2004, 11h47

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