We may earn an affiliate commission when you visit our partners.
Penny de Byl and Penny Holistic3D

Why should you learn OpenGL?  (a) It's one of the original graphics libraries developed  to be implemented mostly (or entirely) on hardware. (b) A knowledge about OpenGL will reveal to you what goes on in the background of other graphic and game engines giving you superior problem-solving and trouble-shooting skills in other applications (c) It will improve your understanding of 3D mathematics, and (d) It brings vertex shader programming to the forefront of developing computer graphics applications delivering you a higher level of skill in creating fast GPU-based parallel-processed 2D and 3D graphics.

Designed for

Read more

Why should you learn OpenGL?  (a) It's one of the original graphics libraries developed  to be implemented mostly (or entirely) on hardware. (b) A knowledge about OpenGL will reveal to you what goes on in the background of other graphic and game engines giving you superior problem-solving and trouble-shooting skills in other applications (c) It will improve your understanding of 3D mathematics, and (d) It brings vertex shader programming to the forefront of developing computer graphics applications delivering you a higher level of skill in creating fast GPU-based parallel-processed 2D and 3D graphics.

Designed for

You will learn about:

  • The Pycharm Development Environment.

  • The Pygame API, which is an interface for OpenGL.

  • PyOpenGL, a python wrapper for the OpenGL API.

  • Coordinate systems in orthogonal, perspective, screen space, and camera space.

  • Moving a virtual camera.

  • Constructing 3D graphics using vertex shaders.

  • Vertex Colouring.

  • Lighting.

  • Essential mathematics for working with 3D space and positioning vertices with a variety of 4x4 viewing matrices.

  • Working with 3D OBJ model files.

  • UV mapping and texturing of meshes.

What people are saying about Penny's courses:

  • Once again Penny delivers a powerful, clear, and worthy course. I believe this material will be very helpful in understanding the underlying workings of many game engines. It is also something a bit different that will allow me to work on my python skills having some fun by making games. She is very clear in her instruction, very knowledgeable and of course delivers easy to follow and understand information that you can easily pick up and learn.

  • Allow me to say how hugely important this is for a person who is interested in certain types of game design. Creating games where you can create AI behaviors that support emergent situations.

  • I honestly love Holistic's teaching approach and I've never learned so much within a few hours about coding effectively with such detailed explanations.

This course focuses on providing students with hands-on experience coding a general 3D graphics engine using PyOpenGL, while also providing an easy introduction to Python for the intermediate programmer.

Enroll now

What's inside

Syllabus

In this section you will gain an overview of the course and pick up on the revision of some essential concepts required as background learning for the course.
Read more

In this lecture, Penny will welcome you to the course and provide and overview of the content and her motivation behind creating it.

This video will give you all the information you need to get in touch with the Holistic3D student community.

How to contact us

This video provides a revision of the concepts of vectors and the Cartesian plane.

This video provides an overview of colour and how it is used in computer graphics.  It focusses on how colours are mixed and stored in memory.

Important Reading on Common Issues students have and how to ask for help.

In this section you will learn how to setup the development environment used in this course and begin testing out your setup by creating a simple OpenGL project.

In this lecture students will learn how to install Python and setup a development environment with PyCharm and PyOpenGL

In this lecture students will test run an already written PyOpenGL application to test the setup of their IDE.

In this lecture students will create their first Pygame window,  discover why a main endless loop is required and the double buffer.

In this lecture students will learn about the basic structure of an OpenGL program and develop the start of a simple drawing application in Python.

In this lecture students will discover how to plot their star sign in a window, investigate point sizes and explore setting the scale and direction of window coordinates.

In this section you will learn about the fundamental drawing operations required in computer graphics.

In this lecture students will learn how to use dots to plot a graph of a mathematical equation in a window.

In this lecture students will learn how to plot a point at the position of the mouse when the mouse is clicked.

In this lecture students will learn how scale values between coordinate systems.

In this lecture students will learn how to draw lines on the screen and use the mouse to define where they are drawn.

In this lecture students will learn how to draw multiple lines on the screen using the mouse.

In this lecture students will learn how to plot a graph of an equation using lines.

In this lecture students will learn how to save the data from a line drawing to a file.

In this lecture students will learn how to load saved data from a file to display a drawing on the screen.

In this lecture students will examine the drawing of polygons.

In this section you will learn about drawing on the screen to produce 2D fractal images.

In this lecture students will learn what turtle graphics is and begin writing their own turtle drawing code.

In this lecture students will learn how to move and rotate the turtle on the screen and how to produce some interesting drawing effects.

In this lecture students will learn what l-systems are and how to create a string rewriting function to process them.

In this lecture students will complete the code for a turtle graphics generator that draws l-systems.

In this lecture students will learn about a repetitive point plotting systems that can produce fractal images.

In this lecture students will learn how an iterative function system rule is formed and be challenged to try a different set of IFS values.

In this section you will begin to explore the structure of 3D objects and begin programming to display them on the screen.

In this lecture students will create their own mesh class after learning about the data structures involved in defining a mesh.

In this lecture students will learn how to extend the Mesh class to draw a cube and change it from a wireframe drawing into a solid.

In this lecture students will learn how to load an OBJ mesh file into their project and extract the vertices and triangles.

In this lecture students will learn how to display a loaded mesh in OpenGL and position it for viewing in the window.

In this section you will learn about the nature of 3D space and create a virtual camera by which to explore the scene.

In this lecture students will gain an overview of the transformations that take place to calculate pixel locations for drawing objects on the screen from their initial vertex values.

In this lecture students will learn how to apply transformations to objects.

In this lecture students will learn how to move and aim the camera to obtain a different view of the scene.

In this lecture students will begin creating a Camera class and learn how to program the camera to move from side to side with the arrow keys.

In this lecture students will learn how to rotate the camera using the mouse.

In this lecture students will learn how to set the mouse sensitivity as well as turn the mouse cursor on and off.

In this lecture students will learn how to add a world axis system into the project to give object placement a reference point.

In this section you will learn about the fundamental mathematical operations used in computer graphics for moving, rotating and scaling objects.

In this lecture students will gain an overview of the types of transformations.

In this lecture students will revise the concept of matrices and how to perform operations with them.

In this lecture students will examine the nature of 4x4 matrices for performing transformations in computer graphics.

In this lecture students will learn how to apply glTranslate to move the position of an object.

In this lecture students will work to restructure the Mesh class and allow meshes to store their own position in world space.

In this lecture students will learn how to use the same cube object and draw it in different locations.

In this lecture students will learn how to rotate and object and how the effect of performing different transformations in a different order will effect the final drawing.

In this lecture students will learn how to modify the mesh class to accept a rotational value that will work locally with a mesh.

In this lecture students will learn how scaling affects other transformations and build them scaling into the mesh class.

In this lecture students will learn the reasons why affine transformations work so well in computer graphics.

In this section you will start the second version of the graphics engine using code already created and building upon it to make it faster through the use of vertex shaders.

In this lecture students will begin creating a new graphics engine by refactoring the code experimented with thus far.

In this lecture we will create an application that inherits from the PyOGLApp class to test for functionality.

In this lecture students will learn about the OpenGL Shader Language

Shader Datatypes
Temp Fix for next Lecture

In this video students will learn how OpenGL compiles vertex and fragment shader code and links it to a program.

In this lecture students will begin writing their first vertex shader program in OpenGL.

In this lecture students will complete their first vertex shader application.

In this lecture students will learn how to pass multiple vertices to a vertex shader.

In this lecture students will learn how to pass through a second set of values to a vertex shader to use as vertex colours.

In this lecture students will create a new Mesh class and inherit from it to create a Square.  These new classes will perform all the buffer registrations required for drawing by the vertex shader.

In this lecture students will learn how to incorporate uniform values into a vertex shader to reposition a shape.

In this section students will learn how to use the projection, model and view matrices to ensure vertices are draw correctly via the vertex shaders.

In this lecture students will begin writing transformation utility methods to store the position, scale and rotation of objects and the camera.

In this lecture students will learn how to apply matrix operations to the current transforms of 3d objects.

In this lecture students will learn how a perspective matrix is constructed.

In this lecture students will modify the old camera code to now use new matrix multiplication.

In this lecture students will learn how to integrate the projection and lookout matrices stored with the camera into the vertex shader.

In this lecture students will finally get the new camera system working after adding transformations to the mesh class.

In this lecture students will learn how to add world axes back into the scene using vertex shaders.

In this lecture students will learn how to use local and world rotations to fix unwanted camera roll when yawing and pitching.

In this lecture students will learn how to limit the pitch angle of the camera to prevent gimbal lock.

In this section you will learn how to specify the format of a 3D object for a vertex shader as well as load one in from an external OBJ file.

In this lecture students will learn how to rewrite the old cube class to work with vertex shaders.

In this lecture students will learn how to reconfigure the code in the LoadMesh class to bring an OBJ model into the Vertex Shader code format.

In this lecture students will learn how to reimplement scaling into the transformation matrix.

In this lecture students will learn how to rotate an object around any axis and integrate the calculations into the transformations class.

In this lecture students will learn how to modify and apply transformations at runtime to create animated effects.

In this lecture students will learn how to add the live rotation code the existing base mesh class without disrupting the remaining child classes built from it.

In this lecture students will add realtime scaling and translation to the mesh class.

In this section you will learn how to add lights to the scene by programming how a light position and colour interact with the fragment colour.

In this lecture students will learn about the importance of normals in graphics calculations for lighting.

In this lecture students will modify the loading mesh method to read in the normals and texture coordinates from an OBJ file.

In this lecture students will learn how to add a basic diffuse light to the vertex shaders.

In this lecture students will learn how to pass the vertex normals to the vertex shader to light a 3D model.  In addition they will explore how to add a light to the position of the camera.

In this lecture students will learn how to produce a light that combines, ambient, diffuse and specular.

In this lecture students will learn how to position the light and camera at different locations to get a better view of specular light effects.

In this lecture students will learn how to restructure the shader code to accept an array of uniform values in the format of light positions.

In this lecture students will complete creating multiple lights and then examine how to use structures in vertex shaders.

In this section, students will learn how to apply UV mapping to load textures and place them on 3D models.

In this lecture students will learn about UV values and how they are used for texture mapping.

In this lecture students will create a texture class that will take care of the setup and loading of an image to place on an object.

In this lecture students will integrate the loading of a texture into the Mesh class.

In this lecture students will examine some of the different setups for UV values as well as OpenGL texture settings.

In this lecture students will learn how to include images with transparency so that colours blend together in the colour buffer.

Save this course

Save Learn OpenGL with Python for Graphics and Games to your list so you can find it easily later:
Save

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Learn OpenGL with Python for Graphics and Games with these activities:
Review Linear Algebra Fundamentals
Solidify your understanding of linear algebra concepts, which are crucial for understanding transformations and matrix operations in OpenGL.
Browse courses on Linear Algebra
Show steps
  • Review matrix multiplication and vector operations.
  • Practice solving linear systems of equations.
  • Study the concept of vector spaces and linear transformations.
Read '3D Math Primer for Graphics and Game Development'
Strengthen your understanding of the mathematical foundations of 3D graphics, which are essential for working with OpenGL.
Show steps
  • Review the chapters on vectors, matrices, and transformations.
  • Study the sections on coordinate systems and projections.
  • Work through the examples and exercises provided in the book.
Read 'OpenGL Programming Guide'
Familiarize yourself with the official OpenGL documentation to gain a deeper understanding of the API and its capabilities.
Show steps
  • Read the chapters related to vertex shaders and transformations.
  • Study the sections on lighting and texturing.
  • Experiment with the code examples provided in the book.
Four other activities
Expand to see all activities and additional details
Show all seven activities
Implement Basic Transformations
Practice implementing basic transformations (translation, rotation, scaling) using matrices in Python with PyOpenGL.
Show steps
  • Create a Python script that draws a simple 3D object.
  • Implement functions for translation, rotation, and scaling using 4x4 matrices.
  • Apply these transformations to the 3D object and observe the results.
Contribute to PyOpenGL
Contribute to the PyOpenGL open-source project by reporting bugs, writing documentation, or contributing code to deepen your understanding of the library.
Show steps
  • Explore the PyOpenGL GitHub repository.
  • Identify areas where you can contribute, such as bug fixes or documentation improvements.
  • Submit a pull request with your changes.
Create a Simple 3D Scene
Build a simple 3D scene with multiple objects, lighting, and basic texturing to solidify your understanding of the concepts covered in the course.
Show steps
  • Design a simple 3D scene with a few objects.
  • Load or create 3D models for the objects in the scene.
  • Implement lighting and texturing for the objects.
  • Set up a virtual camera to view the scene.
Develop a Simple Game
Apply your knowledge of OpenGL and Python to develop a simple game, such as a 3D maze or a simple shooter, to gain practical experience.
Show steps
  • Design the game mechanics and objectives.
  • Create or find 3D models for the game environment and characters.
  • Implement game logic, such as player movement, collision detection, and scoring.
  • Add lighting, texturing, and special effects to enhance the game's visuals.

Career center

Learners who complete Learn OpenGL with Python for Graphics and Games will develop knowledge and skills that may be useful to these careers:
Graphics Programmer
A graphics programmer writes code that brings visuals to life in applications, games, and simulations. This role involves a deep understanding of 3D mathematics and rendering pipelines. The "Learn OpenGL with Python for Graphics and Games" course helps build a foundation in OpenGL, a core technology in the field, and also uses Python, a popular language for prototyping and development. This course's hands-on experience with PyOpenGL, vertex shaders, and 3D object construction helps prepare you for the challenges of a graphics programmer. Specifically, the course's units on vertex shaders and rendering will be valuable.
Game Developer
Game developers design, develop, and implement code for video games across various platforms. This career uses programming skills, creativity, and a passion for gaming. A game developer may find the "Learn OpenGL with Python for Graphics and Games" course to be helpful, as it provides hands-on experience with OpenGL, a graphics library widely used in game development. The course covers essential topics such as coordinate systems, camera movement, and 3D object creation, all of which are fundamental to game development. Furthermore, the use of Pygame, an interface for OpenGL, would be beneficial. This course may also address the use of vertex shaders, a common element in many modern games.
Rendering Engineer
Rendering engineers work on the algorithms and software that generate images from 3D models. This role demands a deep understanding of computer graphics principles and advanced rendering techniques. The "Learn OpenGL with Python for Graphics and Games" course is useful, as it provides hands-on experience with OpenGL, a core technology in rendering. The course's focus on vertex shaders, 3D object construction, and UV mapping would prepare you for the challenges of a rendering engineer. The practical introduction to rendering pipelines would also be applicable to this role.
Simulation Engineer
Simulation engineers create and maintain simulations for a variety of purposes, such as training, testing, and research. These simulations often involve complex 3D environments and require a strong understanding of computer graphics. The "Learn OpenGL with Python for Graphics and Games" course would be valuable, as it provides hands-on experience with OpenGL, a graphics library used in many simulation applications. The course content relating to 3D mathematics, camera manipulation, and lighting effects are all directly applicable to simulation engineering. Gaining experience with coordinate systems, perspective, and screen space will be applicable to this role.
Scientific Visualization Developer
Scientific visualization developers create tools and techniques for visualizing scientific data, such as medical imaging or computational simulations. This role requires a strong understanding of scientific concepts and computer graphics. The "Learn OpenGL with Python for Graphics and Games" course would be helpful, as it provides hands-on experience with OpenGL, a graphics library used in many scientific visualization applications. This course's lessons on 3D object construction, lighting, and texturing are relevant to presenting scientific data in a clear and informative way.
Visualization Specialist
Visualization specialists create visual representations of data, concepts, or processes. This role often involves working with 3D graphics and requires a strong understanding of visual communication principles. A visualization specialist may find that the "Learn OpenGL with Python for Graphics and Games" course is helpful, as it provides hands-on experience with OpenGL, a graphics library used in many visualization applications. The course covers essential topics such as coordinate systems, camera movement, and 3D object creation, all of which are fundamental to visualization. The practical instruction on lighting and texturing of meshes is an important aspect of the role.
Virtual Reality Developer
Virtual reality developers create immersive experiences for users through virtual environments. This involves a strong foundation in 3D graphics, user interface design, and interaction paradigms. The "Learn OpenGL with Python for Graphics and Games" course provides practical experience in 3D graphics using OpenGL, a foundational skill for VR development. Gaining familiarity with coordinate systems, camera movement, and 3D modeling provides a basis for the challenges of VR. The instructions on moving a virtual camera is helpful.
Augmented Reality Developer
Augmented reality developers create applications that overlay computer-generated images onto the real world. This role requires a strong understanding of computer vision, 3D graphics, and mobile development. The "Learn OpenGL with Python for Graphics and Games" course may be useful, as it provides hands-on experience with OpenGL, a graphics library used in many augmented reality applications. The course content relating to camera manipulation, 3D object construction, and texturing are applicable to augmented reality development. The experience one gains with coordinate systems is valuable in this role.
Data Visualization Engineer
Data visualization engineers develop interactive and dynamic visual representations of data to help users understand complex information. This career utilizes programming skills and knowledge of data structures to create meaningful visuals. The "Learn OpenGL with Python for Graphics and Games" course exposes students to the concepts of 3D graphics and rendering, which can be applied to visualizing high-dimensional data sets. The knowledge of coordinate systems and transformations is important. The use of Python makes it easier to interface with many important data science libraries.
Motion Graphics Designer
Motion graphics designers create animated visuals for websites, television, film, and other media. While many motion graphics designers use dedicated animation software, understanding the underlying principles of 3D graphics can be valuable. The "Learn OpenGL with Python for Graphics and Games" course demonstrates the fundamentals of 3D graphics using OpenGL. The course's content on coordinate systems and transformations could be beneficial for understanding how 3D objects are manipulated in motion graphics. This course offers a different approach to the visual design pipeline.
User Interface Engineer
User interface engineers design and implement the visual elements and interactive components of software applications. Although not strictly a 3D graphics role, understanding the fundamentals of rendering and transformations can contribute to creating engaging and efficient user interfaces. The "Learn OpenGL with Python for Graphics and Games" course may be useful by providing a foundation in graphics programming. Though a UI engineer will likely use dedicated UI libraries in practice, familiarity with lower-level concepts can aid in troubleshooting and optimization. The discussion of coordinate systems and buffers is helpful in understanding how modern user interfaces work under the hood.
Robotics Engineer
Robotics engineers design, build, and program robots for a variety of applications. This field involves a blend of mechanical engineering, electrical engineering, and computer science. The "Learn OpenGL with Python for Graphics and Games" course would be useful for robotics engineers working on robot vision or simulation. The ability to render 3D environments and manipulate virtual cameras can be valuable for developing robot control systems or simulating robot behavior. The hands-on implementation in Python would serve a budding robotics professional well.
3D Artist
3D artists create three-dimensional models and environments for games, films, and other media. While 3D artists primarily use specialized modeling software, understanding the underlying principles of 3D graphics can enhance their skills. The "Learn OpenGL with Python for Graphics and Games" course may be useful, as it demonstrates the mathematical foundations of 3D graphics and the rendering pipeline. The course's instructions on OBJ model files, UV mapping, and texturing can give artists a deeper understanding of how their creations are processed and displayed. While a 3D artist might not directly code in OpenGL, this course reveals the lower level concepts they might not otherwise be exposed to.
Web Developer
Web developers build and maintain websites and web applications. While the majority of web development focuses on 2D layouts and interactive elements, the demand for 3D graphics on the web is growing. The "Learn OpenGL with Python for Graphics and Games" course may be useful by providing a foundation in 3D graphics. The course's content on OpenGL can be applied to creating interactive 3D experiences within web browsers using technologies like WebGL. The instruction on moving vertices may prove applicable to certain types of graphical effects.
Machine Learning Engineer
Machine learning engineers develop and deploy machine learning models for a variety of applications. While most machine learning tasks don't directly involve 3D graphics, there are cases where understanding 3D data is beneficial, such as in computer vision or robotics. The "Learn OpenGL with Python for Graphics and Games" course may be useful, as it provides a foundation in 3D graphics and the use of Python for graphics programming. Although not a core skill for most machine learning engineers, familiarity with 3D concepts can be valuable in specialized roles. Machine learning engineers may find that the instruction on vertex shaders is helpful for understanding how graphics are implemented.

Reading list

We've selected two books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Learn OpenGL with Python for Graphics and Games.
Is the official guide to OpenGL and provides comprehensive coverage of the API. It valuable reference for understanding the core concepts and functionalities of OpenGL. It is commonly used as a textbook in computer graphics courses and by industry professionals. This book adds significant depth to the course material.
Provides a comprehensive introduction to the mathematical concepts used in 3D graphics and game development. It covers topics such as vectors, matrices, transformations, and coordinate systems. It is particularly helpful in providing background knowledge for the course. This book is valuable as additional reading.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Similar courses are unavailable at this time. Please try again later.
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2025 OpenCourser