Course overview. This is the second course in a sequence giving an introduction to 3D computer graphics, covering the mathematical foundations and OpenGL programming. Topics covered include: B├ęzier curves, B-splines, radiosity, ray tracing, kinematics, animation, and GPU programming. Programming will be in C++ main programs and GLSL shader programs. The course grade will be based 50% on exams/homeworks/quizes and 50% on programming assignments. Prospective students who did not take Math 155 in Winter 2018 should discuss with the instructor whether they have the needed prerequisites.

Textbook: 3D-Computer Graphics: A Mathematical Introduction with OpenGL, by S. Buss (your instructor). A PDF copy is under revision and available for download from https://www.math.ucsd.edu/~sbuss/CourseWeb/Math155A_2019Winter/SecondEdDraft.pdf. SO YOU CAN GET BY WITHOUT PURCHASING THE TEXT BOOK.

Class time/location: Sequoyah Hall 147, MWF 1:00pm-1:50pm.
   Computer lab primarily in APM B325; secondarily B337/B349 and B432.
   Class schedule as a google calendar: HTML 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: To be announced.
      In APM B325: To be announced. (Computer lab)

Teaching Assistant:

   Nicholas Sieger.
      Email: nsieger@ucsd.edu
      Computer lab hours in APM B325:.
         Please see the calendar above.

Homework Assignments (Most answers will be available via gradescope answer key.)
   Homework #1. Bezier curves, Catmull-Rom, Overhauser.
      Turnin via GradeScope (gradescope.com).
   Homework #2. Bezier patch, B-splines, Shaders.
      Turnin via GradeScope (gradescope.com).
      Answers available to problems 1-4.
   Homework #3. Yaw, pitch, roll. Quaternions.
      Turnin via GradeScope.

Programming Assignments
   Project 0: Getting Restarted. Due Friday, April 5, 9:00pm.
      Once you complete the work, hand it in by filling out the form at https://forms.gle/swcAv6u73rVmehwf6.
   Project 1: Catmull-Rom and Overhauser splines. Due Friday, April 12, 9:00pm.
      Hand-in on gradescope; in-person grading.
   Project 2: Shader-based waves. Due Friday, April 19, 9:00pm.
      Hand-in on gradescope; in-person grading.
   Project 3: Geometry shader for triangular bumps. Due Wednesday, May 1, 9:00pm.
      Hand-in GLSL code on gradescope; in-person grading.
   Project 4: Distributed ray tracing. Due Friday, May 17, 9:00pm.
      Raytrace code download here.
      Hand-in your RayTraceKd.cpp code on gradescope; in-person grading.
   Project 5: Individual project. Due Sunday, June 9, 9:00pm.
      Hand-in your PDF, executable materials, and significant source files on gradescope. In-person grading with Professor Buss.

Programming assignments are individual projects. It is OK to get help from other students or other sources including the internet, but the actual work must be your own. In particular, you should NOT: hand in someone else's code as your own, directly copy code from others, or work too closely with one person for the entire quarter. It is OK however to see someone else's code, and then take a short break (say, three 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. (Any help you get from the TA or Professor is permitted of course!)

Midterm and final exam schedule: (subject to change)
   Midterm: Monday, May 6. Practice/review problems are available.
   Final: Thursday 11:30-2:30, June 13. Final is cumulative, covering the entire course. Practice/review problems are available.

Handouts: will be announced on piazza.    Simple OpenGL pipeline. Discussed in class on 5/1.

In class quizes    Dates and topics to be announced in class and on piazza.
   These will be short, approximately 10 minutes; and should be graded quickly.

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 the 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 for grading.

Piazza. Please watch piazza for important course announcements. You are strongly encouraged to post questions (and answer questions as well). An example what you might post is a screenshot of your program's output, asking about what the problem might be. However, do not post code from your programming assignment!
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, if it helps your grade, one half of one midterm score may be dropped; in this case the final exam will be 25% of the course grade,one midterm will worth 10% and the other worth 5%. The homework assignments and quizes will be together 10% of the grade (exact percentages to be determined). There will be only a handful of quizes, and the lowest quiz score will be dropped. Quizes and their topics will be pre-announced, and held in the final 10 minutes of the lecture.

Other resources

The upgraded course textbook web page has some introductory sample OpenGL programs (some of them are still under development). I highly recommend them as a way to see examples of how Modern OpenGL is used.

For other resources, please the