Original Post
Well, this is not strictly a question on splatting, but rather on how to blend a texture with an alpha map to get the smooth fadeout. The code below(some of it is taken from these forums) is an attempt to simply draw a single quad blended with an alpha map, but it doesn't work. It just draws the textured quad with altered but homogenous intensity. I'd really appreciate it of someone could point out what's wrong, or otherwise explain to me the correct way of doing it.
GLuint texture_id, alphamap_id;
GLubyte alphamap[] = {
0, 128,
128, 255,
};
GLfloat vertex[] = {
-1.0f, -1.0f, 1.0f,
1.0f, -1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
-1.0f, 1.0f, 1.0f,
};
GLfloat texcoord[] = {
0.0f, 1.0f,
1.0f, 1.0f,
1.0f, 0.0f,
0.0f, 0.0f,
};
GLubyte index[] = { 0, 1, 2, 3 };
void alphamap_create(GLuint *texture, GLubyte *data) {
glGenTextures(1, texture);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glBindTexture(GL_TEXTURE_2D, *texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA8, 2, 2, 0, GL_ALPHA, GL_UNSIGNED_BYTE, data);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE);
}
void draw_scene() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.0f, 0.0f, -4.0f);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, vertex);
glActiveTextureARB(GL_TEXTURE0_ARB);
glTexCoordPointer(2, GL_FLOAT, 0, texcoord);
glActiveTextureARB(GL_TEXTURE1_ARB);
glTexCoordPointer(2, GL_FLOAT, 0, texcoord);
glActiveTextureARB(GL_TEXTURE0_ARB);
glBindTexture(GL_TEXTURE_2D, texture_id);
glActiveTextureARB(GL_TEXTURE1_ARB);
glBindTexture(GL_TEXTURE_2D, alphamap_id);
glDrawElements(GL_QUADS, 4, GL_UNSIGNED_BYTE, index);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
SDL_GL_SwapBuffers();
}
glActiveTextureARB(GL_TEXTURE0_ARB);
texture_load(&texture_id, "GRASS_01.JPG");
glActiveTextureARB(GL_TEXTURE1_ARB);
alphamap_create(&alphamap_id, alphamap);
(http://www.stud.ntnu.no/~robine/test.png)