Archived

This topic is now archived and is closed to further replies.

Heightmap: What am I doing wrong?

This topic is 5144 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

I''ve been trying for 2-3 days now to get a heightmap based terrain renderer working. I''ve finally got it to draw the heightmap properly, after borrowing some code from DigiBen over at GameTutorials.com. However, I still have a couple of problems: 1 - When the image for the heightmaps get to big, I simply get one large flat plane as my result. 2 - The bottom-right corner of the rendered heightmap always has some erratic heights, eg. the bottom right corner, and the surrounding area are much higher than those arround them. My rendering code is included in this post, if it helps. Any help will be greatly appreciated.
	for (x = 0; x <= map_breadth; x++)
	{
		if (goback)
		{
			for (y = map_width; y >= 0; y -= 1)
			{
				glColor3f(0.0f,0.5f,0.6f);
				glVertex3d(x, (int)data[x+(y*map_width)]/10, y);
				glColor3f(0.7f,x*0.1f,0.6f);
				glVertex3d(x+1, (int)data[(x+1) + (y*map_width)]/10, y);
			}
		}
		else
		{
			for (y = 0; y <= map_width; y += 1)
			{
				glColor3f(0.0f,0.5f,0.6f);
				glVertex3d(x+1, (int)data[(x+1) + (y*map_width)]/10, y);
				glColor3f(0.7f,x*0.1f,0.6f);
				glVertex3d(x, (int)data[x+(y*map_width)]/10, y);
				
			}
		}
		goback = !goback;
	}

Share this post


Link to post
Share on other sites
Guest Anonymous Poster
is your data array (map_width+1)*(map_width+1) big? otherwise you might be getting values outside the boundaries of your array.

Share this post


Link to post
Share on other sites
For a 100 x 96 height map you need to access elements
in the range of [0,99] x [0,95]

You loop looks like it is it is overstepping the bounds by 1 in each dimension. Try changing to the comparison in your for loops to < and > (respectively).

change to:
for(x = 0; x < map_breadth - 1; x++)
for(y = map_width - 1; y >= 0; y -=1)
for(y = 0; y < map_breadth; y++)

Jeff

Share this post


Link to post
Share on other sites