Digital Geometry Processing
Graphics&Geometric Computing Laboratory
University of Science and Technology of China
Announcements General Description Course Goals Topics Texts Grading
Syllabus Assignments Requirements on Assignments Professional Conduct Resources
|Venue||Room 1218, Management and Research Building, East Campus|
|Prerequisite||Computer Graphics, CAGD, C/C++|
The arrival of 3D scanning has created a new wave of digital media after sound, images, and video, raising the need for digital processing algorithms. Traditionally fine detail geometry is represented through unstructured polygonal meshes. Such meshes are awkward for editing, filtering, and compression applications. This course will focus on Digital Geometry Processing (DGP), which addresses computerized modeling of discrete (digital) geometry, namely polygonal meshes. We will show how to build semi-regular meshes from unstructured polygonal meshes and raw range data, and how to build applications such as filtering, editing, simulation, and compression using triangular meshes.
Prerequisite: Computer graphics, Computer aided geometric design, C++, MFC, OpenGL/DirectX
In this course, we will explore advanced techniques for representing and processing geometric object models. The goals of this course are to extend and deepen the student's knowledge and understanding of algorithms and data structures and the associated design and analysis techniques. It examines previously studied algorithms and data structures more rigorously and introduces the student to "new" algorithms and data structures. It focuses the student's attention on the design of program structures that are correct, efficient in both time and space utilization, and defined in terms of appropriate abstractions.
This course provides a
comprehensive introduction to mesh processing, including their
design, analysis, and implementation. Topics include:
·mesh data structure
·3D scanner techniques
·deformation and morphing
·discrete differential geometry
Other researchers' courses
Various journal papers, conference papers, or WWW materials as appropriate.
Credit toward the semester grade will be allocated to each of the components as indicated in the following table.
|Literature survey and report||40%|
Note: No final examination will be held in the end of this course. Programming projects and literature survey report are both required. More information will be provided in the class.
Note: Please zip your submission stuffs of the assignment into one single file either using WinZip or WinRAR. Name the file name as "ID_Name_Assignment_#1.zip" or "ID_Name_Project _#1.zip" where ID is your unique ID number in the class. For Example, my submission file name might be "01_张三_Assignment_01.zip".
All students are expected to study the relevant portions of the course to see if some open problems can be solved after each class.
All programming for this course will be done in C++ according to the coding styles. We will compile and test programs on MS Visual C++ Version 6.0+ under Windows XP. It is the responsibility of the student to submit a program that will successfully compile and execute on the specified platform.
A document about your programming assignment is also required according to the Computer Program Documentation Standards.
The final literature survey should be written professionally by summarizing a series of related papers about some topic you like, not only several papers.
What constitutes Creativity ?
Creativity is any substantial improvement beyond the basic solution - it can be applied to any part of the project. For example, the following are relevant in most cases :
̶ It would be nice to present the user with options to either test the program using internal tests or an interactive interface
̶ Work around limitations in the program. For example, if the program asks for lines of input and quits when it sees "X", invent a special syntax (called an escape sequence) to allow the user to type in "X" without the program exiting. Hypothetically, if the user enters $X the program interprets it as X, if the user enters $$ the program interprets it as $ and if the user enters X the program exits.
̶ A representation of how data is actually being stored in the data structure, by specific position and value (this would even help greatly with debugging) - this could be accomplished with specialized data access routines for output formatting
̶ Simulating real-world conditions for input by making some assumptions about the distribution of operations performed and the rate of operations, then simulating using random number generators
̶ Intensively testing creation, usage and destruction of the data structure to prove there are no memory leaks
̶ Exhaustive automatic testing - go through many (or every) possible scenarios for the data structure (up to some time limit). For example, assign "add" and "remove" to a binary variable - then generate all possible strings of operations - test the structure for each case, and test the results automatically in your main program to make sure they are what was expected.
̶ Develop a syntax for file-based testing and use this as an option - eg. "enter X" and "retrieve"
̶ Minimize the number of allocations of memory blocks by reusing deleted blocks
Ask yourself these questions ...
̶ How can I make the interface more natural ?
̶ How can I make the program run faster ?
̶ How can I use less memory/disk space ?
̶ Have I thoroughly tested my program ? Will my program survive real-world tests ? Will my program survive worst-case scenario tests ?
student in our class, you are expected to conduct yourself in a professional
Limited Collaboration Policy. Unless otherwise indicated, any homework assignment given in this class will be an individual assignment. The work you submit is to reflect the knowledge, understanding, and skill that you have attained as an individual. However, the instructor does want to encourage the development of a community of scholars who are actively engaged in discussion of the ideas related to this course. With this in mind, you are allowed to discuss solutions of the homework and programming problems with other students if done so according to the following guidelines:
You may discuss ideas for homework and programming assignments with your classmates. However, you cannot collaborate on writing the solution or the program code. That is, you can talk about the problems and ideas for solving them, but you cannot write things down with anyone else. You are, of course, prohibited from copying or seeing another student's written solution, and you are not allowed to show your work to anyone else.
You should accept help with care. If you work too closely with another student, you might mislead yourself into believing that you understand the concepts and techniques better than you actually do. Don't forget that the instructor has office hours and can probably give you hints or suggestions to get you started.
You should give help with care. Do not help anyone too much. When you have solved a problem, it is tempting to just tell other students how you solved it. Instead, try to allow them to come to the solution on their own. Maybe give them a hint to help them get "over a hump." Remember that helping someone too much will hurt them in the long term if they can't work through problems on the exams by themselves. So avoid the temptation to do so. If you can't help other students without giving away the whole solution, direct them to see the instructor (who may or may not have a way to "edge" them toward the solution).
You are not obligated to help anyone. If you feel uncomfortable helping another student for any reason, please direct them to see the instructor.
C++ coding styles
Computer Program Documentation Standards
Advices on Researches:
Mesh library on the internet:
Useful coding related sites on the internet:
Send any comments or
suggestions to Prof. Ligang Liu (firstname.lastname@example.org)
Copyright © 2012, Ligang Liu