yet another texture problem

Started by
4 comments, last by DaniCat 16 years, 11 months ago
Hello everybody, I have a problem mapping a texture on a heightmap. I've checked previous threads refering to texture problems but i've found nothing that helped solving my problem, so here i go: As i said, i have a heightmap loaded from a .raw file, and drawn as a set of quads in opengl. I want to map a single texture on the whole terrain, and not just repeating it on every quad, so, i apply a factor before doing the glTexCoord2f. Here goes a bit of the code:

//Loading the texture
GLuint g_texture;
glEnable(GL_TEXTURE_2D);
glGenTextures(1, &g_texture);
glBindTexture(GL_TEXTURE_2D, g_texture);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, width, height, GL_RGB,GL_UNSIGNED_BYTE, data);

//and before drawing each of the four gl_quad vertexs:
textX=(float)x/(float)MAP_SIZE;
textY=(float)Height(X,Y)/(float)MAP_SIZE;
glTexCoord2f(textX, textY);
glVertex3i(x, y, -z);

The problem is, as you can see on the screenshots below, the texture stretches in the central part of the heightmap and i can't figure why. I also link a pic of the heightmap without texture and the .png texture itself. Any help would we appreciated Thanks
Advertisement
The calculation of the X of the texture coordinate looks fine, but why do you base the Y on the height of the map at a certain point? The center part looks flat, and if Height() returns the same value for all flat parts, then you get the same Y-coordinate everywhere.
Well this is exactly the result that you've coded.
You are mapping the Texture from the side to the terrain. You have to map it from top

//and before drawing each of the four gl_quad vertexs:textX=(float)x/(float)MAP_SIZE;//instead of//textY=(float)Height(X,Y)/(float)MAP_SIZE;//usetexY=(float)y/(float)MAP_SIZE;glTexCoord2f(textX, textY);glVertex3i(x, y, -z);
http://3d.benjamin-thaut.de
Thank you for your answers.

The Height(X,Y) function is used to build the Y coordinates of the heightmap (it gives back how "flat" a quad is).

Anyway, i had already tried without that function, just with
textY=(float)y/(float)MAP_SIZE
, but unfortunately, the result is exactly the same
Is the height of your terrain aligned to the y-axis?
If so you should try

texY=(float)z/(float)MAP_SIZE;
http://3d.benjamin-thaut.de
Thank you very much Ingrater ! That was it !

Now that i see the answer, i can't believe i've spent so much time in such a simple thing...

This topic is closed to new replies.

Advertisement