Blending/Lighting Problems

My terrain eningine has multipass multitexturing… The multitexturing works if lighting is off, but doesnt work when lighting is on, it kinda disables blending by turning on lighting… This is not a bug as im pretty sure this is what usually happens, but does anybody know how to fix this?>

Put some code.

void renderTerrain(void){
register int mapx, mapz;
register int x, y;
float distance;

glPushMatrix();
gluLookAt(player.xpos, player.ypos, player.zpos, player.xlook, player.ylook, player.zlook, 0.0, 1.0, 0.0);

glBindTexture(GL_TEXTURE_2D, texture[0]);
for(mapx = 0; mapx < (TERRAIN_LENGTH-2); mapx++){
for(mapz = 0; mapz < (TERRAIN_WIDTH-2); mapz++){
// Make sure not to draw polygons that are too far away
distance = sqrt((player.xpos-(float)mapx/TERRAIN_DETAIL)(player.xpos-(float)mapx/TERRAIN_DETAIL) + (player.ypos-terrain_height[mapx][mapz])(player.ypos-terrain_height[mapx][mapz]) + (player.zpos-(float)mapz/TERRAIN_DETAIL)*(player.zpos-(float)mapz/TERRAIN_DETAIL));
if(distance < CULL_DISTANCE){
glBegin(GL_TRIANGLE_STRIP);
//glColor4f(1.0, 1.0, 1.0, (1.0-alpha_values[mapx][mapz]));
glNormal3f(terrain_normals[mapx][mapz].x, terrain_normals[mapx][mapz].y, terrain_normals[mapx][mapz].z);
glTexCoord2f(0.0, 0.0); glVertex3f((float)mapx/TERRAIN_DETAIL, terrain_height[mapx][mapz], (float)mapz/TERRAIN_DETAIL);

       //glColor4f(1.0, 1.0, 1.0, (1.0-alpha_values[mapx+1][mapz]));
       glNormal3f(terrain_normals[mapx+1][mapz].x, terrain_normals[mapx+1][mapz].y, terrain_normals[mapx+1][mapz].z);
       glTexCoord2f(0.0, TEXTURE_DETAIL); glVertex3f((float)(mapx+1)/TERRAIN_DETAIL, terrain_height[mapx+1][mapz], (float)mapz/TERRAIN_DETAIL);

       //glColor4f(1.0, 1.0, 1.0, (1.0-alpha_values[mapx][mapz+1]));
       glNormal3f(terrain_normals[mapx][mapz+1].x, terrain_normals[mapx][mapz+1].y, terrain_normals[mapx][mapz+1].z);
       glTexCoord2f(TEXTURE_DETAIL, 0.0); glVertex3f((float)mapx/TERRAIN_DETAIL, terrain_height[mapx][mapz+1], (float)(mapz+1)/TERRAIN_DETAIL);

       //glColor4f(1.0, 1.0, 1.0, (1.0-alpha_values[mapx+1][mapz+1]));
       glNormal3f(terrain_normals[mapx+1][mapz+1].x, terrain_normals[mapx+1][mapz+1].y, terrain_normals[mapx+1][mapz+1].z);
       glTexCoord2f(TEXTURE_DETAIL, TEXTURE_DETAIL); glVertex3f((float)(mapx+1)/TERRAIN_DETAIL, terrain_height[mapx+1][mapz+1], (float)(mapz+1)/TERRAIN_DETAIL);
     glEnd();
     }
  }

}
glPopMatrix();
}

void renderSnowTerrain(void){
register int mapx, mapz;
register int x, y;
float distance;

glPushMatrix();
gluLookAt(player.xpos, player.ypos, player.zpos, player.xlook, player.ylook, player.zlook, 0.0, 1.0, 0.0);

glBindTexture(GL_TEXTURE_2D, texture[8]);
for(mapx = 0; mapx < (TERRAIN_LENGTH-2); mapx++){
for(mapz = 0; mapz < (TERRAIN_WIDTH-2); mapz++){
distance = sqrt((player.xpos-(float)mapx/TERRAIN_DETAIL)(player.xpos-(float)mapx/TERRAIN_DETAIL) + (player.ypos-terrain_height[mapx][mapz])(player.ypos-terrain_height[mapx][mapz]) + (player.zpos-(float)mapz/TERRAIN_DETAIL)*(player.zpos-(float)mapz/TERRAIN_DETAIL));
if(distance < CULL_DISTANCE){

     glBegin(GL_TRIANGLE_STRIP);
       glColor4f(1.0, 1.0, 1.0, alpha_values[mapx][mapz]);
       glNormal3f(terrain_normals[mapx][mapz].x, terrain_normals[mapx][mapz].y, terrain_normals[mapx][mapz].z);
       glTexCoord2f(0.0, 0.0); glVertex3f((float)mapx/TERRAIN_DETAIL, terrain_height[mapx][mapz], (float)mapz/TERRAIN_DETAIL);

       glColor4f(1.0, 1.0, 1.0, alpha_values[mapx+1][mapz]);
       glNormal3f(terrain_normals[mapx+1][mapz].x, terrain_normals[mapx+1][mapz].y, terrain_normals[mapx+1][mapz].z);
       glTexCoord2f(0.0, TEXTURE_DETAIL); glVertex3f((float)(mapx+1)/TERRAIN_DETAIL, terrain_height[mapx+1][mapz], (float)mapz/TERRAIN_DETAIL);

       glColor4f(1.0, 1.0, 1.0, alpha_values[mapx][mapz+1]);
       glNormal3f(terrain_normals[mapx][mapz+1].x, terrain_normals[mapx][mapz+1].y, terrain_normals[mapx][mapz+1].z);
       glTexCoord2f(TEXTURE_DETAIL, 0.0); glVertex3f((float)mapx/TERRAIN_DETAIL, terrain_height[mapx][mapz+1], (float)(mapz+1)/TERRAIN_DETAIL);

       glColor4f(1.0, 1.0, 1.0, alpha_values[mapx+1][mapz+1]);
       glNormal3f(terrain_normals[mapx+1][mapz+1].x, terrain_normals[mapx+1][mapz+1].y, terrain_normals[mapx+1][mapz+1].z);
       glTexCoord2f(TEXTURE_DETAIL, TEXTURE_DETAIL); glVertex3f((float)(mapx+1)/TERRAIN_DETAIL, terrain_height[mapx+1][mapz+1], (float)(mapz+1)/TERRAIN_DETAIL);
     glEnd();
     }
  }

}
glPopMatrix();
}
This is the relecant part of my render func:

glDisable(GL_LIGHTING);
glDepthFunc(GL_LEQUAL);
glEnable(GL_DEPTH_TEST);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
renderTerrain();
glDisable(GL_LIGHTING);
glDisable(GL_DEPTH_TEST);
glDisable(GL_BLEND);

glDisable(GL_LIGHTING);
glDepthFunc(GL_LEQUAL);
glEnable(GL_DEPTH_TEST);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
renderSnowTerrain();
glDisable(GL_LIGHTING);
glDisable(GL_DEPTH_TEST);
glDisable(GL_BLEND);

then this in my init func:

float LightPosition0[] = { 0.0, 2.0, 0.0, LIGHT_ALPHA };
float LightSpecular0[] = { 1.0, 1.0, 1.0, LIGHT_ALPHA };
float LightDiffuse0[] = { 1.0, 1.0, 1.0, LIGHT_ALPHA };
float LightAmbient0[] = { 1.0, 1.0, 1.0, LIGHT_ALPHA };

glLightfv(GL_LIGHT0, GL_POSITION, LightPosition0);
glLightfv(GL_LIGHT0, GL_SPECULAR, LightSpecular0);
glLightfv(GL_LIGHT0, GL_DIFFUSE, LightDiffuse0);
glLightfv(GL_LIGHT0, GL_AMBIENT, LightAmbient0);
glEnable(GL_LIGHT0);

everything works if i dont turn the light on, if i do then it just draws one of the layers and the otehr is hidden

[This message has been edited by MrShoe (edited 12-07-2001).]