Hi all:
This is the first time I do cubemapping, and I’m having some weird problems, one of which is like this:
If I dont draw the environment, the sphere in my demo is quite weird, it does have reflective mapping component, but it looks like the result is modulated by other color: http://img.photobucket.com/albums/v438/991060/Snap2.png
But if I draw the surrounding, the result becomes correct:
http://img.photobucket.com/albums/v438/991060/Snap1.png
void drawSkyBox(void) // this function draws the surrounding
{
glActiveTextureARB(GL_TEXTURE3_ARB);
cubemap.bind();
cubemap.enable();
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
GLfloat s_plane[] = { 1.0, 0.0, 0.0, 0.0 };
GLfloat t_plane[] = { 0.0, 1.0, 0.0, 0.0 };
GLfloat r_plane[] = { 0.0, 0.0, 1.0, 0.0 };
glTexGenfv(GL_S, GL_OBJECT_PLANE, s_plane);
glTexGenfv(GL_T, GL_OBJECT_PLANE, t_plane);
glTexGenfv(GL_R, GL_OBJECT_PLANE, r_plane);
glPopMatrix();
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
glEnable(GL_TEXTURE_GEN_R);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glMatrixMode(GL_TEXTURE);
glPushMatrix();
glLoadIdentity();
camera.trackball.apply_inverse_transform();
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glScalef(10.0, 10.0, 10.0);
glutSolidCube(1.0);
glPopMatrix();
glMatrixMode(GL_TEXTURE);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
glDisable(GL_TEXTURE_GEN_R);
cubemap.disable();
}
void drawCubeMapping() // this function draws the reflective sphere
{
glEnable(GL_VERTEX_PROGRAM_ARB);
glEnable(GL_TEXTURE_SHADER_NV);
glActiveTextureARB(GL_TEXTURE0_ARB);
normalmap.bind();
normalmap.enable();
glActiveTextureARB(GL_TEXTURE3_ARB);
cubemap.bind();
cubemap.enable();
g_ARBVP_EnvMap.bind();
environment_mapping.call_list();
glProgramEnvParameter4fvARB(GL_VERTEX_PROGRAM_ARB, 0, eyePos.v);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
camera.apply_inverse_transform();
object.apply_transform();
sphere.call_list();
glDisable(GL_VERTEX_PROGRAM_ARB);
glDisable(GL_TEXTURE_SHADER_NV);
glActiveTextureARB(GL_TEXTURE0_ARB);
normalmap.disable();
glActiveTextureARB(GL_TEXTURE3_ARB);
cubemap.disable();
}