Bonsoir,
J'aimerais pour un FPS modéliser un tir par une sphère à laquelle on applique une translation qu'on incrémente avec une direction fixe.
Cette sphère pourrait alors être une sorte de boule de feu simple avec une texture appliquée à la sphère et une lumière plaçée au centre de la sphère sur laquelle des shaders seraient appliqués.
Voici l'idée concernant ma sphère représentant le tir qui se déplace :
Une fois la sphère représentant le tir implémentée, j'ai essayé de rajouter une lumière. Mais je ne sais pas vraiment comment faire pour appliquer les mêmes transformations que la sphère à ma lumière. J'ai essayé ceci :
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 // Debut du display avec pour le déplacement du joueur, une translation et une rotation de la scène : GLfloat sceneroty = 360.0f - yrot; // Un angle de 360 degres pour la direction du joueur glRotatef(sceneroty,0,1.0f,0); // La rotation dépend vers ou le joueur regarde glTranslatef(xtrans, ytrans, ztrans); // Deplace la scene en fonction de la position du joueur // Tir : if(tir || !collisionTir){ // Incrémentation en x et z selon la direction du tir : xtir = vo[0]-(float)sin(directionTir*piover180) * 0.05f; ztir = vo[1]-(float)cos(directionTir*piover180) * 0.05f; // Transformation tir : // Pour que le tir garde la même direction même si le tourne : rotTir = sceneroty; glRotatef(rotTir,0,1.0f,0); // Application d'une translation incrémentée à chaque display : glTranslatef(xtir, ytir, ztir); // Dessiner sphère : glColor3f(1.0f,0.0f,0.0f); GLUquadricObj *sph1 = gluNewQuadric(); gluSphere(sph1,0.05,30,30); }
Dans le display juste après la création de la sphère. Il semblerait que le glTranslate et glRotate appliquée à la sphère ne s'applique pas à la lumière :s Est-ce le cas ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 // Transformation lumière : light_position0[0] = xtir; light_position0[1] = ytir; light_position0[2] = ztir; glLightfv (GL_LIGHT0, GL_POSITION, light_position0); // Activer lumière : glEnable(GL_LIGHT0);
Enfin pour xtir, ytir, et ztir, si c'est le cas, ce n'est pas un problème étant donné que je peux affecter les valeurs à chaque display dans le vecteur light_position0 mais comment affecter la même rotation que ma sphère à ma lumière ? :s
Je vous remercie !
Partager