00106501: Computer 
Graphics 
(Spring-Summer 
2018)
Graphics&Geometric Computing Laboratory
School of Mathematical Sciences
University of Science and Technology of China
Announcements    General
    Course Goals    
Texts    
Grading      
Syllabus 
    
Assignments     
Requirements on Assignments     
Professional Conduct    
Miscellaneous
Announcements
	- 
	June 14:
	课程项目展示
- 
	
	May 20: 课程期末考试时间2018年6月5日下午1:30-3:30,地点:科大东区5206教室
- 
	
	May 10: Adobe系列软件(Photoshop, 
	Premier, Illustrator, After Effect)的快速入门教程及软件安装包(下载)
- 
	
	May 08: 
	
	Final
	Project, deadline is Sunday, May 27, 2018
- 
	
	May 03:
	Homework 
	9作业批改说明及参考代码
- 
	
	Apr. 24: 
	
	Homework 9,  deadline is
	Tuesday, May 01, 2018
- 
	
	Apr. 24:
	Homework 
	8作业批改说明及参考代码
- 
	
	Apr. 17: 
	
	Homework 8,  deadline is
	Sunday, Apr. 22, 2018
- 
	
	Apr. 17:
	Homework 
	7作业批改说明及参考代码
- 
	
	Apr. 17:
	
	Rhio与GrassHopper课程资料
- 
	
	Apr. 12: 
	
	Homework 7,  deadline is
	Sunday, Apr. 15, 2018
- 
	
	Apr. 11:
	Homework 
	6作业批改说明及参考代码
- 
	
	Apr. 03: 
	
	Homework 6,  deadline is
	Sunday, Apr. 08, 2018
- 
	
	Apr. 03:
	Homework 
	5作业批改说明及参考代码
- 
	
	Mar. 27: 
	
	Homework 5,  deadline is
	Sunday, Apr. 01, 2018
- 
	
	Mar. 27:
	Homework 
	4作业批改说明及参考代码
- 
	
	Mar. 20: 
	
	Homework 4,  deadline is
	Sunday, Mar. 25, 2018
- 
	
	Mar. 20:
	Homework 
	3作业批改说明及参考代码
- 
	
	Mar. 13: 
	
	Homework 3,  deadline is
	Sunday, Mar. 18, 2018
- 
	
	Mar. 13:
	Homework 
	2作业批改说明及参考代码
- 
	
	Mar. 6: 
	
	Homework 2,  deadline is
	Sunday, Mar. 11, 2018
- 
	
	Mar. 6:
	Homework 
	1作业批改说明及参考代码
- 
	
	Feb. 27: 
	
	Homework 1,  deadline is
	Sunday, Mar. 04, 2018
- 
	
	Feb. 20: 
	学生课程ID号
- 
	
	Feb. 08:
	C++热身练习参考代码(务必先独立练习,再与参考代码进行对比学习)
- 
	Feb. 07: 
	 
	C++ 热身练习, deadline is 
	
	Sunday, Feb. 25, 2018
- 
	
	Feb. 07: 
	作业递交系统说明
- 
	Feb.  
	
	07: 课程主页开通
General
 
 
Course Goals 
The course of Computer Graphics is a 
study of the hardware and software principles of interactive raster graphics. 
Topics include an introduction to the basic concepts, 2-D and 3-D modeling and 
transformations, viewing transformations, projections, rendering techniques, 
graphical software packages and graphics systems. Students will use a standard 
computer graphics API to reinforce concepts and study fundamental computer 
graphics algorithms. 
The goals of this course are to provide a broad exposure to the computer 
graphics field in order to be prepared for follow-on study and to help students 
learn the state-of-the-art in the field of computer graphics.
Texts
 
参考教材(本课程不规定使用教材,本教材仅仅为参考):
            
E. Angel, Interactive Computer Graphics — A top-down approach using OpenGL™, 6th 
ed., 2011. (国内有影印版)
           
(中文翻译版:交互式计算机图形学—基于OpenGL的自顶向下方法(第五版),电子工业出版社,2012)
Readings:
            Various 
journal, conference, or WWW materials as appropriate.
Grading 
Credit toward the semester grade will 
be allocated to each of the components as indicated in the following table.
	
		| Assignments | 50% | 
	
		| Projects | 20% | 
	
		| Final Exam | 30% | 
Note: Final examination will be 
in-class, closed-book. More information will be provided prior to it. 
Syllabus
Note: Here you can view or 
download the notes that we use in class. DO NOT depend solely on these notes as 
many details are missing. You should read the textbook and take notes in class.  
      
课件下载链接
	
		- 
		Course 01: 课程介绍
- Course 02: 
		C++编程与QT编程介绍(可见Homework1中的文档)
- Course 03: 图像初步
- Course 04: 图像处理介绍
- Course 05: 图形显示系统及光栅化
- Course 06: 二维图形的绘制
- Course 07: 重心坐标
- Course 08: 网格曲面
- Course 09: 离散微分几何
- Course 10: 图形渲染管线
- Course 11: OpenGL介绍
- Course 12: OpenGL-纹理映射及参数化
- Course 13: 三维建模(Rhino建模,GrassHopper)
- Course 14: 形状编辑
- Course 15: 几何变换
- Course 16: 投影变换
- Course 17: 四元数与旋转
- Course 18: 裁剪与消隐
- Course 19: 光照模型
- Course 20: 光线跟踪
- Course 21: 纹理映射
- Course 22: GPU着色器编程(shader)
- Course 23: 三维建模软件
- Course 24: 三维扫描
- Course 25: 三维打印
- Course 26: 虚拟现实与增强现实
- Course 27: 开源硬件Arduino
- Course 28: Adobe Photoshop, Premier
- Course 29: Unity3D
Assignments
Homework
	- 
	C++ 热身练习, deadline is 
	
	Sunday, Feb. 25, 2018
- 
	
	Homework 1,  deadline is
	Sunday, Mar. 04, 2018
- 
	
	Homework 2,  deadline is
	Sunday, Mar. 11, 2018
- 
	
	Homework 3,  deadline is
	Sunday, Mar. 18, 2018
- 
	
	Homework 4,  deadline is
	Sunday, Mar. 25, 2018
- 
	
	Homework 5,  deadline is
	Sunday, Apr. 01, 2018
- 
	
	Homework 6,  deadline is
	Sunday, Apr. 08, 2018
- 
	
	Homework 7,  deadline is
	Sunday, Apr. 15, 2018
- 
	
	Homework 8,  deadline is
	Sunday, Apr. 22, 2018
- 
	
	Homework 9,  deadline is
	Tuesday, May 01, 2018
Projects
Note: 
作业递交系统说明
Requirements on Assignments
 
Requirements
	- All students are expected to study 
	the relevant portions of the textbook and handouts in conjunction with our 
	class discussions (i.e., before coming to class). Explicit reading 
	assignments will not always be given.
- All programming for this course 
	will be done in C++ according to 
	the standard coding styles. We will compile and test programs on MS Visual C++ 
	Version 6.0 or MS Visual Studio 2008+ under Windows XP (or Windows 7). It is the responsibility of the student to 
	submit a program that will successfully compile and execute on the specified 
	platform.
Assignment Submission
	- All students are expected to 
	complete their homework assignments by their due dates.
- 
	Submission stuffs
 Your ID number, your name, the 
	assignment number or name, source codes, related document
- Grading of programming assignments 
	will be based on the following criteria:
 1. Correctness of program.
 2. Output from program that adequately demonstrates correctness.
 3. Documentation, internal and external, included as standards.
 4. Efficient use of algorithms and appropriate data structures.
 5. Stress - program must function correctly under all and/or extreme and 
	unusual combinations of input.
 6. Creativity - credit for innovation in interface, implementation, style, 
	etc.
- Submission approach
 Please submit your assignment stuffs via my FTP not via email.
- Late Work
 No late work will be accepted. If you know you will miss a test due to an 
	excused absence, you must contact me ahead of time to schedule a make-up 
	session.
- Late programming assignments 
	follow the following rules: 
 25% deduction for 1-day late
 50% deduction for 2-day late
 Not accepted after being 2-day late
 Regarding your marks, contact the grading TA within two weeks after the 
	assignment is handed back. After this two-week period, your assignment stays 
	as it is graded.
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 : 
	- User Interaction 
 ̶  
	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.
- Visualization 
 ̶  
	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
- Testing 
 ̶  
	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"
- Efficiency 
 ̶  
	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 ?
Professional Conduct 
As a 
student in our class, you are expected to conduct yourself in a professional 
manner. 
Limited Collaboration Policy. 
Unless otherwise indicated, any homework assignment or programming exercise 
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. 
	
Miscellaneous
Online C++ and coding resources
		
	
		
		OpenGL
		
		
			- LearnOpenGL(最好的学习OpenGL的资料):
			
			https://learnopengl-cn.readthedocs.io/zh/latest/   or
			
			https://learnopengl-cn.github.io/    (英文)https://learnopengl.com/
			
- 
			www.opengl.org
- 
			OpenGL Step by Step
- 
			
			Google Web Directory for OpenGL
- OpenGL Super Bible (Second 
			Edition), by Richard S. Wright, Jr. and Michael Sweet, Wait Group 
			Press.
- OpenGL, A Primer , by 
			Edward Angel, Addison Wesley.
- OpenGL, Reference Manual 
			(Third Edition), by Dave Schreiner, Addison Wesley.
- OpenGL, Programming Guide 
			(Third Edition), by Dave Schreiner, etal., Addison Wesley.
- 
			
			OpenGL.org's book list
 
 
 
Send any comments or 
suggestions to Prof. Dr. Ligang Liu, 
lgliu@ustc.edu.cn 
Copyright © 2018, Ligang Liu