This series covers step-by-step learning of OpenGL 3.3 and later. As you may know, in OpenGL 3.0, most of old stuff has been deprecated (the fixed pipeline), including the easy-to-use rendering using glBegin() / glEnd() functions and in OpenGL 3.2 removed from core profile.
Programming the new way may be more difficult than old way, but the results are worth learning it, trust me. These tutorials are also forward-compatible with later versions of OpenGL.
First of the upcoming series of OpenGL 3.3 (and later) tutorials. Describes how to create OpenGL 3.3 rendering context on Windows.
Read further... (3949 times read)
Download (119 KB) (14616 downloads)
Well, this tutorial should have name First Triangle and Quad, since there's triangle and quad rendered, but it doesn't matter
Point is, that you can learn what is VBO and how to render basic primitives (now it's without color, in next tutorial we will dive into shaders).
Read further... (1738 times read)
Download (120 KB) (7353 downloads)
As the name suggests - you will be introduced to probably most important thing in new OpenGL - shaders - programs executed on GPU that processes vertices and data. After reading this tutorial you should be able to compile and use shaders and color your primitives.
Read further... (1716 times read)
Download (128 KB) (7823 downloads)
In this tutorial, we are finally going to do some 3D rendering. We will create a VAO for pyramid, and we will render 5 moving pyramids. This tutorial introduces comeback of matrices, but without fixed functionality that older OpenGL provided. We will use free OpenGL Mathematics Library glm, which eases life so much by replacing all good old functions that OpenGL and GLU had. We will also learn about uniform variables in shaders, how to switch vertical synchronization, that limits FPS to monitor refresh rate, and how to update scene based on time elapsed (nothing difficult). So prepare, this one's gonna be longest so far.
Read further... (2557 times read)
Download (135 KB) (7589 downloads)
Indexed drawing is another mode for rendering things in OpenGL. With it, you don't provide vertex data directly, but rather by telling OpenGL where they're stored (you just tell OpenGL indices of vertices), and this can be beneficial for rendering some objects, like heightmaps (in this tutorial there's a simple 4x4 heightmap used to demonstrate power of indexed drawing), but not that good for objects like pyramid from our previous tutorial.
This tutorial also covers how to run application in fullscreen mode and provides such option at startup.
Read further... (1923 times read)
Download (139 KB) (6707 downloads)
The time has come now to add plenty of realism to our scene - we will learn how to texture objects. There are many libraries for loading images, I decided to use FreeImage library, with which I have most experience. After this tutorial, our scenes will become almost photorealistic (just kidding, it has too far from photorealism
, but it's far more realistic than just colored triangles
This tutorial is pretty long, as it covers image loading, texture filterings, texture coordinate mapping, and samplers. In the end you will see, that moving from old way of texturing to new isn't that hard. And because Winter Is Coming
(actually it's already here in Slovakia), we will use ice texture in this tutorial
You may notice increase in filesize, compared to other tutorials. It's because I pack FreeImage.dll within, so you can run this tutorial without problems.
Read further... (2125 times read)
Download (1.74 MB) (8707 downloads)
In this tutorial, you are going to learn (if you already don't know) how to use pixel blending to achieve effects like object transparency. Object transparency actually isn't that simple - in order to do it properly, several things must be ensured for it to work properly.
It's called basics, because topics discussed here are really only basics. There is a better method for rendering transparent objects called Order Independent Transparency, which is more advanced and will be explained in a tutorial far far away...
Read further... (1292 times read)
Download (1.26 MB) (5464 downloads)
Lighting is what gives flavour to the look of our scene. Without it, scene looks dull and flat, not resembling reality. This tutorial tries to explain basic lighting terms and also starts to implement simple lighting model based on ambient, diffuse and specular contribution to light. The lighting tutorials will continue, this is only the first.
Light source in this part is directional light, more specifically sun, which has also it's texture made in MSPaint
. I hope you'll like how sun looks
! Move around with WSAD keys, change sun's position with LEFT and RIGHT arrow keys to change direction of light.
Read further... (2897 times read)
Download (1.43 MB) (7309 downloads)
This tutorial introduces you to orthographic 2D projection, with which you can do 2D renderings over a scene and then you will learn about FreeType fonts and how to load and print them with OpenGL. FreeType is a great choice for fonts in OpenGL, because they can handle all font types used nowadays.
Read further... (1682 times read)
Download (1.43 MB) (5852 downloads)
Multitexturing is a technique of applying multiple textures to a surface. We can easily mix two or more textures with shaders the way we want. In this tutorial, you are on a desert, and you can easily control desertification level with keys 'G' (more grass) or 'H' (less grass, more draugHt
After going through this tutorial, you shouldn't have problem applying as many textures on your object, as your hardware supports
I also explain how to remove problem with flickering of scene, when looking at scene from far away.
Read further... (2151 times read)
Download (2.16 MB) (5407 downloads)
Brace yourselves, foggy days are coming
. This tutorial adds a fog shader to the scene. In old OpenGL, making fog was as simple as calling glEnable(GL_FOG), while specifying few settings for fog. Within new, we must build this on our own. But it's not anything extremely difficult.
This tutorial will be continued later with Volumetric Fog, or fog that is present only in certain areas of scene.
Read further... (1737 times read)
Download (2.13 MB) (5192 downloads)
This tutorial describes point lights. These lights are illuminating only area around them, depending on their attenuation factors. Typical point light in real world is a light bulb. But we won't have one, instead we have here shining colored cube
Read further... (1977 times read)
Download (2.16 MB) (5274 downloads)
After 2 months delay, new tutorial is finally here! It introduces another type of shader commonly used nowadays - Geometry shader. Its purpose is to produce additional geometry from input data, for example higher tesselation of input polygons. In the future, we will use this shader for creating particle system.
In this tutorial, we divide each triangle into 3 subtriangles right in its centroid, and move that centroid towards or backwards from triangle in the normal direction. This creates interesting effect.
You will also learn how to turn on wireframe rendering mode (single function call, nothing advanced
Read further... (1766 times read)
Download (2.22 MB) (5360 downloads)
Finally! A first tutorial in which we work with something else than just boxes and toroids
. This tutorial will teach you how to load and render Wavefront OBJ model files. From now on, we'll use models to make our scenes more interesting.
In this tutorial, there is a free Thor model. And there is also another model. Which? See for yourself
Read further... (2798 times read)
Download (3.25 MB) (12872 downloads)
3 weeks have passed since last tutorial, but it's here - rendering to a texture. What's it good for? Well, you can render something, then make a texture out of it, and map it somewhere. It's good for example when programming TV screens, mirrors and so on.
In this tutorial, we'll create a TV screen with moving and rotating Thor model on it and Spongebob will be watching all this like movie
Read further... (1275 times read)
Download (3.32 MB) (5144 downloads)
More than 4 weeks passed and another tutorial is here - this time it's the spotlight. It's a light that has a position, direction and a cutoff angle, that defines the breadth of light cone emitted (also some other parameters). Typical example of a spotlight is flashlight, which is also implemented here.
Exploring the scene, what can you find in the top of the tower, in the dark?
(SpongeBob? Or something else?)
Read further... (1410 times read)
Download (2.99 MB) (5225 downloads)
Finally! After endless 3 MONTHS break, new tutorial is here! It was supposed to be about shadows, but I decided to go with something less difficult, yet very useful and common in 3D graphics - 3D picking, so that you can select objects in 3D by (for example) clicking on them.
This tutorial is the first part, that shows color picking method. In part 2, I'll show alternative method for picking objects using ray casting.
I hope such a long break hasn't discouraged you to keep reading this webpage
Read further... (2446 times read)
Download (4.07 MB) (4679 downloads)
Is it even possible? A new tutorial?
New tutorial is here after almost 4 months and it shows a different approach to 3D picking by using ray casting. You cast a 3D ray beneath the cursor from near to far plane and then check for intersection with model's bounding sphere.
This approach can be used when you don't have a depth buffer reading available like on OpenGL ES 2.0, so you must do 3D picking in different way. It's up to you which one you choose. The first part rendered model's bouding box (or you can even render whole model to have things 100% exact), which was more precise, now you need to define some shapes with which you will check collision with (you can even check every triangle of model and ray intersection, but that would be horribly slow).
For this tutorial, I have chosen an easy object to represent model - a sphere, because checking ray-sphere collisions is pretty easy and it shows the concept well.
Read further... (1913 times read)
Download (4.09 MB) (5097 downloads)
5 months have passed and I come up with another tutorial - this one is rather simple and is about model loading using Assimp Library. I feel so bad about this incosistency, hope you guys forgive me./
Forget about my old 15th tutorial that teaches you OBJ model loading - Assimp can load basically every common format of models and parses it into it's internal structures. We'll use these structures to construct OpenGL VAOs and VBOs for rendering.
Ignore the file size, wolf model from them internets has too big tga textures, and my main editor can't open tga files, so I didn't bother with shrinking them
Read further... (3290 times read)
Download (26.92 MB) (7775 downloads)
Hitting one month and one week mark (not that bad
) and another tutorial is here!
It's about rendering terrains using heightmaps loaded from images, where grayscale value in image represents height of that point.
Not only that, our heightmap has 3 layers of textures - in the lowest places there is fungus texture, going higher we transition into regular grass, and on top of heightmap there is a rock texture.
And still not only that
! I also add a special texture, which describes path going through that terrain.
Read further... (5579 times read)
Download (27.17 MB) (6428 downloads)
Yet another tutorial! This one after a long period of inactiveness. Endless stream of duties from school / band etc.
This tutorial teaches you how to create specular highlights on objects. This is yet another of basic concepts when it comes to light. Specular highlight doesn't only depend on position of viewer, but also on position of the viewer.
Another thing, that's explained in this tutorial is how to display normals of a model using geometry shader
Hope you guys forgive my endless, neverending breaks between consecutive tutorials
Read further... (1212 times read)
Download (7.18 MB) (3535 downloads)
After finishing university studies, I bring you another tutorial after more than 4 months. Better late than never right
This one teaches how to program particle system that's running almost entirely on GPU, making all these thousands of particles being updated on GPU rather than on CPU, leaving as CPU computational power for something else.
The main ingredient to this is transform feedback feature. This tutorial should open some new horizons of OpenGL 3.3, which I have never talked about before, so definitely try to read through this and learn as much as possible
Read further... (4197 times read)
Download (4.56 MB) (4559 downloads)
In a pretty quick succession (only 2 weeks!!! ) I bring you another tutorial - Animation Part 1. This tutorial teaches the easiest, yet pretty effective and nice method of animating a model using keyframes. One of the first (or even maybe very first) formats that used keyframe animations were Quake 2 models (*.md2). We will use these here. The animation calculations run inside the shader, so CPU is free again and graphical work is left to GPU
Apart from that, I made this one in a way that you can really play around
. Use Arrow Keys to move model around, Ctrl key to attack and other keys to change models and animations.
You can also see Blade Training Facility on the screenshot, led by Dr. Freak
. Dr. Freak is one of the most common MD2 models I have encountered in many OpenGL based applications. Enjoy!
Read further... (3102 times read)
Download (5.89 MB) (3922 downloads)
Tutorial with a pretty number 25 is here and this time it brings you a Bump Mapping technique, that adds a lot of realism by altering surface normals, so that the surface looks more "bumpy" without need of extra geometry and it's also not very computationally expensive, because it basically uses only Multitexturing and a new kind of math (never seen before
) to achieve this effect.
Extra stuff: Dr. Freak now has his personal jet engine
Read further... (1825 times read)
Download (12.56 MB) (3587 downloads)
After almost 3 months of silence, I managed to bring you a new tutorial! This one is about basics of shadow mapping and I hope you will enjoy it
Shadow mapping works briefly in following way: render the scene from the light's point of view, use the depth buffer of rendered result and make it a texture, and apply this texture to the scene. This texture is called shadow map. The quality of the shadows depends on the chosen shadow map size.
You can play around with many things in this tutorial - change shadow map size, light direction and also move around with Hobo Goblin and shoot arrows with SPACE
. So enjoy this tutorial and your day (Carpe Diem
Read further... (1366 times read)
Download (11.76 MB) (3387 downloads)
Time is passing by and another tutorial has come! This one is pretty useful and is about conditional rendering using occlusion queries -
Occlusion query is a mechanism, using which you can ask whether the object is visible and if it's sure that the object is not visible, there is no need to render it. Before rendering the whole complex object, we first render its bounding box, but not for real - we just asked how many pixels (fragments) would get affected with this render. If 0 pixels were affected, that means, that the bounding box is not visible therefore the whole complex objects can't be visible either.
Our complex object is sphere. Interesting thing that I found and you can also play with - if the sphere is poorly tesselated, the occlusion query actually dropped my FPS, but from some point, the rendering gets speed up signficantly. You can change the sphere tesselation values in the ini file sphere.ini
Read further... (2543 times read)
Download (4.94 MB) (2812 downloads)
Another tutorial is up! This time I decided to upgrade the fonts that we have learned previously in the tutorial 9 - new fonts support Unicode characters and also run faster and more efficiently
So finally you can print out text with OpenGL in your favorite language
Read further... (1049 times read)
Download (5.15 MB) (2336 downloads)
Finally I managed to finish this tutorial. As always, the lack of time and sometimes my laziness didn't allow me to finish the tutorial as I promised (who would believe my schedule now anyways
). One way or another, the tutorial, that improves the quality of our terrain is here - I programmed a grass, that covers the terrain, waves, you can also change the direction of wind in the shader and so on. I hope you will enjoy this tutorial
Read further... (3575 times read)
Download (5.56 MB) (3159 downloads)