Bonsoir, je suis entrain de coder un petit simulateur du système solaire qui doit afficher une étiquette à proximité de chaque planète. Pour l'affichage des planètes tout va bien mais pas pour celui des étiquettes : Le vertex shader reçoit en variable uniforme les coordonnées 3D de la planète concernée et calcule à partir de là la projection de la planète sur l'écran, du moins en théorie car rien ne s'affiche. Si en revanche je me contente de demander au vertex shader d'afficher l'étiquette sans lui ajouter les coordonnées de la projection là ça fonctionne. Voici mon code :
Rendu de l'étiquette :
Vertex shader :
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 void Map::renduEtiquette(Planete *planete) { glDisable(GL_DEPTH_TEST); glUseProgram(shaderEtiquettes); glUniformMatrix4fv(glGetUniformLocation(shaderEtiquettes,"projection"),1,false,glm::value_ptr(matriceProjection)); //Envoi des matrices au shader glUniformMatrix4fv(glGetUniformLocation(shaderEtiquettes,"modelview"),1,false,glm::value_ptr(matriceModelView)); glUniform3f(glGetUniformLocation(shaderEtiquettes,"posPlanete"),planete->position.x,planete->position.y,planete->position.z); //Position 3D de la planète glBindVertexArray(planete->etiquette.VAO); glBindTexture(GL_TEXTURE_2D,planete->etiquette.textures[0]); glDrawArrays(GL_TRIANGLES,0,planete->etiquette.coordVertices.size()/2); glBindVertexArray(0); glEnable(GL_DEPTH_TEST); }
J'ajoute ici les coordonnées de l'étiquette (Un simple rectangle texturé constitué de deux triangles) celles de la projection mais rien à l'écran, il y a également une autre question qui me préoccupe, si j'ajoute ce code dans la fonction :
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 #version 330 core layout (location=0) in vec2 vertex; layout (location=1) in vec2 coordTex; uniform mat4 projection; uniform mat4 modelview; uniform vec3 posPlanete; out vec2 coordTexFrag; void main(void) { vec4 posPlanete2=vec4(posPlanete,1.0); vec4 vertex2=vec4(vertex,0.0,1.0); gl_Position=vertex2+projection*modelview*posPlanete2; coordTexFrag=coordTex; }
Alors j'obtiens des valeurs totalement hors d'échelle ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 glm::vec4 aa=matriceProjection*matriceModelView*glm::vec4(planete->position.x,planete->position.y,planete->position.z,1.0); cout << aa.x << " " << aa.y << endl;
Le problème ne vient pas des matrices car je les utilise pour les planètes qui s'affichent correctement, ni des coordonnées des sommets de l'étiquette puisque celle-ci s'affiche lorsque je demande au vertex shader de ne pas tenir compte des coordonnées de la projection, ni des coordonnées de la planète car en les rentrant à la main dans le shader j'ai le même problème.
Bref au bout de plusieurs heures de recherche je sollicite votre aide, merci par avance
Partager