lili2012 / triangle-mesh-editor

Stanford CS248 Assignment 2: Implement triangle mesh editor

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Stanford CS248 Assignment 2: MeshEdit

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.

Due Date

The assignment is due Feb. 6 at 11:59:59 PM.

Code Environment

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

Evaluation

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:

1. EdgeSplit and EdgeFlip

  • splitEdge()
  • flipEdge()

2. LinearSubdivision and 3. CatmullClarkSubdivision

  • subdivideQuad()
  • computeLinearSubdivisionPositions()
  • computeCatmullClarkPositions()
  • assignSubdivisionIndices()
  • buildSubdivisionVertexList()
  • buildSubdivisionFaceList()

4. LoopSubdivision

  • upsample()

5. Create one beautiful 3D model using Cardinal3D

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!

Extra Credit

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.

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.

Submission Instructions

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.

Acknowledgement

CS248 course staff would like to thank Professor Keenan Crane and his course assistants for the initial development of assignment materials.

About

Stanford CS248 Assignment 2: Implement triangle mesh editor


Languages

Language:C 54.0%Language:HTML 29.5%Language:C++ 13.9%Language:Objective-C 0.8%Language:JavaScript 0.7%Language:CMake 0.5%Language:CSS 0.5%Language:M 0.1%Language:Less 0.1%Language:Shell 0.0%Language:Batchfile 0.0%