PDA

View Full Version : Cubemap texture not shown



jiaoyang_28
05-02-2012, 11:44 AM
Hi,

This problem is bugging for days. I just can not find why my cubemap is not shown on the object.

I draw a sphere, and I want to wrap it with the cube map.

The following is my code in opengl:


//replace the car to a ball
quadratic=gluNewQuadric();
gluQuadricOrientation(quadratic, GLU_OUTSIDE);
gluQuadricNormals(quadratic, GLU_SMOOTH);
gluQuadricTexture(quadratic, GL_TRUE);

static unsigned *imagec[6];
static int widthc[6], heightc[6], componentsc[6];
GLenum cuben[6] = { GL_TEXTURE_CUBE_MAP_POSITIVE_X,
GL_TEXTURE_CUBE_MAP_NEGATIVE_X,
GL_TEXTURE_CUBE_MAP_POSITIVE_Y,
GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,
GL_TEXTURE_CUBE_MAP_POSITIVE_Z,
GL_TEXTURE_CUBE_MAP_NEGATIVE_Z};
char* filename[6] = {"../image/road.rgb","../image/road.rgb","../image/street_sky.rgb","../image/street_ground.rgb","../image/street_front.rgb","../image/street_front.rgb"};

GLuint textureNum[1];
glGenTextures(1, textureNum);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_CUBE_MAP, textureNum[0]);

glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_REPEAT);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

//load the textures
for(i = 0; i < 6; i++)
{
imagec[i] = read_texture(filename[i], &widthc[i], &heightc[i], &componentsc[i]);
glTexImage2D(cuben[i], 0, GL_RGB, widthc[i], heightc[i], 0, GL_RGBA, GL_UNSIGNED_BYTE, imagec[i]);
}
glEnable(GL_TEXTURE_CUBE_MAP);
glUseProgram(g);

GLint texLoc;
texLoc = glGetUniformLocation(g, "cube_texture");
glUniform1i(texLoc, 1);

glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP);
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP);
glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP);
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
glEnable(GL_TEXTURE_GEN_R);

gluSphere(quadratic,0.25f,48,48);

gluQuadricTexture(quadratic,GLU_TRUE);
gluQuadricDrawStyle(quadratic,GLU_FILL);

glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
glDisable(GL_TEXTURE_GEN_R);


My vertex shader is:


varying vec3 R;

void main() {
vec3 N = normalize(gl_NormalMatrix * gl_Normal);
vec3 V = normalize(gl_Vertex.xyz);
vec3 L = normalize(gl_LightSource[0].position.xyz); //I setup the light pos in opengl init(), and enabled light0
R = reflect(V, N);
}


My fragment shader is:


uniform samplerCube cube_texture;
varying vec3 R;

void main() {
vec4 cubeC = textureCube(cube_texture, R);
gl_FragColor = cubeC;
}


Maybe I read the code for too many times, I just can not find out why my result object is just a gray ball.

Any hint would be warmly welcomed.

Thank you very much

V-man
05-02-2012, 02:17 PM
You need to make sure that your object has normals since your texcoords depend on it.
Does lighting look ok in fixed function mode?

Did you call glGetError()?

BTW, a bunch of those calls have no effect if you are using shaders such as
glEnable(GL_TEXTURE_CUBE_MAP);
and the TexGen calls.