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 :

[Débutant] Déplacer un Vertex


Sujet :

DirectX

  1. #1
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut [Débutant] Déplacer un Vertex
    Salut,

    Je débute avec DirectX, et j'ai suivi le tutoriel de funkydata, mais je ne comprends pas trop comment faire pour déplacer un Vertex... J'ai lu la phrase suivante dans le tuto :
    Dans ce tutoriel, nous ne déplacerons pas les sommets de notre triangle donc nous n'aurons besoin de verrouiller le VertexBuffer qu'une seule fois, en l'occurrence, lors de son remplissage avec nos vertices.
    Mais justement, moi je voudrais déplacer les vertices... dans ce cas, quand et comment (quel LockFlag) faut il verrouiller le buffer ?
    Pour mon test, j'ai ajouté un timer avec le handler suivant, qui déplace un vertex de 10 vers la droite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            private void timer_Tick(object sender, EventArgs e)
            {
                vertices[0].X += 10;
                vBuffer.SetData(vertices, 0, LockFlags.None);
            }
    Mais le vertex ne bouge pas... donc je pense que j'oublie quelque chose, mais je ne connais pas du tout DirectX alors je ne sais pas trop où chercher...

    Une idée ?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut ERRATUM
    Oups, petite correction... en fait, mon vertex se déplace, seulement l'affichage ne se rafraichit pas. Quand je cache et affiche de nouveau la fenêtre, je vois que l'image a changé. Y a-t-il quelque chose de particulier à faire pour que l'affichage soit rafraichi ?
    J'arrive à le faire en faisant this.Invalidate(), mais il y a surement une solution plus propre...

  3. #3
    Membre confirmé
    Avatar de funkydata
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 515
    Points : 504
    Points
    504
    Par défaut
    C'est plus un problème C# que DirectX dans ce cas. pour faire au plus simple, tu dois en fait gérer toi même la boucle de rendu sans déléguer cette tâche aux évènements.

    Le Form1.cs :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    // Notre device
    private Device device = null;
    // Notre VertexBuffer
    private VertexBuffer vBuffer;
    // Nos Vertices
    private CustomVertex.TransformedColored[] Vertices;
    // Indique si l'application est en court d'execution
    private bool Running = true;
     
    // Initialisation de la form
    public Form1()
    {
        InitializeComponent();
        // Appel de la procédure d'initialisation du device Direct3D
        InitializeGraphics();
        CreateTriangle();
    }
     
    // Procédure d'initialisation du device Direct3D
    private void InitializeGraphics()
    {
        // Définition des PresentParameters
        PresentParameters presentParams = new PresentParameters();
        presentParams.Windowed = true;
        presentParams.SwapEffect = SwapEffect.Discard;
     
        // Creation de notre device
        device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams);
    }
     
    // Procédure de création de notre triangle
    private void CreateTriangle()
    {
        // On défini les vertices de notre triangle
        Vertices = new CustomVertex.TransformedColored[3];
        Vertices[0] = new CustomVertex.TransformedColored(200.0f, 125.0f, 0.5f, 1f, Color.Beige.ToArgb());
        Vertices[1] = new CustomVertex.TransformedColored(275.0f, 275.0f, 0.5f, 1f, Color.Orange.ToArgb());
        Vertices[2] = new CustomVertex.TransformedColored(125.0f, 275.0f, 0.5f, 1f, Color.Red.ToArgb());
     
        // On crée le vertex buffer
        vBuffer = new VertexBuffer(typeof(CustomVertex.TransformedColored), Vertices.Length,
           device, 0, CustomVertex.TransformedColored.Format, Pool.Default);
     
        // On stocke les vertices dans le vertex buffer
        vBuffer.SetData(Vertices, 0, LockFlags.None);
    }
     
    // Boucle de rendu
    public void Render()
    {
        while (Running)
        {
            // Effacement de la scène
            device.Clear(ClearFlags.Target, 0, 1.0f, 0);
            // Début de la scène
            device.BeginScene();
            // On défini le vertex buffer à lire
            device.SetStreamSource(0, vBuffer, 0);
            // On défini le type des vertices stockées dans notre vertex buffer
            device.VertexFormat = CustomVertex.TransformedColored.Format;
            // On dessine le vertex buffer
            device.DrawPrimitives(PrimitiveType.TriangleList, 0, Vertices.Length / 3);
     
            // Fin de la scène
            device.EndScene();
            // Présentation de la scène à l'écran
            device.Present();
     
            Application.DoEvents();
        }
    }
     
    // Si la fenêtre est fermée on dit à la boucle de rendu de sortir
    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        Running = false;
    }
    Le Program.cs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    [STAThread]
    static void Main()
    {
        Form1 myForm = new Form1();
        myForm.Show();
        myForm.Render();
    }
    Voilà je te laisse le soin d'analyser tout ca bien que les différences soit minimes par rapport à la source du tutoriel.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Super, ça marche nickel !
    Merci

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

Discussions similaires

  1. [XL-2007] Débutant : déplacer et empêcher toute modification sur colonne
    Par Mihtsyou dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 13/09/2010, 23h58
  2. [Débutant] Déplacer des fichiers dans un répertoire
    Par nekcorp dans le forum Fortran
    Réponses: 5
    Dernier message: 10/10/2008, 18h59
  3. [débutant]Déplacer un équipement
    Par pingoui dans le forum Interfaces Graphiques en Java
    Réponses: 7
    Dernier message: 15/03/2008, 17h20
  4. [C#] [Débutant] Déplacer MessageBox.Show
    Par roque66 dans le forum C#
    Réponses: 4
    Dernier message: 01/03/2008, 18h43
  5. [débutant]déplacer une ligne dans CListCtrl
    Par mouss31 dans le forum MFC
    Réponses: 4
    Dernier message: 30/10/2006, 14h32

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