For a new project, I wanted to model pieces of paper with curled edges, so I
started looking at mesh2 objects, and how I could generate them
I decided to write a bunch of Java code that I should be able to extend for
generating meshes for other types of objects as well. I imagine all of it could
be done as SDL macros, but the debugging tools for Java are much better, and I'm
not so much a purist about the tools I use anymore.
The first mesh2 tool I wrote models sheets of paper as a grid of vertices in the
XZ plane. I give it a size and the number of vertices in each direction, and it
creates the vertex_vectors, the face_indices, and a set of uv_indices assuming
the texture to be applied will be the same size as the grid. It also assigns
each vertex a vertical normal.
I then wrote some code that can take an arbitrary line across the grid and a
"curling radius", and the direction of the curl. It then moves the points that
are "below" the curl (or above based on the curl direction), lines them up with
a point on the curling axis, and creates a rotation of that point around the
curling axis using the curling radius.
Finally, there is code that will go and assign new normals to the vertices by
averaging the computed normals of all of the faces in the mesh after the
vertices have been moved.
In the example below, the texture is provided from a png image of a piece of
sheet music that I translated and scaled to match the size of the paper. I use
an interior_texture with a gray pigment so the image doesn't bleed through.
I think it looks right, so I think I'm doing the right thing with uv vectors and
normals. The sample was created as a 100x100 unit sheet of paper, with 100x100
vertices, and to my eyes it looks pretty smooth.
The code isn't completely done yet. The example cheats in that the paper never
curls around into a spiral. I need to figure out how to do that effectively,
and then I could have some nice partially open scrolls for my scene. I'd also
like to work on some transformations that could "wrinkle" the paper in
interesting ways as well.
-- Chris R.
Post a reply to this message
Download 'meshtest.png' (612 KB)
Preview of image 'meshtest.png'