Support me!
If you enjoy these webpages and you want to show your gratitude, feel free to support me in anyway!
Like Me On Facebook! Megabyte Softworks Facebook
Like Me On Facebook! Megabyte Softworks Patreon
Donate $1
Donate $2
Donate $5
Donate $10
Donate Custom Amount
OpenGL 4

Do you want to learn modern OpenGL from the scratch and you have no idea where to start? Then you're in the right place !

This series covers step-by-step learning of OpenGL 4 and later. There is no deprecated OpenGL stuff involved and the minimum OpenGL context used in the tutorials is 4.4.

As a fundamental library to handle basic stuff like windows creation, I decided to stick with GLFW Library, seems to be most widely used and is properly maintained.

All the tutorials in this series are hosted in their own repository on GitHub, so simply clone this repository and open for example Visual Studio Solution packed within and build them right away :

https://github.com/michalbb1/opengl4-tutorials-mbsoftworks

This is the very first tutorial in the series. Here we simply start with setting things up. In a step-by-step manner, I will try to explain the structure of this and future tutorials, how to compile this series and so on.

After reading this tutorial, you should be able to create window with an OpenGL 4.4 context and that's fundamental to do something further .

Read further... (1980 times read)
Download 84 KB (163 downloads)

This is the second tutorial in the series! I consider this one to be the most important, as it covers probably most important aspects of the modern OpenGL - Shaders, Shader Programs, Vertex Buffer Objects and finally, it touches also Vertex Array Objects .

This one is going to be a little longer, but after reading through the stuff written in this tutorial, you should have good grasp of modern OpenGL . The reward will be white quad and white triangle, which is quite a nice reward - every 3D scene just consists of lots of triangles .

Read further... (1689 times read)
Download 118 KB (138 downloads)

In this tutorial, we will breathe a bit of life into our scenes! You will learn how to interpolate colors between vertices using shaders using smooth keyword .

Read further... (604 times read)
Download 118 KB (123 downloads)

Now here in this tutorial it gets interesting ! We finally make our first 3D scene!

Not only that, we will also learn, how to calculate Frames Per Second (FPS) value and then adjust all the animation values (rotation angle in the case of this tutorial), so that animation is smooth and consistent, no matter how much FPS you have!

Read further... (916 times read)
Download 129 KB (150 downloads)

In this tutorial, things finally get really interesting! It will teach you, how to implement very simple camera, that you can control using WSAD keys, just like FPS (First Person Shooter) games !

This is however first version of camera, it does not use mouse at all yet, so with A and D keys, you actually rotate, not strafe, as it's usual in FPS games.

This tutorial also shows you, how to turn on / off Vertical Synchronization - a way to cap FPS rate to correspond to the monitor refresh rate .

Read further... (1186 times read)
Download 133 KB (177 downloads)

This tutorial brings you very nice camera, which is controlled by mouse and WSAD keys, just as in most FPS games . Finally, you can move freely around the scene and you can even fly .

The scene is same as in the previous tutorial, but now you may look on it from above .

Read further... (928 times read)
Download 138 KB (165 downloads)

This tutorial will teach, how to apply texture to geometry. Texture is an image you can cover object with, however there is more to it than meets they eye .

You will also learn about different ways how to filter textures, that means, what ways to use, when you look at the object from big distance, small distance and so on. The OpenGL object responsible for doing this is called Sampler and we will discuss them in this article as well.

The tutorial itself renders 10 different houses, each of which has different texture filters applied, so that you can immediately see, what difference it makes, if you use different filters.

And there is also a little bonus in this tutorial ! If you pass through any of the houses, you will set the filtering for ground as well! Then you will really see, what difference it makes if you apply different filtering techniques .

Read further... (844 times read)
Download 2.22 MB (167 downloads)

It's almost Christmas time and this is my Christmas present for you! In this tutorial, you will learn, what is multitexturing - that is applying multiple textures on the same objects at once.

And because it's the most wonderful time of the year, I have decided to create a nice, Christmas themed scene, where you walk through a village with several houses on a snow-covered pavement .

Read further... (662 times read)
Download 3.67 MB (126 downloads)

Have you ever wondered, how to create 2D game panel, containing your current hitpoints, ammo or how much armor you have? Well now you can learn that! But because it's Christmas time, we won't show any ammo, nor armor or hitpoints, but a Christmas tree with snowflake instead .

In this tutorial, we will learn, how to do rendering in 2D over the scene using orthographic projection. This is pretty common in computer games to create menus or HUDs (head-up displays). We will build on foundation of this tutorial to create fonts later .

Read further... (998 times read)
Download 3.75 MB (157 downloads)

The same scene? Again? Third time? You should come up with something new!

Maybe that's what you think, when you see the thumbnail, but worry not! There is so much new stuff in this tutorial, although the result is same. But code is much more systematic and cleaner than it was! In this tutorial, we simply look back on what we've done and try to improve our code. You might have seen, that the code has been getting a bit too much copy-pasty lately and the initialization / render functions have gotten way too long.

I have introduced lots of new things in this tutorial and it took definitely longest to program. Basically every object has now its manager, so that you can access it from anywhere. Furthermore, managers clean objects nicely, so we don't forget to remove any shader program! Just read the article and see the changes for yourself .

Read further... (627 times read)
Download 3.77 MB (129 downloads)

In this tutorial, we will explore another way of rendering objects - Indexed Rendering. Long story short - you just generate a list of vertices and then tell OpenGL, which vertices form faces and mesh using indices .

To demonstrate it, I have chosen torus as a nice example, where indexed rendering might be used. In the scene, you can see 10 icy pyramids with tori on top .

Read further... (841 times read)
Download 1.94 MB (103 downloads)

In this tutorial we will learn, how to output text using OpenGL and FreeType Project - a free library for font rendering. We will learn, how to build and render fonts from TrueType fonts and store the characters in the texture atlas .

Finally we are able to output anything that we want anywhere on the screen, not just set the window title with all information as it was until now !

Read further... (790 times read)
Download 2.55 MB (97 downloads)

After two weeks, I came up with another tutorial, although this one is rather short and pretty easy, so I would say it's a chilltorial . It's about blending and how can we use it (wisely) to make objects on our scene transparent .

You will finally understand, what is blending, source buffer, destination buffer, alpha and several blending calculations that exist. This is just a first part however, later on, I want to cover more interesting topics, like Order Independent Transparency .

Read further... (449 times read)
Download 3.70 MB (66 downloads)

Finally it's all getting exciting! We will incorporate normals of vectors to calculate more realistic colors of objects! In this tutorial, we will actually learn Phong Shading .

But wait, there's more! This tutorial explains in detail what is ambient light and diffuse light and how to use them. You can play around with variety of keys in this tutorial to observe different behavior when using different settings!

You can create day, dawn or nightly scene effect just by setting the correct parameters .

Read further... (680 times read)
Download 3.35 MB (71 downloads)

In this tutorial, we will discover a new type of shader - Geometry Shader. Long story short, geometry shader is able to generate additional geometry out of input data .

We will make use of geometry shader to display normals of our objects. Now you can see, that the normals are transformed properly and lighting calculations are correct. You can also play with the length of the normals to create interesting visual artefacts .

Read further... (595 times read)
Download 3.35 MB (61 downloads)

Things are getting pretty exciting now! In this tutorial, we will learn what is heightmap and how to generate random terrain using heightmap and hill algorithm! Hill algorithm is very simple algorithm to generate random terrain and as you can see in the screenshot, the result is pretty impressive! You can also keep regenerating the random terrain by pressing 'R' button (just wanted to make tutorial more cool ).

Read further... (569 times read)
Download 3.23 MB (65 downloads)

In this tutorial, we continue with extending our Heightmap class. We add support for loading a heightmap from a grayscale image, which represents height. This way, you can provide whichever terrain you like!

Moreover, you will learn here how to create effect of skies around us using Skybox. Very simple concept, but very powerful results (see for yourself) !

Read further... (274 times read)
Download 10.92 MB (29 downloads)