[DX9][C#]Rotation de la scene non fluide
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:
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:
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:
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 |
avec cette ligne
Code:
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:
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.