Hardware Multi-Texturing

Started by
-1 comments, last by stevjj03 22 years, 4 months ago
Recently i''ve been trying my hand at multi-texuring lightmaps. Over the past few days i''ve been having a recurring problem of dodgy black lines criss crossing around parts that are ment to be shaded here is the source that matters. I''d be very thankful for any help. float Height(BYTE *pHeightMap, int X, int Y) { int x = X; int y = Y; if(!pHeightMap) return 0; return fHeightMul*(float)pHeightMap[x + (y * MAP_SIZE)]; } void SetupLightmap(BYTE pHeightMap[]) { for(int y=0; y<MAP_SIZE; y++) { for(int x=0; x<MAP_SIZE; x++) { LightMap[x][y] = 1-(Height(pHeightMap, x-1,y-1) - Height(pHeightMap, x,y)); } } glGenTextures(1, &tLightMap[0]); glBindTexture(GL_TEXTURE_2D, tLightMap[0]); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); gluBuild2DMipmaps(GL_TEXTURE_2D, GL_LUMINANCE, MAP_SIZE, MAP_SIZE, GL_LUMINANCE, GL_FLOAT, (float *)LightMap); } void RenderHeightMap(BYTE pHeightMap[]) { int X, Y; float x0, x1, z0, z1; if(!pHeightMap) return; glColor4f(1.0f,1.0f,1.0f,1.0f); glActiveTextureARB(GL_TEXTURE0_ARB); glBindTexture(GL_TEXTURE_2D, tTerrain[0]); glEnable(GL_TEXTURE_2D); glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE, GL_DECAL); glActiveTextureARB(GL_TEXTURE1_ARB); glBindTexture(GL_TEXTURE_2D, tLightMap[0]); glEnable(GL_TEXTURE_2D); glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE, GL_MODULATE); glBegin(GL_QUADS); for(X=0; X<MAP_SIZE; X+=step) { for(Y=0; Y<MAP_SIZE; Y+=step) { x0 = X; z0 = Y; x1 = (X+step); z1 = (Y+step); glMultiTexCoord2fARB(GL_TEXTURE0_ARB, fTexMul*x0, fTexMul*z0); glMultiTexCoord2fARB(GL_TEXTURE1_ARB, x0/(MAP_SIZE/fTerrainMul), z0/(MAP_SIZE/fTerrainMul)); glVertex3f(x0*fTerrainMul, Height(pHeightMap, x0, z0), z0*fTerrainMul); glMultiTexCoord2fARB(GL_TEXTURE0_ARB, fTexMul*x0, fTexMul*z1); glMultiTexCoord2fARB(GL_TEXTURE1_ARB, x0/(MAP_SIZE/fTerrainMul), z1/(MAP_SIZE/fTerrainMul)); glVertex3f(x0*fTerrainMul, Height(pHeightMap, x0, z1), z1*fTerrainMul); glMultiTexCoord2fARB(GL_TEXTURE0_ARB, fTexMul*x1, fTexMul*z1); glMultiTexCoord2fARB(GL_TEXTURE1_ARB, x1/(MAP_SIZE/fTerrainMul), z1/(MAP_SIZE/fTerrainMul)); glVertex3f(x1*fTerrainMul, Height(pHeightMap, x1, z1), z1*fTerrainMul); glMultiTexCoord2fARB(GL_TEXTURE0_ARB, fTexMul*x1, fTexMul*z0); glMultiTexCoord2fARB(GL_TEXTURE1_ARB, x1/(MAP_SIZE/fTerrainMul), z0/(MAP_SIZE/fTerrainMul)); glVertex3f(x1*fTerrainMul, Height(pHeightMap, x1, z0), z0*fTerrainMul); } } glEnd(); glActiveTextureARB(GL_TEXTURE0_ARB); }

This topic is closed to new replies.

Advertisement