MeshShop extra point ideas
You will be completing a variety of plug-in modules for a mesh manipulation package called MeshShop. These extras will earn you some number of points, +1 if its simple, +10 if it's a truly amazing project. If you earn +5 additional points you're up to a 'B', +10 and you're doing 'A' work. No one should have any surprises about their lab grade since you'll know what you've been earning. I'll provide a list of possible bells and whistles you could add to this package along with how much each is worth, but you are free to make up your own as well. I encourage you to start with something simple and then to go do something creative and amazing.
In order to encourage people not to procrastinate and then panic in the last week of class, I'm only going to allow +2 points maximum to be earned each week. If you want to procrastinate and still get an 'A', you better turn something in every week starting in week 6. If you do an amazing +10 project right away we'll let you apply the points to future weeks (just not previous weeks).
[I'm going to modify this to +3 points maximum per week since you didn't get
MeshShop until now. - James]
Lastly, MeshShop is meant to be both a teaching tool, and an program used by researchers working in computer graphics. If you do something we judge to be sufficiently cool or useful we're planning on merging your plug-in into the core package. Right now its just a skeleton. Presuming things go as planned, the class will together be creating a useful tool which we'll post on the class web page for others to use.
You don't need to follow these ideas. Please invent your own extras. Also,
some of these might naturally be combined into a single plugin with options. So
instead of seperate wireframe, shaded, and point display functions, maybe it
should be all in the same plugin with options to change the mode. Doing
something really well or really poorly might bump up or down the number of
points, but this is some guideline. Also it might be harder than we thought,
you're free to try to convince us its worth more. =)
If you need a piece and dont want to write it, you could try posting to the
newsgroup and convincing one of your classmates. For instance suppose you want
to add a noise reduction feature than works on a selected region, but dont want
to write the "selection" plugin, you could try to convince someone
else.
MeshShop includes TriMesh2 to do the loading. You could reuse this for a
bunch of other functionality as well.
http://www.cs.princeton.edu/gfx/proj/trimesh2/
Simple Ideas +1
- CenterTheMesh - Your scanned meshes aren't centered. This makes rotation
work weird since rotation is around the origin. Write a plugin that finds
the center of all the (selected') meshes and recenters them around the
origin. (This would be a good practice project to get you introduced to
MeshShop since its not too hard)
- GetRidOfStrayPoints - Your scanned meshes have stray junk floating around
in space making the bounding box huge. Get rid of all this junk, leaving
only the mesh you meant to scan. Maybe just the largest connected component.
- SimpleMerge - You have a bunch of scanned meshes saved in seperate files.
Merge them into a single mesh, rather than seperate meshes, so that they
could be saved in one file.
- Wire frame rendering - The display routine you have is rendered with
polygons and lighting. Add an option for wireframe rendering.
- Point rendering - Render just the vertices as points, rather than all the
polygons.
- Mesh colors - Optionally render each mesh in a different color so that we
can tell which things are which mesh.
- Add an option for using either triangle normals or vertex normals.
- Assuming someone wrote a select region command, add cut, copy, paste
commands for meshes.
A little harder +2 to +3
- Save - +2 - right now meshshop loads but doesn't save meshes. The trimesh
library that I used to write the load plugin can also save. Add a useful
save feature.
- Choose mesh - +3 - There might be multiple meshes loaded. How can we
select a particular mesh or set of meshes to be the "current mesh"
- RotateAMesh - +2 - rotate just a single mesh relative to the others,
sticking the transform into the correct property.
- AlignMesh - +3 - Use the TriMesh functionality to align two meshes to each
other
- Select a region of a mesh +3 - you could draw a rectangular region on the
screen, or use OpenGL picking to select a region on the mesh
- MeshSmoothing - +2 Smooth out some noise in the mesh by blending
neighboring vertices together.
- Subsample - +2 Reduce the number of vertices in the mesh so that we have a
smaller mesh.
- DoubleDisplay +3 Use glViewPort commands to make two display windows. One
that works as normal, and one that shows the location of cameras and lights
as well so that you can visualize what's going on.
- Animation, +2 Just let me play a sequence of meshes in order somehow (I
can give you animated meshes).
- Animation +4 Do a good job of figuring out how an interface would work for
allowing me to play, single step, go forwards, backwards, etc to explore a
sequence of animated meshes.
- ScanHighQuality +3 - Your meshes are low quality because we set the
scanner that way. Go back and scan a complete high quality mesh. Aligning
the pieces in scanalyze.
- Use narrower focus lenses and recalibrate the scanner to produce higher
resolution +2.
Medium +5 or so
- Make a short stop action animation with clay or play-doh and the scanner.
- Add a line plot feature. The user selects a line across the mesh and you
show a plot of the depth along that line.
Advanced +10
Last time I taught I required everyone to do an advanced project. This proved
too hard for most people. However I wouldn't want to discourage you from trying
something hard. Browse the projects I suggested last time, as well as the
results the class came up with. Dig in. Read one of the papers and try to
implement an advanced feature. However leave yourself enough time that you can
back off and do a bunch of smaller pieces if you need to.
- Most things from the prior
class idea list, or any other research paper level of idea..
- Auto scanning - Use lego mindstorm or some other automation gizmo to add a
turntable to the scanner. Write a program to turn the turntable N degrees
and fix up the scripts so that we can scan all sides of an object with a
single command.