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