CSC133: Object-Oriented Computer Graphics
Shankar N Swamy
"For the things we have to learn before we can do them, we learn by doing them."
-Aristotle, The Nicomachean Ethics
Note before you register for the course
[Last update: for Spring 2026.]
There is no course without you! I would like you to take this course and successfully complete it. But prior to registering, I urge you to confirm this course matches your learning style by reading at the least items numbered 1 through 7 below.
If the registration system shows that the class is full, often there still is room for a few more students. I will try to accommodate as many as the room holds, as the department can provide grading resources for. However, I prioritize the students who attend the first week of lectures. I would like you to attend all lectures if you are registered for the course, but it is essential that you attend the first lecture.
If you missed the first lecture, please do not approach me to be let into the course.
Here are some of the rules I enforce in the course - and these are not negotiable. Please do not register for the course and then ask me to relax them: I won't.
- There are no distributed notes. I come to each lecture with extensive preparation. Software process and development tools are still evolving very fast and preparation often means several hours of prior work for me for each lecture, every semester I teach this course. I come prepared, often having learned new things since I am still a practicing software engineer first. I do not lecture from notes. I lecture from my learning. Prior to each lecture, the topics covered are published on the Canvas. Do not ask me for notes. I have none. You have to take notes yourself.
- Cellphones, laptops, tablets and other electronic devices are not allowed in the classroom. That means you cannot have them in the open. If you have them with you, they should be tucked away out of sight inside your backpacks or bags. Not in your hand, not on your desk. This also means you cannot take notes on your tablets. These are not negotiable and please don't approach me for exemptions.
- You are probably well advised to take notes because all tests and finals are open hand-written notes. Sharing notes is discouraged. Part of the reason for suggesting you take notes is because when you take notes by your hand, you learn better. Research has shown that taking notes digitally or copying notes from others or another printed or from another written down source is not as beneficial to learning.
- There will be 9 to 12 programming assignments each has to be completed without collaboration. You can submit only work independently done by you. This excludes work done by others including those done by tutors or others either paid for or not, and work done in collaboration with other students. To combat increased amount of cheating in the course, we reserve our rights to interview selected students about their work before awarding the grades for specific assignments.
- There is not a book any textbook that I follow. I have read a lot on the topics that I teach and continue to read, watch and learn, have been practicing software development in the industry for decades and developed many large software systems some of which you might even be using rather unknowingly and continue to do software development. What I teach is a result of all these efforts. I will provide a set of suggested books; but they are just that: references, if you continue in this field. This also means that if you miss a lecture, it would be difficult to make up for it.
- The course is driven by assignments. Lectures & assignments complement each other. All assignments are individual assignments. Collaborating on the assignments with others, getting it done by others, etc are all considered malpractice and when found out, we prosecute those cases to the fullest.
- All discussions should happen on the Discord server for the course, during lectures or during office hours.
Please read through the above, and I hope you will still want to register and if you do register for the course, please be aware that I will strictly enforce these rules without exceptions.
About the course:
To the typical student in this course, at the start, what follows in this description will seem new, strange and perhaps complex, complicated. The prime goal of this course is to make you understand and become familiar with these core principles of software engineering through hands-on development with full understanding of why you will do what you will be doing. While a lot of this is highly advanced topics in Software Engineering, my goal is to simplify those intricate concepts enough to make it accessible at your level.
This course will use Object-Oriented Software with Data-Oriented Design which is the combination used by the gaming industry. Gaming industry largely uses that combination because computer games and engineering simulations are some of the most complex software systems and they demand very high performance as well. Over the years the industry realized this was the best approach to create systems that deliver on both the demands.
We will be following examples of graphics/games/engineering simulations using OpenGL with Java programming. While Java is a prerequisite, no prior knowledge of OpenGL or graphics is needed. We will cover both from scratch.To access OpenGL we use LWJGL which is the cutting edge interface in Java for OpenGL and LFWGL which is the best Windowing option for OpenGL. This combination also ports over to Android seamlessly. We use the industry's most favored development environment including IntelliJ, git. We will also cover some aspects of vibe coding. Our goal is to prepare you for a good career in the industry - to the extent a single course can accomplish that goal the best!
Assuming you will take this course, the course will be over with your finals and you will move on. If you choose to become a practicing software engineer, we hope you will carry forward at least the following learnings:
- What is "Systems Thinking Software Architecture"
- Good Program vs Good Software
- Role of abstractions in software architecture, abstraction of software as a system, and abstractions used in software development.
- What we want for a good Software System
- The "M-E-S-S" of Software: what are they and how we create software that is compliant with MESS requirements
- How we realize good software system
- Good abstractions
- Compact & Complete Responsibilities deduced from abstractions
- Small classes with consistent interfaces
- Minimized dependencies between Classes within a Component
- Component - Component synchronizations exclusively limited to using a Centralized Driver via Data exchange.
- How to design classes/packages/components to meet above target
- Localize, localize, localize
- DRY
- EVP
- "Is-A", "Has-A" relationships
- SRP
- OCP
- LSP
- ISP
- DIP
- How to adapt and reuse the known solutions in your software applying Design Patterns such as
- Singleton
- Factory/Prototype/Builder
- Composition
- Initializer
- Composite
We will also experience interpreting UML and lean some vibe coding as both are now extensively used in the industry. While running to Gemini or ChatGPT the moment you need some code is easy if you write run off the mill programs, there is a method to make the LLM technology to produce what you want. We will cover some elements of that during the course.
This is not a course in Java programming; you are expected to be able to write programs in Java.
We only support Windows 11 and Linux in the course. The instructor uses Linux and Windows. OpenGL is used in the assignments and OpenGL on Apple systems runs simulated on top of Metal API. Though students have used Apple systems for this course, instructor is unable to commit to it.
- Each section is run independently. If you have to switch sections, you have to do it through the departmental procedure, at the beginning of the semester.
- Quizzes, tests, and finals will be different for each section. Some assignments may be similar.
This is a project-oriented, hands-on course, which means it will involve significant software development.
We will make every attempt to cover the material that is most relevant to the industry as of today. Lectures cover what is needed for the assignments. Quizzes, tests, and finals will cover lectures and assignments. If you do all assignments yourself and understand the solutions, understand the material covered in the lectures, you are fully prepared for the quizzes, tests and the finals.
- All lectures, office hours are face to face only. There will be no recording of the lectures. Audio/video recording of the lectures with your cellphones, taking pictures without prior permission, are not allowed.
- All assignments are to be done individually. Assignments turned in form part of your grades and as such should be your own work. Turning in work done by others - ether paid for or obtained as gratis, either from fellow students or from outside sources - is considered cheating. You are expected to use the lectures, office hours and Canvas discussions to get the needed help to do the assignments.
All quizzes, Tests, Finals are open to handwritten notes. That is, handwritten notes. Not text books, computer printouts or notes taken in your tablets. Please do not ask for exemptions. If you take your notes on a tablet or in some digital format, you will have to rewrite them or write them down on paper - in your own handwriting - to use them in the quizzes, tests and finals.
Development Environment, syllabus, etc will be covered on the Canvas platforms for the course.
Grading:
We will have multiple TESTS and a final. All TESTS 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.
The grades for the course will be based on a curve.
Written parts of the grading - tests, finals, and the programming assignments are graded separately and your course grade is the average of the two grades. To pass the course, you have to get a grade better than a D+ in both parts separately. Otherwise you course grade will be the lower of the two grades you get.