Course prerequisites. Math 155B or CSE 167 or equivalent, with exposure to OpenGL. Please discuss it with Professor Buss if you have not taken Math 155A during Winter 2017.

Class time/location: APM B412, 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: Usual office hours (see the calendar above for changes),
      In APM 7456: Monday 4:00-5:00pm; Tuesday 2:00-3:00pm; Thursday 10:00-11:00am.
      In APM B325: Monday 5:00-5:30++; Tuesday 3:00-4:00; Wednesday 3:00-4:00; Friday 3:00-5:00.

Teaching Assistant:

   Srivastava Shanmukha Kuchibhotla
      Email: s1kuchib@ucsd.edu
      Usual computer lab hours in APM B325:.
         Thursday 4:00-6:00; Friday 1:00-3:00.
         Please see the calendar above for changes.

Homework Assignments (Answers sheets posted via piazza course web page.)
   Homework #1. Bezier curves. Due Friday, April 21.
      Turnin via GradeScope only. Also available: LaTeX source file.
       Answer key
   Homework #2. B-spline curves. Due Friday, May 5.
      Turnin via GradeScope only. Also available: LaTeX source file.
       Answer key
   Homework #3. Yaw, pitch, roll. Due Monday, May 15.
      Turnin via GradeScope only. Also available: LaTeX source file.
       Answer key
   Homework #4. Quaternions. Due Friday, June 2.

Programming Assignments
   Project 1: Catmull-Rom and Overhauser interpolating curves. Due Friday, April 14, 9:00pm.
   Project 2: Rational Bezier Patches. Due Friday, April 28, 9:00pm.
   Project 3: Distributed Ray Tracing. Due Friday, May 12, 9:00pm.
                          Direct link to RayTrace software
   Project 4: Quaternion teapot. Due Friday, May 26, 9:00pm.
   Project 5: Individual project. Due Thursday, June 8, 9:00pm.

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 the TA or Professor Buss.

Midterm and final exam schedule:
   Midterm: Wednesday, May 15. Some study problems.
   Final: Wednesday 11:30-2:30, June 14. Final is cumulative, covering the entire course. Some study problems. These are not comprehensive. Topics will cover up through Jacobian matrices, but not inverse kinematics.

In class quizes    Dates and topics and answers 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 approximately 50% on programming assignments, and 50% on homeworks, short quizes, midterms and the final. The final is worth approximately 30%, and the midterms approximately 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 approximately 10% of the grade There will be short 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 155B will cover chapters 7 through 12 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. They are highly recommend.

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.