CSC133: Object-Oriented Computer Graphics

Shankar N Swamy

If you are registered for this course and have questions, comments, suggestions ... about the course, please use the discussion in canvas for the course.

What you can expect to learn in this course:

  • Some principles of software engineering that the industry would expect from a recent college graduate. We will cover concepts such as "SOLID" principles, "Design Patterns", "Connotational Semantics" etc. Time permitting, some introduction to Data-Oriented Design and ECS pattern.  Unity and Unreal are both written in C++ - though Unity provides only C# and JavaScript/UnityScript/Boo interfaces, the engine itself is written in C++ and use ECS pattern. Java's memory allocation mechanism does not allow for implementing ECS pattern. So we will use OOP and DOD patterns in the assignments which are highly valued in the industry.
  • Some aspects of Graphics programming with the industry-standard API: OpenGL. We will cover some aspects of how OpenGL works under the hoods - enough to understand simple graphics programs, how to create simple rendering programs.  We will mostly use 2D rendering examples. 
  • Some exposure to Agile Software development and Test-Driven Development.

We won't be covering graphics to the depth where you will need deep mathematics background such as projective geometry, monte carlo computations nor deep physics knowledge such as BRDF, Radiance or Photorealism.  Whatever mathematical tools are needed will be covered from ground up, on a need driven basis. 

This is an applied-engineering course. The overall emphasis will be on hands-on programming and engineering assignments to learn creating quality software and to learn graphics programming. My goal is to help the students, as far as possible in a course, to meet the expectations of a recent college graduate by the industry, and to stimulate the students' interest in hightech engineering, software development and graphics.

It is not a coincidence that NVidia which is  a prime AI Systems company was a poineer in graphics and AMD, another graphics company has entered the competition. Graphics Systems have contributed under the hoods significantly to the latest boom in hightech industry and I would like this course to  contribute as much as possible to help motivated students to enter either the AI or the graphics or another related field of their interest.

What you do need to complete this course successfully:

  • Experience in Java programming.  Alternatively: C++ programming experience will work.
  • A Computer Science/Engineering major; or a Mathematics/Physics/Mechanical Engineering/Architecture Major with reasonable experience in Java or C++ programming would likely have adequate background to succeed in the course. (If you are not from the Computer Science department and not sure whether you are ready for the course, I encourage you to contact me ahead of registering.)
  • This is not a first course in programming; not a first course in Java programming.

Development Environment:

  • lwjgl - Light Weight Java GL and OpenGL API. I am not a Mac user; but there is enough evidence on the Internet that it works seamlessly on MacOS as well. It is verified to work on Windows 11 and Linux (Ubuntu 22.04).
  • I suggest using IntelliJ IDEA for development. I am using this IDE to develop the assignment solutions. I am using Gradle rather than Maven - Gradle is more recent and seems to have overcome some annoyances of Maven. But that should really not matter to you - we will provide only the source code files for the solutions and you are welcome to use your favorite build system (and make it work!).
  • SHADERed - this is a open source Shader Development Environment. If you have any interest in graphics or GPU computing, you will find this immensely interesting. It's open source. Installs out of the box on both Windows 11 and on Ubuntu 22.04. There are other competing tools. But I happen to like this because of its default shader being GLSL, has good documentation and is open source. I expect you will appreciate this tool even more if you take the advanced grahpics course. They also have a very decent TUTORIAL  and Video Tutorials as well!

If you want to get a head-start with the course, you might install lwjgl and work through their "getting started with lwjgl" examples. Or try some examples out at SHADERed.

What will NOT be available in the course:

There will be no printed notes or slides available. 

Everything covered in this course will come from published materials - and should be available in various textbooks and documents on the Internet. I am not going to spend time aggregating them.  Where you find something interesting during the lectures, I encourage you to ask me about the sources. If I cover something that is not in the textbooks or easily available on the Internet, if you bring it to my attention, I will attempt to provide some notes. But those will not directly  help you in quizzes/finals as only hand-written notes are allowed. You will have to learn at least enough from sources to make handwritten notes! I have this requirement because I have found from personal experience and from published research on the psychology of learning that (both) making notes while learning something (and attempting to explain something to others) are very effective ways of learning.

Grading:

We will have multiple quizzes and a final.  All quizzes and the final are closed to books, cellphones, computers etc. However, they are all open to handwritten notes.  You can bring any amount of notes, notebooks etc.  But they all have to be handwritten. No computer Printouts. 

Quizzes are usually given at the end of the lecture, will cover the material from that lecture and previous lectures. Given the applied nature of the course, the questions in the quizzes and the finals will cover the application of the material covered in the lectures which in turn are largely driven by what is needed to successfully complete the programming assignments.

The programming assignments will be due at regular intervals. Working solutions to assignments will be provided soon after the  deadlines and hence, extensions to programming assignments are not possible. However, we will drop the scores from one programming assignment and one quiz at the end of the semester.

All programming assignments are to be done individually and there are no group assignments planned.  There is no mid-term and currently no written home-works are planned - though there may be some exceptions to the latter, as needed.

Reference sources:

Lightweight Java Game Library reference - we will be using this interface to OpenGL. They also show how to install the library using Intellij IDEA. Relatedly, Gradle instructions are here.

This page is more frequently useful while developing.

OpenGL reference pages 

Textbook:

There is no recommended textbook for the course because I can't find a single textbook that is appropriate for what I intend to cover or comes close enough to it to be prescribed. 

Developing Graphics Frameworks with Java and OpenGL I found to be reasonably good; but it is not a textbook meant for a single semester long course, narrowly focused on graphics while this course is a mix of graphics and software engineering. The book covers more advanced material - and is expensive.

Java in a Nutshell is a decent reference - if you don't already own a Java book and don't like going to Internet everytime you want to look up a syntax or usage.