Mesh Morphs

This is the project page for my project involving mesh morphs.


A mesh morph is a transformation between a given mesh and a variant mesh with the same number of vertices. The programmer specifies a seed mesh and may express multiple morphs in terms of its variants. It looks like this:

seedMesh = soy.models.Mesh(randomBodyObject)
variantMesh = soy.models.Mesh(randomBodyObject)
morph = soy.models.Morph(seedMesh,variantMesh)
while True:

This creates a morph object and binds it via pointer to the seed mesh. Whenever render() is called on the original mesh, the morph object's vertex interpolation data will be applied.

It is possible to apply multiple morphs to the same seed mesh. If the seed mesh contains two or more morphs which act on the same subset of vertices, render() will apply these transformations recursively.

morph = soy.models.Morph(seedMesh,variantMesh)
anotherMorph = soy.models.Morph(seedMesh,anotherVariantMesh)
while True:

Adding or removing vertices

Our mesh implementation currently does not support adding and removing vertices per se. Instead, one sets an entirely new array of vertices. My instinct is that trying to support a user adding or removing vertices with an active mesh morph will open up a whole lot of difficult edge cases and should not be undertaken without first having a working base case.


Animation should be performed using keyframes. For each keyframe, one specifies the weight of the morph transformation (between 0 and 1.0). If the transformation is 0, the seed mesh is rendered without interpolation; if the transformation is 1.0, the variant mesh is rendered. Between these values, vertex interpolations must be computed between the seed mesh and the variant mesh. For each frame, we compute interpolation based on the distance between the current frame and the keyframe:

No idea how the keyframe syntax will work because if something similar has been implemented elsewhere, we want it to be consistent. I'm not yet familiar enough with libsoy to be sure.

About Me

Anthus Williams <anthuswilliams at gmail dot com> (anthuswilliams on irc)  Ohloh
I'm a first year math major at Dixie State College (USA, -600 UTC). I've learned a lot about web programming since lying about my resume in early 2009 in order to get a job doing ColdFusion and PHP. But I know next to nothing about either 3D graphics or game/systems programming. So naturally, that's what I want to work on :)