En passant textures de shader
J'ai essayé de comprendre comment faire une texture pour un shader, mais je ne peux pas le comprendre. Mon code a l'air bien pour moi, mais mon deuxième texture est noir.
void setShaders() {
glEnable (GL_TEXTURE_2D);
v2 = glCreateShader(GL_VERTEX_SHADER);
f2 = glCreateShader(GL_FRAGMENT_SHADER);
load_shader(v2,"a.vert");
load_shader(f2,"a.frag");
glCompileShader(v2);
glCompileShader(f2);
p = glCreateProgram();
glAttachShader(p,v2);
glAttachShader(p,f2);
GLubyte* textura=LoadImageToTexture("d.jpg");
GLubyte* textura2=LoadImageToTexture("n.jpg");
GLuint texturaID[2];
glGenTextures(2, texturaID);
glBindTexture(GL_TEXTURE_2D, texturaID[0]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA, w, h, 0, GL_RGBA,GL_UNSIGNED_BYTE,(GLvoid*)textura );
glBindTexture(GL_TEXTURE_2D, texturaID[1]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D,1,GL_RGBA, w, h, 0, GL_RGBA,GL_UNSIGNED_BYTE,(GLvoid*)textura2 );
glLinkProgram(p);
glUseProgram(p);
GLint baseImageLoc = glGetUniformLocation(p, "tex");
GLint normImage = glGetUniformLocation(p, "norm");
glUniform1i(baseImageLoc, 0);
glUniform1i(normImage, 1);
glActiveTexture(GL_TEXTURE0 + 0);
glBindTexture(GL_TEXTURE_2D, texturaID[0]);
glActiveTexture(GL_TEXTURE0 + 1);
glBindTexture(GL_TEXTURE_2D, texturaID[1]);
}
Shaders
[sommet]
void main()
{
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_Position = ftransform();
}
uniform sampler2D tex;
uniform sampler2D norm;
[fragment]
void main()
{
vec4 color = texture2D(tex,gl_TexCoord[0].st);
vec4 color2 = texture2D(norm,gl_TexCoord[0].st);
gl_FragColor = color*color2;
}
MODIFIER ici, c'est le diable!!!
glTexImage2D(GL_TEXTURE_2D,**1**,GL_RGBA, w, h, 0, GL_RGBA,GL_UNSIGNED_BYTE,(GLvoid*)textura2 );
Au lieu de 1 il doit être 0.
Où sont vos GLSL
est-ce si important? J'ai ajouté #version 120 et toujours rien
#version
directives?est-ce si important? J'ai ajouté #version 120 et toujours rien
OriginalL'auteur user1075940 | 2012-05-01
Vous devez vous connecter pour publier un commentaire.
Votre deuxième texture semble être créés dans un mauvais sens :
devrait être
Quant à votre deuxième question, même si je ne suis pas sûr de l'obtenir droite ; lorsque vous commenter les lignes, vous fait quitter l'uniforme à sa valeur par défaut, qui est de 0. L'effet net est donc le même que
OriginalL'auteur rotoglup