Class time/location: Peterson Hall 103, 12:00pm-12:50pm.
   Computer lab primarily in APM B325; secondarily B337/B349 and B349.
   Class schedule as google calendar: HTML link and ICAL link.

Instructor: Professor Sam Buss
   Office: APM 7456
   Email: sbuss@ucsd.edu
   Phone: 848-534-6455 (mainly for voice messages)
   Office hours: Default office hours (see the calendar above for changes),
      In APM 7456: Monday 4:00-5:00pm; Thursday 10:00-11:00am Friday 1:10-2:00.
      In APM B325: Wednesday 3:00-4:00pm; Thursday 1:00-2:30pm; Friday 2:00-3:00pm.

Teaching Assistants:

   Srivastava Shanmukha Kuchibhotla.
      Email: s1kuchib@ucsd.edu
      Computer lab hours in APM B325:.
         Please see the calendar HTML link above.
   Jingwen Wang.
      Email: jiw524@eng.ucsd.edu
      Computer lab hours in APM B325:.
         Please see the calendar HTML link above.

Homework Assignments (Answers sheets posted via piazza course web page.)
   Homework #1. Due Monday, January 30, 9:00pm.
      Turnin via GradeScope only. Also available: LaTeX source file.
   Homework #2. Due Monday, February 6, 9:00pm.
      Turnin via GradeScope only. Also available: LaTeX source file.
   Homework #3. Due Tuesday, February 21, 9:00pm.
      Turnin via GradeScope only. Also available: LaTeX source file.
   Homeworks #4 and #5 (combined). Homework #4 due Friday, February 24. Homework #5 due Monday, February 27.
   Homework #6 (RGB->HSL). Homework #6 due Thursday, March 16, 9:00pm.
   Homework #7 (Bezier curves, Catmull-Rom curves). Homework #7 due Monday, March 20, 9:00pm.

Programming Assignments
   Project 0: Getting Started. Due Friday, January 13, 9:00pm.
      Once you complete the work, hand it in by filling out the form at https://goo.gl/forms/uraLBC3OQ1zrRgz02.
   Project 1: Tetrahedra Project. Due Friday, January 20, 9:00pm.
   Project 2: Rolling Disk Project. Due Friday, January 27, 9:00pm.
   Project 3: Wire Frame Scene Project. Due Friday, February 3, 9:00pm. (Updated, see piazza post @70)
   Project 4: Lighted Frame Scene Project. Due Friday, February 17, 9:00pm. Here is a Quick Reference for OpenGL materials and lights.
      Updated (beta.0 release) of glrnRenderNormals routines for debugging normals.
   Project 5: Texture Mapped Scene Project. Due Monday, March 6, 9:00pm.
   Project 6: Individual Project. Due Wednesday, March 15, 9:00pm. Grading available starting on Monday, March 13.

Programming assignments are individual projects. It is OK to get help from other students or other sources, but the actual work must be your own. In particular, you should NOT: hand in someone else's code as your own, or directly copy code from others. It is OK however to see someone else's code, and then take a short break (say, five minutes) and then write your own version of the code. If you are not sure what is permitted, please talk with a TA or Professor Buss.

Floating Point Perils PDF handout for Project #3.

Midterm and final exam schedule:
   Midterm #1: Wednesday, February 8. Practice problems for Midterm #1.
   Midterm #2: Wednesday, March 1. Practice problems for Midterm #2.
   Final: Wednesday 11:30-2:30, March 22. Final is cumulative, covering the entire course. You may not use notes or other sources for the final, but you will be provided with a copy of the algorithm for converting RGB to HSL. Practice problems for new topics on the final.

In class quizes    Dates and topics to be announced in class and on piazza.

Computer Labs The APM basement computer labs APM B325, B337/B349 and B432 are available to the class for programming work. The computer lab doors are unlocked during week days at least: for other times, there is a door code available online using Account Lookup under Tools at http://acms.ucsd.edu.
Grading of programming projects will be one-on-one with a TA or Professor Buss. If you work at home or on other computers, you must transfer your programming projects to the APM computer lab systems: your program must be able to compile and run on the APM systems.

Textbook: 3D-Computer Graphics: A Mathematical Introduction with OpenGL, by S. Buss (your instructor). It is also on reserve at the library.

Piazza. Please watch piazza for important course announcements. You are encouraged to post questions (and answer questions as well). If you add the class once the quarter has already started, please email Professor Buss for an invitation to the piazza course page.

Grading: The course grade will be based 50% on programming assignments, and 50% on homeworks, short quizes, midterms and the final. The final is worth 20%, and the midterms are graded 10% each. However, one midterm score may be dropped, in which case the final exam will be 30% of the course grade. The homework assignments and quizes will be together 10% of the grade (percentages to be determined). There will be only a few quizes, and the lowest quiz score will be dropped. Quizes and their topics will be preannounced, and held in the final 10 minutes of the lecture.

GLUT32.DLL You may have problems with running the demo programs on your own computer without the glut32.dll dynamic linked libraries. As a workaround, you may download the glut32.dll file, and install it on your computer in the same directory as the demo program. (Alternately, intall in your system directories in the same location glu32.dll.) To obtain the correct DLL file, download the old "beta" version of glut32.dll that seems to no longer be available online. Or try downloading the freeglut libraries.

Course textbook: S. Buss, 3-D Computer Graphics: A Mathematical Introduction with OpenGL. Math 155A will cover chapters 1 through 7 of the textbook.

Other resources

The OpenGL Programming Guide, Version 1.1 (Red book) is available online at http://www.glprogramming.com/red/.

Documentation for GLUT/freeglut is available online in both HTML and PDF. See also the freeglut page discussed below.

The course textbook web page has a number of introductory sample OpenGL programs. I highly recommend them.

If you are programming at home, you may need install the OpenGL header files and .lib library files. Especially, you may need to install GLUT. The original GLUT programs are no longer being maintained (although they can be used). A replacement for GLUT is freeglut, available at http://freeglut.sourceforge.net/. There can find a link to Martin Payne's Windows binaries, to let you obtain the needed .h header files and .lib library files. (Be sure to use the correct version, either 32bit or 64 of the library files.) These can be placed either in your local development folder, or (if you have administrator privleddges) in the system folders that hold the system include files and library files.

Course prerequisites. Math 20C and 20F (Multivariable calculus and Linear Algebra) or Math 31AH. Programming assignments will be in C++. However, the course will not use any advanced features of C++, so experience with any similar language such as C or Java is sufficient preparation. Please discuss it with Professor Buss if you do not have programming experience with any of C, C++ or Java.

Course topics. This course is an introduction to 3D computer graphics, covering the mathematical foundations and OpenGL programming. Topics covered include: linear and affine transformations, homogeneous coordinates, perspective, Phong lighting and Cook-Torrance lighting, interpolation, the Bresenham algorithm, spherical interpolation, hyperbolic interpolation, texture mapping, and Bézier curves. The course grade will be based 50% on exams/homeworks/quizes and 50% on programming assignments.