Sign in to follow this  
Andy474

[XNA] HeightMap Problems

Recommended Posts

Hey quick question: I Am loading a height map into my game from a texture file. here is my Method
 private void LoadHeightMap(Texture2D HeightMap)
        {
            int width = HeightMap.Width;
            int height = HeightMap.Height;
            float[,] heightData = new float[height, width];

            Color[] heightMapColors = new Color[width * height];
            HeightMap.GetData(heightMapColors);
            for (int y = height - 1; y > 0; y--)
                for (int x = width - 1; x > 0; x--)
                    heightData[y, x] = 
                        MathHelper.Clamp(heightMapColors[x + y * width].R / f_MapDivScale,
                        0, i_MaxLandscapeHeight);

            hm_HeightMap =  new HeightMap(width, height, heightData);
        }

And I set the Vertices using the Following Method
 d_VertexList = new Dictionary<Vector2, TextureIndexVertex>();
            for (int x = 0; x < hm_HeightMap.Width; x++)
            {
                for (int y = 0; y < hm_HeightMap.Height; y++)
                {
                    TextureIndexVertex thisVertex = new TextureIndexVertex();
                    thisVertex.TextureCoordinate.X = (float)x / 30.0f;
                    thisVertex.TextureCoordinate.Y = (float)y / 30.0f;
                    thisVertex.Position = new Vector3(x, hm_HeightMap.HeightData[y, x], y);

                    d_VertexList.Add(new Vector2(x,y), thisVertex);
                }
            }

And I set the Indices using the Following Method
 l_IndiciesList = new List<int>();
            for (int y = 0; y < hm_HeightMap.Height - 1; y++)
            {
                for (int x = 0; x < hm_HeightMap.Width - 1; x++)
                {
                    int lowerLeft = x + y * hm_HeightMap.Width;
                    int lowerRight = (x + 1) + y * hm_HeightMap.Width;
                    int topLeft = x + (y + 1) * hm_HeightMap.Width;
                    int topRight = (x + 1) + (y + 1) * hm_HeightMap.Width;

                    l_IndiciesList.Add(topLeft);
                    l_IndiciesList.Add(lowerRight);
                    l_IndiciesList.Add(lowerLeft);

                    l_IndiciesList.Add(topLeft);
                    l_IndiciesList.Add(topRight);
                    l_IndiciesList.Add(lowerRight);
                }
            }

Now when I load a height map which is square (300x300, 500x500, 1000x1000) etc, I get a perfect result (or what seems to be at least). However, when I try to load a map which is a rectangle (444x567) or something I get the following result: The Strange outcome at most, I can only figure that there must be something going wrong with the indices so any advice is appreciated Regards ~Andy^

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this