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



Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
device = new Device(0, DeviceType.Hardware, 
 
this,CreateFlags.HardwareVertexProcessing, presentParams);
this par this.pictureBox1,

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:



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);
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).

j'ai modifié la boucle de rendu :


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);
        }J’ai compléter le code précédent
avec cette ligne


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);
Puis j'ai ajouté une fonction de gestion du click du 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;
        }
La scene tourne et la vitesse de rotation double quand on click sur le boutton.


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.