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 :
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);
 
}
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
		// 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);
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 ?

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 !