Jump to content
  • Advertisement
Sign in to follow this  
DaniCat

OpenGL yet another texture problem

This topic is 4078 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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;
//use
texY=(float)y/(float)MAP_SIZE;
glTexCoord2f(textX, textY);
glVertex3i(x, y, -z);

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
Is the height of your terrain aligned to the y-axis?
If so you should try

texY=(float)z/(float)MAP_SIZE;

Share this post


Link to post
Share on other sites
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...

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!