EDIT:
I'm thinking of software rendering...
Show differencesHistory of post edits
#1fastcall22
Posted 07 December 2012 - 04:47 PM
I had done something like this when I first started programming, and I learned the foundations of transformation matrices though it. So, I'll explain as how I learned it when I first attempted something like this.I would like to achieve is just the wireframe view of such a landscape
Since this is rendered in 3D, you will need to work in 3D space:
type Point3: float x, y, z
You'll also need some sort of structure to model the terrain; an array of Point3 can work:
type Heightmap(N): Point3[,] points = new Point3[N,N]
Since the points on the grid are regularly spaced on the X and Z axis, you can infer the X and Z coordinate of the point by its row and column index:
type Heightmap(N): float[,] points = new float[N,N] [/doe] Next, when rendering the heightmap, you'll need to transform each vertex on the terrain to give it a pseudo-3D look. As you can tell by the image, moving into the screen (+Z) shifts both the X-coordinate and Y-coordinate, and moving upwards shifts the Y-coordinate. The transform might look something like this: [code] function transform(x y z): x' = x y' = y + .5z return (x' y') [/code] If you want to get really fancy, you can specify a unit such that 1 unit on the terrain is some number of pixels on the screen, center (0,0) in your world to be the center of the screen, and set the Y axis to point upward: [code] function transform(x y z): x' = x*16 + w/2 y' = -(y + .5z)*16 + h/2 return (x' y')
Next, you'll need to draw the lines connecting each vertex to each neighbor (for vertices that have neighbors):
each row in 0..N-2 each col in 0..N-2 v = (transform col row terrain[row,col]) n1 = (transform col row terrain[row,col+1]) n2 = (transform col row terrain[row+1,col]) line v n1 line v n2