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. 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. Any prospective students who did not take Math 155 in Winter 2018 should discuss with the instructor whether they have the needed prerequisites.

Class time/location: HSS 2154, MWF 11:00am-11:50am.
   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:00 (regular office hours).
      In APM B324: Wednesday 1:00-2:00, Thursday 2:00-3:00, Friday 1:00-2:00 (computer lab)

Teaching Assistant:

   Jonathan Conder.
      Email: jconder@ucsd.edu
      Computer lab hours in APM B325.
         Please see the calendar above.

Handouts
   OpenGL_pipeline.pdf.

Homework Assignments
   Homework #1.
      Turnin via GradeScope only. Also available: LaTeX source file.

Programming Assignments
   Project 0: Getting Restarted. Due Friday, April 6.
      Check computer access and disk space.
   Project 1: Catmull-Rom and Overhauser Splines. Due Tuesday, April 17, 9:00pm.
       Hand in source on gradescope by the deadline. Individual grading in computer lab during the next week or so.
   Project 2: Shader-based traveling sine wave.. Due Friday, April 27, 9:00pm (extended).
       Hand in shader source on gradescope by the deadline. Individual grading in computer lab during the next week or so.
   Project 3: Choose either Bezier Patch project or Enhanced Glsl Wave project. Due Friday, May 11, 9:00pm.
       Hand in PDF on gradescope by the deadline. Individual grading in computer lab during the next week or so.
   Project 4: Distributed Ray Tracing project. Due Thursday, May 24, 9:00pm.
       Hand in PDF on gradescope by the deadline. Individual grading in computer lab during the next week or so.

Academic Integrity: 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, or directly copy code from others. 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. Please be aware that allowing someone else copy your code is itself a serious violation of academic integrity: you must not share your code with someone else in a way that would allow them to violate these guidelines.
Any help you get from a TA or the professor is OK. If you are not sure what is permitted, please talk with Professor Buss.

Midterm and final exam schedule:
   Midterm #1: Wednesday, May 2.
   Midterm #2: Wednesday, May 30.
   Final: Friday, June 15, 11:30-2:30. Final is cumulative, covering the entire course.

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.

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% of the course grade, 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 handful of 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.

Other resources

The upgraded course textbook web page has some introductory sample OpenGL programs --- and more will be added. I highly recommend them as a way to see examples of how Modern OpenGL is used.

See the Math 155A course page for more information on installing OpenGL on your home system (if you choose to do so). That page also has more information on course prerequisites and the textbook.