Cubemap textures are a mechanism provided by GPUs that allows us to develop several rendering techniques such as skyboxes, skylight illumination, dynamic reflection of the environment, etc. With them we can map the visible environment onto the 6 faces of a cube and later easily query this information from a shader program.
In this post I’m going to explain how to extract the parameters of each frustum plane in the local space of the object with a certain modelview-projection matrix. Knowing the frustum planes may be useful in some cases. The first one that comes to my mind is to perform frustum culling, which I will explain soon in a separated post.
In order to draw smooth (anti-aliased) lines in OpenGL, some things must be taken into account:
- Blending during rendering must be enabled
- An specific blending function must be explicitly defined
- Line smoothing must also be enabled
- In some cases, the proper hint for line smoothing should be specified
The following code are the OpenGL calls needed to obtain anti-aliased rendering of lines:
In the next image one can see the difference between drawing lines with and without anti-aliasing:
Sometimes we need to know, in a fragment program, a pixel’s position in eye space. We usually need this in postprocessing operations, where we will tipically send an eye-facing quad filling the whole screen, executing an specific fragment program along with information about the scene (usually textures that contain surface normals, depth, materials, etc) that has been previously rendered in a previous pass.
So, during this postprocessing step, each fragment belonging to this quad corresponds to a little area on the surface of the previously rendered scene, although by now we only know its position within the eye-facing quad being rendered.
The question is: Which was its exact position in the scene in eye space?