I'm trying to implement projective texturing using multitexturing but I'm experimenting some artefacts here's the code
StoreLightMatrices();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluLookAt(camera.vPosition.x, camera.vPosition.y, camera.vPosition.z,
camera.vView.x, camera.vView.y, camera.vView.z,
camera.vUpVector.x, camera.vUpVector.y, camera.vUpVector.z);
glActiveTextureARB(GL_TEXTURE0);
glEnable(GL_TEXTURE_2D);
glActiveTextureARB(GL_TEXTURE1);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, projTexID);
// Specify the projector's properties
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glTranslatef(0.5f, 0.5f, 1.0f);
glScalef(0.5f, 0.5f, 1.0f);
glMultMatrixf(projectorProjection);
glMultMatrixf(projectorModelView);
glMatrixMode(GL_MODELVIEW);
double Splane[] = {1.0f, 0.0f, 0.0f, 0.0f};
double Tplane[] = {0.0f, 1.0f, 0.0f, 0.0f};
double Rplane[] = {0.0f, 0.0f, 1.0f, 0.0f};
double Qplane[] = {0.0f, 0.0f, 0.0f, 1.0f};
glTexGendv(GL_S, GL_EYE_PLANE, Splane);
glTexGendv(GL_T, GL_EYE_PLANE, Tplane);
glTexGendv(GL_R, GL_EYE_PLANE, Rplane);
glTexGendv(GL_Q, GL_EYE_PLANE, Qplane);
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
glTexGeni(GL_Q, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
glEnable(GL_TEXTURE_GEN_R);
glEnable(GL_TEXTURE_GEN_Q);
glEnable(GL_TEXTURE_2D);
glActiveTextureARB(GL_TEXTURE0);
// Draw world here
the projectorProjection and projectorModelView are computed like this:
float projectorModelView[16], projectorProjection[16];
float g_LightPosition[3] = {0.0f, 5.0f, 6.0f};
float g_LightView[3] = {0.0f, 5.0f, 0.0f};
void StoreLightMatrices()
{
memset(projectorModelView, 0, sizeof(float)*16);
memset(projectorProjection, 0, sizeof(float)*16);
glPushMatrix();
glPushMatrix();
glLoadIdentity();
gluLookAt(g_LightPosition[0], g_LightPosition[1], g_LightPosition[2],
g_LightView[0], g_LightView[1], g_LightView[2], 0, 1, 0);
glGetFloatv(GL_MODELVIEW_MATRIX, projectorModelView);
glPopMatrix();
glLoadIdentity();
gluPerspective(150.0f, 1.0f, 1.0f, 2.0f);
glGetFloatv(GL_MODELVIEW_MATRIX, projectorProjection);
glPopMatrix();
}
So do you see something wrong at first glance, somethjing that might cause artefacts?
I'm not refering to artefacts as the reverse projection.