2D height map to 3D model?

Mike C. Fletcher mcfletch at rogers.com
Mon Oct 11 10:37:24 EDT 2004


Didn't see the original question, but going from the subject, you want 
to generate a 3D mesh from a height field (such as seen in an image).  
The algorithm for doing that is fairly straightforward:

rectangles = []
for m in range(dim1-1):
    for n in range(dim2-1):
       vertices = []
       vertices.append( (m,n,heights[m,n]))
       vertices.append( (m+1,n,heights[m+1,n]))
       vertices.append( (m+1,n+1,heights[m+1,n+1]))
       vertices.append( (m,n+1,heights[m,n+1]))
       rectangles.append( vertices )

However, that dramatically increases the size of your geometry in memory 
(you're storing 12 doubles for almost every data-point).  It's easier to 
use a format where you define vertices and a separate topology (via 
indices into the vertices).  Same basic approach works there, you just 
have to add m+(n*dim1) to get the index for a corner of the quad.  There 
you're storing only 3 doubles for each vertex.

If you have a format that allows for triangle/quadrilateral strips, you 
can make the rendering far more efficient using them. There you render 
(m,n), (m+1,n), (m+1,n+1), (m,n+1), (m+1,n+2), (m,n+2), (m+1,n+3),...  
That reduces the size of your index-set as well, but most of the speedup 
is going to come from having fewer primitive operations.

Good luck,
Mike

PhilC wrote:

>Thanks Richard,
>
>I was actually thinking of faces but an aerial photograph would be
>similar. I'll check through those links and see if they help.
>
>Again my appreciation for your reply.
>
>PhilC
>
>  
>

-- 
________________________________________________
  Mike C. Fletcher
  Designer, VR Plumber, Coder
  http://www.vrplumber.com
  http://blog.vrplumber.com




More information about the Python-list mailing list