[Note: this webpage last modified Tuesday, 09-Oct-2012 10:34:21 EDT]
General Information
Announcements
Purpose and Focus of Course
Grading, Assignments, and Expectations
Blackboard and Tegrity
Academic Integrity
Special Needs
Lecture: 11am-12:15pm Tuesdays and Thursdays in A002 Root Hall.
course.
Final exam: Thursday, December 13 at 10am-noon.
Office hours: I am generally in my office and available
most MWF's from about 8:30am-4pm. My official office hours are
Wednesdays 9:30-11:30am. My office is A-156 Root Hall.
Instructor: Jeff Kinne
Website:
http://cs.indstate.edu/~jkinne/cs440-f2012 (or browse for Jeff Kinne
on http://mathcs.indstate.edu, or
search for Jeff Kinne on google, bing, yahoo, etc.
and find a link to the course website from my personal webpage)
Prerequisite: CS 202 and 303. If you do not meet the prereq but think/hope you'll be ready to take the course, come and talk to me.
Required text: Fundamentals of Computer Graphics, 3rd Edition, by Peter Shirley and Steve Marschner. If you can find the 1st or 2nd edition significantly cheaper, feel free to buy those instead - I don't think the differences are too great.
Supplemental OpenGL reference:
There are various OpenGL programming guides. The one I am using is
OpenGL Programming Guide: The Official Guide to Learning OpenGL,
Versions 3.0 and 3.1 (7th Edition). I don't overwhelmingly
recommend buying this, but it is what I am using. Note that many
things changed from OpenGL 2 to OpenGL 3. This book covers some of
both.
The FAQ at
opengl.org has a lot of good information that you can use as a reference
once you are already familiar with OpenGL.
The OpenGL 2.1
Reference Pages contain information about each OpenGL function
that is part of OpenGL 2.1. We will begin by using OpenGL 2, so these
pages have reference information about all of the functions we will
use for much of the semester.
Nate Robins'
OpenGL tutorials are a good collection of programs that allow you
to get some intuition for how the various OpenGL transformations
work.
The official documentation for all the different versions
of OpenGL is
at http://www.opengl.org/registry/.
Supplemental C/C++ reference: The definitive reference for the C language is The C Programming Language, 2nd edition, by Kernighan and Ritchie. The definitive reference for the C++ language is The C++ Programming Language by Stroustrup. Both can be purchased, or you can look online for PDFs. You can typically find a quick reference for a C or C++ function by searching online. For example, search for C++ printf.
Announcements regarding the course will be made both during class and via email to your @sycamores.indstate.edu email address. You should regularly check this email account or have it forwarded to an account that you check regularly. You can set the account to forward by logging into your indstate.edu email from Internet Explorer (the "light" version of the webmail client that opens up from Firefox or Chrome does not give the option to forward email).
This course is a course on Graphics Programming. The two major components of the course will be learning graphics algorithms and writing graphics programs. Using the best algorithms and data structures is critical for making graphics programs as efficient as possible - the more efficient, the more detailed and realistic the program can be. Some of the topics we will cover include the following.
Displaying objects with proper lighting and shading. This topic is a large one. Consider hanging multiple glass spheres in a room. How can we draw spheres on the computer screen that look like glass and have all the reflective properties that glass has? How do we take into account that objects in a room are lit both by the sun and by an overhead light to create the proper shadows?
Efficiency in displaying 3D scene. Suppose you write a sim game where the world is a city with hundreds or thousands of buildings, vehicles, people, etc. Each object in the world might be "in front" of any other object, so do we need to consider all pairs of objects to determine which ones are visible? Even if an object is not visible, it's presence may effect the lighting and shadows of objects that are visible. How do we figure all this out the most efficiently?
Animation. This topic ranges from having standard objects move to trying to model the movement of complicated objects like a swimming pool after someone has jumped in or the natural movement of a human hand.
OpenGL and graphics cards. Most of our programming will be with OpenGL. To optimize our programs, we will need to understand OpenGL and graphics cards.
Digital images/displays. The fact that our computer displays are discrete makes life interesting. How do we draw a diagonal line without it looking "blocky"? How do we take a small digital image and make it larger without it looking "blocky"?
Linear algebra, math. To do much of the above, we will review tools from linear algebra and other math that will be needed. Math gives us ways to model the world in a way that is easy to manipulate. For example, moving an object on the screen (and many other transformations/operations on objects) can be viewed as simply multiplying the position of the object by a small matrix.
We will not cover all topics in the book. We will cover the fundamental topics, and there will be some wiggle room to focus more on those topics that interest us most.
Grading, Assignments, and Expectations
The students of this course have the following responsibilities: read assigned readings, attend lecture, complete homework assignments, take exams, and complete a project. The final grade consists of:
Project: 20% of the final grade.
Homeworks: 35% total. Each homework assignment will be worth some number of points, with later homework assignments probably worth more than the first few homework assignments. The total of these homeworks will be worth 35% of the final grade. LATE HOMEWORKS WILL NOT BE ACCEPTED. NOTE: if you turn an assignment in more than one day early, I will look at it and give you feedback on any mistakes you might have - and if you resubmit before the due date I will grade the corrected version.
Exams: 35% total. The first two exams will be worth 10% each, and the final exam will be worth 15% of the final grade.
Class Attendance/Participation: 10% total. Attendance will be taken at the beginning of each class. Half of your attendance/participation score will consist solely of whether you were present when attendance was taken each day - the total number of days present divided by the number of lectures in the semester. The other half of your attendance/participation grade will be assigned at the end of the semester based on how attentive you were in class throughout the semester.
The class attendance grade serves the purpose of giving you credit for coming to class. You benefit from coming to class by seeing me present the new material, getting to ask questions, interacting with your classmates, keeping up on what is going on in the course, etc.
The exams serve as benchmarks of your ability to relatively quickly solve problems related to the material. This helps me assign a grade, and also gives you motivation to pay attention and keep up with the assignments.
The homework assignments are designed to solidify your knowledge by having you write programs and solve problems.
The final project will be discussed further after the first few weeks of the semester. Students will choose a larger programming project that will be completed by the end of the semester and presented to the class.
Expectations. My expectation is that an average student will spend 6-9 hours OUTSIDE of class each week (that is in addition to class time) WORKING PRODUCTIVELY/EFFICIENTLY (not just starring at the computer) to complete their coursework for this class. Some students may spend less time than this, and some students will spend more.
Classroom conduct. You may not use cell phones, iPods/music players, etc. during class. You should be civil and respectful to both the instructor and your classmates, and you should arrive to class a few minutes before the scheduled lecture so you are ready for lecture to begin on time. You may use your laptop during class if you are using it to follow along with the programming examples that are being discussed. You may not check email, facebook, work on other courses, etc. during class.
Important Note. If you wait until the last minute to begin your homework assignments, I will not be available to answer questions if you have problems. Programming assignments are notorious in the sense that oftentimes most of the time completing the assignment occurs after you thought you had the problem solved. So you MUST start your homework early. I suggest attempting the assignment the day it is given, or the day after, so that if you have a problem you can ask early. If you continue to have problems in trying to complete the assignment, you will have time to ask again. Working on programming assignments is much less stressful if you start early!
I make no promise ahead of time what the exact cutoff will be in terms of the number of points to achieve an A+, A, A-, etc. These will depend on how the course goes. I will use the guidelines below in assigning letter grades. After the first few weeks, I will include a "letter grade if the semester ended today" in your grades. You can keep track of how you are doing in the course with the grades on the blackboard site for this course.
The following is roughly what I would expect by the end of the semester to earn a particular grade.
A+/A Superior. You understand all of the graphics algorithms very well, and your programming assignments are great. You could keep learning more of the material on your own if you wanted to.
A-/B+ Excellent. You had misunderstandings with just a few of the graphics algorithms, or just a few of your programming assignments were not great. You really learned everything you needed to in the class, and should be all set to keep writing graphics programs on your own.
B/B- Good. You have done well on many of the assignments/exams but not well on others. You have learned many of the topics well, but others you may not understand very well. You could probably write programs that are very similar to those we did in class, but might have trouble doing things that are much different than what we did in class.
C+/C/C- Adequate. You have basic understanding of the most important concepts but do not understand the finer points. Many of your programming assignments were not correct. You would probably not be able to complete very interesting graphics programs on your own.
D+/D/D- Poor. You have put in a genuine effort, and you have displayed mastery of some of the concepts. But you have missed some of the important concepts as well, and you probably would not be able to write even a basic graphics program on your own.
F Failing. For much of the material in the course, you do not even know the basic information or have not turned in assignments.
For some programming assignments, I will assign a grade based on correctness and style. The exact breakdown may vary slightly from one assignment to another. In general, 60-70% of the points for an assignment will be given based on whether it is correct. The remaining 30-40% will be given based on good programming style: (i) choosing variable and function names that are descriptive/appropriate, (ii) writing code that is easy to understand and efficient, (iii) including documentation at the top of each file about what is in that file and how to use it, (iv) including documentation with each function describing what the function does (including what should be input to the function and what the function outputs), (v) documentation throughout each function describing the flow of the program. For portions of the code that are given to you, you do not need to add documentation to those parts of the code; if I give you partially completed code, you are responsible only for documenting the code that you add.
The course has a blackboard site. Click here to go to blackboard. You should see CS 440 or CS 540 listed under your courses for the current term. The blackboard site is used for giving you your grades. The blackboard site can also be used to post questions/comments about the class. You have the option of posting your questions in blackboard or just sending email. If you do not want your question visible to the rest of the class, then send email. It could be good to post the question on blackboard because (1) other students may be having the same problem and could benefit from seeing the answer to your question, (2) other students can respond to your question/comment - and may do so sooner than I do.
During the first week of classes, I will be out of town. I will record the lectures so you can view them in Blackboard. The program/plugin that allows you to view the lectures is called Tegrity. You can view these lectures by going to blackboard for this course and clicking on "Tegrity Classes" on the left hand side. You will be asked to install a browser plugin to allow you to view the lectures.
Other than the course grades, discussion board, and initial week of lectures on blackboard, all course content, schedule, etc. is kept on the instructor's webpage (which you are currently viewing).
Please follow these guidelines to avoid problems with academic misconduct in this course:
Homeworks: You may discuss the homework assignments, but should solve them on your own. To make sure you are not violating this, if you discuss with someone, you should DESTROY any work or evidence of the discussion, go your separate ways, SPEND at least an hour doing something completely unrelated to the assignment, and then you should be able to RECREATE the program/solution on your own, then turn that in. If you cannot recreate the solution on your own, then it is not your work, and you should not turn it in.
Note on sources: if you use some other source, the web or whatever, you better cite it! Not doing so is plagiarism.
Exams: This should be clear - no cheating during exams. The exams will be closed-book, closed-notes, no computer, and no calculator.
Projects: You should not copy code from the internet or anywhere else. The project should be your own work. It will be fairly obvious to me if you do copy code from the internet, and the consequences will be at the least a 0 on the project.
If cheating is observed, you will at the least receive a 0 for the assignment (and may receive an F for the course), and I will file a Notification of Academic Integrity Violation Report with Student Judicial Programs, as required by the university's policy on Academic Integrity. A student who is caught cheating twice (whether in a single course or different courses) is likely to be brought before the All-University Court hearing panel, which can impose sanctions up to and including suspension/expulsion. See the Student Code of Conduct and Academic Integrity Resources for more information.
Please ask the instructor if you have doubts about what is considered cheating in this course.
If you have special needs for the classroom environment, homeworks, or quizzes, please inform the instructor during the first week of classes. If you have any such needs, you should go to the Student Academic Services Center to coordinate this. See Student Academic Services Center - Disabled Student Services for more information.