Je souhaite faire tourner à vitesse constante une scene 3D autour de l'axe des Y.L'affichage de la scene doit se faire dans une pictureBox.
Dans la fiche est placé un boutton sur lequel un click doit doubler la vitesse de rotation.
J'ai pris comme base de mon projet les 2 Tutoriels de FunkyData: » Programmation de DirectX en C# .
J'ai placé sur la fiche une PictureBox et remplacé dans la ligne
this par this.pictureBox1,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 device = new Device(0, DeviceType.Hardware, this,CreateFlags.HardwareVertexProcessing, presentParams);
le rendu de la scene s’effectue dans la pictureBox1.
J'ai ajouté un boutton . Cela fonctionne toujours.
J'ai ajouté des objets à la scene . Cela fonctionne toujours.
Je souhaite faire tourner ma scene sur elle-même. Alors j’ajoute les lignes suivantes avant l’affichage des éléments de la scene:
Cela pose un problème : la scene ne s’affiche que lorsque le pointeur de la souris passe sur le boutton(envoi d’un événement paint à ce moment).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 angle = vitesse*Environment.TickCount / 1000.0F; // vitesse=1 au départ device.Transform.World = Matrix.RotationY(angle);
j'ai modifié la boucle de rendu :
avec cette ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public Form1() { InitializeComponent(); InitializeGraphics(); CreateTriangle(); //Evènement pour la boucle de rendu this.Paint += new PaintEventHandler(this.Render); }Jai compléter le code précédent
Puis j'ai ajouté une fonction de gestion du click du boutton:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 for (int i=0; i < 10000; i++) this.Paint += new PaintEventHandler(this.Render);
La scene tourne et la vitesse de rotation double quand on click sur le boutton.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 private void button1_Click(object sender, EventArgs e) { vitesse = vitesse + vitesse; }
Mais cela fonctionne mal. En particulier il y a un gros retard (plusieurs secondes) entre le click et l’accélération.
Je cherche donc une nouvelle fonction Form1() . Toute proposition sera le bien venue.
J’espére ne pas avoir été trop long…
Merci d’avance.
Partager