CS3744 - Intro to GUI Programming & Graphics
Spring 2010, CRN 17600
T-Th 9:30am, GBJ 100*

Class Materials URL: http://pixel.cs.vt.edu/courses/cs3744.html

Instructors

R.W. Ehrich, KW2 129, Office Hours: Tu, Th 11:00-12:15 in McB 122, or by appointment (1-5420)
D. Gracanin, KW2 135, Office Hours: Tu, Th 11:00-12:15 in McB 122, or by appointment (1-2060)
Patrick Fiaux, Office Hours: W 1:30-3:30 in McB 106, or by appointment
Shiyi Wei, Office Hours: F 2:30-4:30 in McB 106, or by appointment

Objectives

Computer graphics has become such a large and important field that it is difficult to do it justice in a single semester. Accordingly, computer graphics has been split into a two course sequence, 3744-4204. Depending on one's perspective, the implementation of graphical human-computer interfaces is an issue both in HCI and in graphics. Accordingly, GUI implementation has been merged in this course with fundamental topics in computer graphics that will no longer be covered in the former CS 4204 course.

CS 3744, Introduction to GUI Programming and Graphics, is now a prerequisite course for Computer Graphics (CS 4204) and beginning in Fall 2010, corequisite for Intro to HCI (CS 3724) in the undergraduate HCI track. Since the design of geometric models is fundamental to computer graphics, CS 2984/2114 is a prerequisite for CS 3744. The course also covers linear algebra and 2D geometry relevant to computer graphics and is intended to parallel and supplement the more theoretical development presented in the freshman mathematics courses.

The two principal components of the course are graphical user interface (GUI) development in Java Swing and two-dimensional computer graphics in OpenGL. The GUI part will cover basic event-driven programming techniques and user interface design patterns as well as design and implementation of new user interface components. GUI components and categories (basic controls, information displays, containers, layouts) will be discussed to explain user interface design and implementation steps. Program assignments will use the Java Swing toolkit and OpenGL to apply the concepts discussed in the class. A GUI toolkit will be constructed using the Java bindings for OpenGL (JOGL).

The computer graphics part will cover coordinate systems and affine transformations, line and polygon geometry, rendering, curves and splines, structured graphics, texture mapping, and color. Program assignments will use the JOGL bindings and will have interaction components implemented in OpenGL. A course project will bind together the GUI and Graphics components of the course.

*Schedule

NOTE: Since the course instructors will out of town during normal class times on March 30 and April 1, makeup classes will be scheduled during the evenings of March 15 and March 17 at times and locations to be announced.

Grading

The semester grade will be based upon assignments issued in class (25%), two midterms (15% each), a comprehensive final examination (20%), a midterm project (10%) and a final project (15%) based upon the semester's work. 10% will be deducted from assignments 1 day late, and 50% from assignments 2 days late. Later assignments will not be accepted unless by prior arrangement.

Homework

Homework assignments will be posted on the class web page and will be due by midnight on the assigned dates. NO LATE HOMEWORK MAY RECEIVE FULL CREDIT unless by prior approval. All work submitted for a grade must be the student's own work. If you have a question about the grading of an assignment or an exam, you should speak with your GTA within a week after the assignment is returned.

Exams

GUI Midterm, March 16, 2010
Graphics Midterm, April 20, 2010
Comprehensive Final, Saturday, May 8, 3:25pm - (NOTE: Last Class is Tuesday, May 4)

Exams may be taken only at the announced time unless by prior approval. All exams are closed-book exams. The final covers all the material in the course.

Ethics

The honor code at http://www.honorsystem.vt.edu will be strictly enforced. It is a violation to represent the work of others as your own or to let others use your work; always acknowledge any assistance you received in preparing work that bears your name. You are expected to work independently unless explicitly permitted to collaborate on a particular assignment. It is not a violation to discuss approaches to problems with others; however, it IS a violation to use wording, expressions, or code in your assignments that have been written by others without acknowledging the source.

Prerequisites

CS 2984/2114 (Software Design and Data Structures) and Math 1224 (Vector Geometry).

Text

Optional References

Course Outline

Introduction to GUI programming10%
Brief history of GUI
Coordinate systems (physical and logical)
WIMP paradigm
GUI framework, definition and characteristics
An overview of common GUI frameworks
GUI widget/component structure
Containment hierarchy, containers and components
GUI layout principles and layout management
Using Java Swing components in a typical GUI program
Designing GUI framework

Event-driven programming15%
Event frameworks
Events and event types
Event loop and event processing
Event listeners
Concurrency
Custom events
Event handling in Java
Common event-handling problems
Designing support for event handling

Creating user interfaces15%
GUI design patterns
Model-View-Controller pattern
Basic usability and accessibility issues
Interface-building tools
Swing GUI components and 2D graphics
OpenGL and GUI development
Designing GUI components and taxonomy
Customizing GUI components

Pixels, Lines, Polygons, and Planes15%
Right-handed and left-handed coordinate systems
Pixels and connectivity, pixel depth
Raster, frame buffer, single & double buffering
Showing a basic object in AWT and in OpenGL
Lines and line representations
Line intersections
Distance of point to line
Projection of point on line
Planes and plane representations
Plane - line intersections
Polygons: simple, convex, concave
Polygon edge orientations
Polygon interiors
Polygon area
Linear interpolation

Vector Geometry5%
Vectors vs lines
Perpendicular vectors
Vector sums and differences
Angle between vectors
Inner products
Cross products
Vector and affine spaces
Convex and affine sums
Coordinate frames

Transformations15%
Linear transformations
Homogeneous coordinates
Determinants
Matrix concatenation, inversion, transpose
Matrix equations vs simultaneous equations
Basis and change of basis
World, screen, and model coordinates
Transformation pipeline
2D viewing
Structured graphics, stacking

Curves and Tesselation10%
Triangulating a polygon
Bezier curves
B-splines

Scan Conversion and clipping10%
Bresenham algorithm
Antialiasing
Polygon scan conversion
Cohen-Sutherland clipping
Sutherland-Hodgman clipping

Color and texture5%
Color systems
Opacity and transparency
Specifying color
Texture mapping