CS3744 - Intro to GUI Programming & Graphics
Spring 2010, CRN 17600
T-Th 9:30am, GBJ 100*
|
|
|
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
- Vince, J., Mathematics for Computer Graphics, Springer, 2009.
Optional References
- Ammeraal, L. and Zhang, K., Computer Graphics for Java Programmers,
Wiley, 2007.
- Bruce, K., Danluk, A.P., and Murtagh, P., Java, an Eventful Approach,
Prentice Hall, 2005.
- Liang, Y.D., Introduction to Java Programming, Prentice Hall, 2009.
- Schreiner, D., Woo, M., and Neider, J., OpenGL Programming Guide, Addison Wesley,
2007.
Course Outline
Introduction to GUI programming | 10% |
- 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 programming | 15% |
- 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 interfaces | 15% |
- 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 Planes | 15% |
- 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
-
- 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
-
- 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 Tesselation | 10% |
- Triangulating a polygon
- Bezier curves
- B-splines
Scan Conversion and clipping | 10% |
- Bresenham algorithm
- Antialiasing
- Polygon scan conversion
- Cohen-Sutherland clipping
- Sutherland-Hodgman clipping
-
- Color systems
- Opacity and transparency
- Specifying color
- Texture mapping