Hi,
I’m trying to do some shadow mapping but I’m having
a hard time making it works. I use this code:
glDisable(GL_DEPTH_TEST);
glDisable(GL_LIGHT0);
glDisable(GL_LIGHTING);
GLfloat ambient[] = {0.0,0.0,0.0,0.0};
GLfloat position[] = {0.5,1.3,0.5};
GLfloat diffuse[] = {0.2,0.2,0.2,0.0};
GLfloat specular[] = {0.0,0.0,0.0,0.0};
GLfloat shininess[] = {0};
GLfloat ambiantMat[] = {0.0,0.0,0.0,0.0};
GLfloat diffuseMat[] = {0.2,0.2,0.2,0.0};
GLfloat emissiveMat[] = {0.0,0.0,0.0,1.0};
GLfloat specularMat[] = {0.0,0.0,0.0,0.0};
GLfloat shininessMat[] = {0};
glLightfv(GL_LIGHT0, GL_POSITION, position);
glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, specular);
glLightfv(GL_LIGHT0, GL_SHININESS, shininess);
glMaterialfv(GL_FRONT, GL_AMBIENT, ambiantMat);
glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuseMat);
glMaterialfv(GL_FRONT, GL_EMISSION, emissiveMat);
glMaterialfv(GL_FRONT, GL_SPECULAR, specularMat);
glMaterialfv(GL_FRONT, GL_SHININESS, shininessMat);
glMaterialfv(GL_BACK, GL_AMBIENT, ambiantMat);
glMaterialfv(GL_BACK, GL_DIFFUSE, diffuseMat);
glMaterialfv(GL_BACK, GL_EMISSION, emissiveMat);
glMaterialfv(GL_BACK, GL_SPECULAR, specularMat);
glMaterialfv(GL_BACK, GL_SHININESS, shininessMat);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
GLint viewport[4];
GLfloat lightPos[3];
glGetLightfv(GL_LIGHT0,GL_POSITION,lightPos);
glGetIntegerv(GL_VIEWPORT,viewport);
glViewport(0,0,1024,1024);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
gluPerspective(90, 4/3, 0.1, 10);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
gluLookAt(lightPos[0],lightPos[1],lightPos[2], 0,0,0, 0,1,0);
//—Drawing
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
GLUquadricObj* cyl = gluNewQuadric();
glColor3f(1,1,0);
glTranslatef(0.4,0.4,0.4);
gluSphere(cyl, 0.2, 100, 100);
glPopMatrix();
glPushMatrix();
glLoadIdentity();
glTranslatef(-0.4,-0.4,-0.4);
glBegin(GL_POLYGON);
glNormal3f(0,1,0);
glColor3f(1,0,1);
glVertex3f(-1.0,0.0,1.0);
glNormal3f(0,1,0);
glColor3f(1,0,1);
glVertex3f(1.0,0.0,1.0);
glNormal3f(0,1,0);
glColor3f(1,0,1);
glVertex3f(1.0,0.0,-1.0);
glNormal3f(0,1,0);
glColor3f(1,0,1);
glVertex3f(-1.0,0.0,-1.0);
glEnd();
glPopMatrix();
glLoadIdentity();
//—End Drawing
glPopMatrix();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glEnable(GL_DEPTH_TEST);
glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 0, 0, 1024, 1024,0);
glViewport(viewport[0],viewport[1],viewport[2],viewport[3]);
GLfloat tempMat[16];
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glTranslatef(0.5,0.5,0.0);
glScalef(0.5,0.5,1.0);
gluPerspective(90, 4/3, 0.1, 10);
gluLookAt(0,2,2, 0,0,0, 0,1,0);
glGetFloatv(GL_MODELVIEW,tempMat);
glPopMatrix();
GLfloat *t = TransposeMat(tempMat);
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);
glTexGeni(GL_Q, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
glTexGenfv(GL_S, GL_OBJECT_PLANE, &t[0]);
glTexGenfv(GL_T, GL_OBJECT_PLANE, &t[4]);
glTexGenfv(GL_R, GL_OBJECT_PLANE, &t[8]);
glTexGenfv(GL_Q, GL_OBJECT_PLANE, &t[12]);
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
glEnable(GL_TEXTURE_GEN_R);
glEnable(GL_TEXTURE_GEN_Q);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);
glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_LUMINANCE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE);
glEnable(GL_TEXTURE_2D);
//—Drawing
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glDisable(GL_LIGHT0);
glDisable(GL_LIGHTING);
ambient[0] = 0.3;
ambient[1] = 0.3;
ambient[2] = 0.3;
diffuse[0] = 0.7;
diffuse[1] = 0.7;
diffuse[2] = 0.7;
specular[0] = 0.1;
specular[1] = 0.1;
specular[2] = 0.1;
emissiveMat[0] = 0.0;
emissiveMat[1] = 0.0;
emissiveMat[2] = 0.0;
specularMat[0] = 0.1;
specularMat[1] = 0.1;
specularMat[2] = 0.1;
shininess[0] = 0.7;
shininessMat[0] = 0.7;
ambiantMat[0] = 1;
ambiantMat[1] = 1;
ambiantMat[2] = 1;
diffuseMat[0] = 1;
diffuseMat[1] = 1;
diffuseMat[2] = 1;
glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, specular);
glLightfv(GL_LIGHT0, GL_SHININESS, shininess);
glMaterialfv(GL_FRONT, GL_AMBIENT, ambiantMat);
glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuseMat);
glMaterialfv(GL_FRONT, GL_EMISSION, emissiveMat);
glMaterialfv(GL_FRONT, GL_SPECULAR, specularMat);
glMaterialfv(GL_FRONT, GL_SHININESS, shininessMat);
glMaterialfv(GL_BACK, GL_AMBIENT, ambiantMat);
glMaterialfv(GL_BACK, GL_DIFFUSE, diffuseMat);
glMaterialfv(GL_BACK, GL_EMISSION, emissiveMat);
glMaterialfv(GL_BACK, GL_SPECULAR, specularMat);
glMaterialfv(GL_BACK, GL_SHININESS, shininessMat);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
glPushMatrix();
glLoadIdentity();
GLUquadricObj* cyl1 = gluNewQuadric();
glColor3f(1,1,0);
glTranslatef(0.4,0.4,0.4);
gluSphere(cyl1, 0.2, 100, 100);
glPopMatrix();
glPushMatrix();
glLoadIdentity();
glBegin(GL_POLYGON);
glNormal3f(0,1,0);
glColor3f(1,0,1);
glTexCoord2f(1.0, 0.0);
glVertex3f(-1.0,0.0,1.0);
glNormal3f(0,1,0);
glColor3f(1,0,1);
glTexCoord2f(1.0, 1.0);
glVertex3f(1.0,0.0,1.0);
glNormal3f(0,1,0);
glColor3f(1,0,1);
glTexCoord2f(0.0, 1.0);
glVertex3f(1.0,0.0,-1.0);
glNormal3f(0,1,0);
glColor3f(1,0,1);
glTexCoord2f(0.0, 0.0);
glVertex3f(-1.0,0.0,-1.0);
glEnd();
glPopMatrix();
glDisable(GL_TEXTURE_2D);
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
glDisable(GL_TEXTURE_GEN_R);
glDisable(GL_TEXTURE_GEN_Q);
I dont want to use fancy stuff. I red Nehe and Paul’s Projects
tutorial but I just want to know whats wrong with my code. I post this here but I’m not sure if it’s the right places.
Thanks