This course is focused on programming the essential geometric and mathematical concepts underlying modern computer graphics. Using both 2D and 3D implementations, it covers fundamental topics in graphical user interfaces, computational geometry, 3D modeling and graphics algorithms.

CIS 120

This course is designed as a first course in programming computer graphics algorithms, bridging introductory programming and mathematics with the more advanced graphics topics covered in CIS460. It is offered as a Spring term sophomore course and is required for DMD majors (entering Fall 2006 or later).

The course is intended as an intensive programming course meeting three times a week. Students will create a computational graphics and geometry software library over the course of the semester. Software design, debugging, unit testing, code re-use, and code sharing will be important characteristics of the programming assignments. There will be (nominally) one assignment due each week. The individual assignments will be small enough to ensure completion, but they are designed to grow into a library of reusable C++ code for other graphics projects or purposes. All code will be based on OpenGL and/or Visual Studio, with QT used as the GUI development environment. There will be a midterm and a final exam. The grading will be approximately 15% midterm, 20% final and about 7% per homework assignment.

__Interactive Computer Graphics__, by Edward Angel, 6th Edition, Addison-Wesley, 2012.

- Overview of C++ and software library engineering and code debugging.
- Basic differences between C++ and Java
- Setting up and compiling projects
- C++ Pointers
- Debugging tips
- Designing, implementing, and connecting C++ classes
- File input and output
- Vectors and matrices
- Introduction to 2D and 3D graphics
- 2D and 3D transformations
- Matrix data structure for polylines and polygons
- Basic OpenGL for 2D drawing
- Scene Graph construction and traversal
- QT
- An introduction
- Widgets and how they are incorporated into your code
- Event driven programming
- QT Designer
- Viewing transformations
- Line segment to line segment intersection
- 2D polygon manipulation:
- Bounding boxes (AABB, OABB)
- Point in polygon algorithm
- Other useful 2D geometry algorithms
- Introduction to 3D graphics programming
- 3D viewing transformations and cameras
- Normals, height fields, and meshes
- Lighting and material properties
- Sub-division surfaces
- Concepts
- Data structure
- Fractal surfaces
- Progressive mesh refinement and terrain models
- Bezier curves and surfaces
- Polygon mesh
- Data structure for vertices, faces, and edges; access efficiency
- Mesh editing
- Textures in OpenGL
- Shape deformation: global transformations and free-form deformations
- Image morphing
- Quaternions