J'ai trouvé ce code sur internet http://rioki.org/2013/03/07/glsl-skybox.html pour cubemap environnement texture (en fait rendre une skybox). Mais je ne comprends pas pourquoi ça marche.comprendre un code shader Opengl - cubemap?
void main()
{
mat4 r = gl_ModelViewMatrix;
r[3][0] = 0.0;
r[3][1] = 0.0;
r[3][2] = 0.0;
vec4 v = inverse(r) * inverse(gl_ProjectionMatrix) * gl_Vertex;
gl_TexCoord[0] = v;
gl_Position = gl_Vertex;
}
Alors gl_Vertex
est en coordonnées du monde, mais qu'est-ce que nous obtenons en multipliant l'inverse de la matrice de projection et modelview matrice?
c'est le code que j'utilise pour dessiner mon skybox
void SkyBoxDraw(void)
{
GLfloat SkyRad = 1.0f;
glUseProgramObjectARB(glsl_program_skybox);
glDepthMask(0);
glDisable(GL_DEPTH_TEST);
// Cull backs of polygons
glCullFace(GL_BACK);
glEnable(GL_CULL_FACE);
glEnable(GL_TEXTURE_CUBE_MAP);
glBegin(GL_QUADS);
//////////////////////////////////////////////
// Negative X
glTexCoord3f(-1.0f, -1.0f, 1.0f);
glVertex3f(-SkyRad, -SkyRad, SkyRad);
glTexCoord3f(-1.0f, -1.0f, -1.0f);
glVertex3f(-SkyRad, -SkyRad, -SkyRad);
glTexCoord3f(-1.0f, 1.0f, -1.0f);
glVertex3f(-SkyRad, SkyRad, -SkyRad);
glTexCoord3f(-1.0f, 1.0f, 1.0f);
glVertex3f(-SkyRad, SkyRad, SkyRad);
......
......
glEnd();
glDepthMask(1);
glDisable(GL_CULL_FACE);
glEnable(GL_DEPTH_TEST);
glDisable(GL_TEXTURE_CUBE_MAP);
glUseProgramObjectARB(0);
}
pouvez-vous partager le lien vers le tutoriel? Êtes-vous sûr que c'est correct? Voir http://www.ozone3d.net/tutorials/glsl_texturing_p04.php#part_43 tutoriel pour une référence – fen
Je l'ai trouvé d'ici: http://www.rioki.org/2013/03/07/glsl-skybox. html –