The repository is located at https://github.com/stanford-cs248/triangle-mesh-editor. We have created a wiki (https://github.com/stanford-cs248/triangle-mesh-editor/wiki) that will be the primary source of information about this assignment. On that page you will find all the details about what you need to implement, etc. This document only contains administrative details about building the starter code, grading, and submission.
The assignment is due Feb. 6 at 11:59:59 PM.
This codebase should compile on Linux, Mac OS X, and Windows on a typical environment. The build instructions given on the project page will walk you through installing dependencies and building the code. If you have difficulties running the code on your local machine, the rice cluster machines (rice.stanford.edu) have all the packages required to build the project.
When you have successfully built your code, you should get an executable named cardinal3d
. Upon starting the program, it should be in model mode. The User Guide details how to use the interface. For convenience, some keyboard shortcuts are reproduced below.
Key | Command |
---|---|
space |
switch to navigate mode |
tab |
show/hide info panel |
hold control |
temporarily switch to translation in edit mode |
hold shift |
temporarily switch to scaling in edit mode |
hold alt/option |
temporarily switch to rotation in edit mode |
e |
cycle through edit modes |
b |
toggle bevel mode |
n |
select next halfedge |
t |
select twin halfedge |
h |
select halfedge of current element |
T |
Triangulate mesh |
s |
subdivide Catmull-Clark |
S |
Subdivide linear |
bksp/del |
erase selected edge |
f |
flip selected edge |
c |
collapse selected edge |
p |
split selected edge triangle meshes only! |
u |
upsample triangle meshes only! |
i |
isotropic remesh triangle meshes only! |
d |
downsample triangle meshes only! |
w then 0--9 |
write scene to numbered buffer |
l then 0--9 |
load scene from numbered buffer |
For this assignment, you will implement methods in meshEdit.cpp
.
The User Guide on the wiki describes a large number of features that are potentially available in MeshEdit mode. You do not have to implement all of these features to receive full credit on the assignment! However, you do have to successfully implement a subset of the features. Implementing additional features beyond the required subset will earn you extra credit points.
The particular requirements and functions that you have to implement are:
- splitEdge()
- flipEdge()
- subdivideQuad()
- computeLinearSubdivisionPositions()
- computeCatmullClarkPositions()
- assignSubdivisionIndices()
- buildSubdivisionVertexList()
- buildSubdivisionFaceList()
- upsample()
Every team is required to submit a 3D model created from cube.dae using their implementation of Cardinal3D. Models will be critiqued and evaluated based on both technical sophistication and aesthetic beauty. Note: Use of any other 3D package (e.g., free or commercial 3D modelers like Maya or Blender) is strictly prohibited! This model must be created by opening cube.dae, applying the operations implemented as part of the assignment, and saving the result. You may have to implement at least one bevel operation (we found FaceBevel most useful) in extra credit to do this part!
Include this model in the root directory of your submission as model.dae
.
Note: the course staff will 3D print our three favorite models as a reward for making something cool!
Here is a list of local operations:
- VertexBevel
- EdgeBevel
- FaceBevel
- EraseVertex
- EraseEdge
- EdgeCollapse
- FaceCollapse
- EdgeFlip
- EdgeSplit
The global operations, and their dependency on local operations, are as follows:
- Triangulation
- LinearSubdivision
- CatmullClarkSubdivision
- LoopSubdivision - depends on EdgeSplit and EdgeFlip
- IsotropicRemeshing - depends on EdgeSplit, EdgeFlip, and EdgeCollapse
- Simplification - depends on EdgeCollapse
You will need to specify clearly what you implemented in your writeup.
Additionally, you will submit a short document with your SuNET ID's, explaining what you have implemented (possibly including extra credit), and any particular details of your submission. If your submission includes any implementations which are not entirely functional, please detail what works and what doesn't, along with where you got stuck. This document does not need to be long; correctly implemented features may simply be listed, and incomplete features should be described in a few sentences at most.
The writeup must be a pdf, markdown, or plaintext file. Include it in the root directory of your submission as writeup.pdf, writeup.md, or writeup.txt.
We are using Canvas as our submission tool. You should create and upload a zipped folder of your entire /src
subdirectory along with the writeup (e.g. writeup.txt) and 3D modeling submission (model.dae
). Do not include your build subdirectory. You may work in teams of up to two people. If working in a team, please have only one person make the submission.
CS248 course staff would like to thank Professor Keenan Crane and his course assistants for the initial development of assignment materials.