|
Articles
Articles about general OpenGL or graphics topics.
An Overview Of Bump Mapping Techniques: Bump mapping has been ubiquitous in offline rendering for ages, and is quickly becoming commonplace in realtime rendering engines as well. This article discusses the basic technique and several of its possible realtime implementations. (July 7, 2004) [Print]
Phong For Dummies: Phong's lighting model is probably the most popular lighting model for real-time 3D graphics in use today. This article discusses Phong's lighting equation in detail, including a few common variations an extensions such as Blinn-style specular lighting. (March 14, 2003) [Print]
Deferred shading: Many modern shading techniques require multiple rendering passes, thus making it almost impossible to use them in highly detailed 3D scenes. This article shows how the enhanced programmability and the floating-point framebuffers in the DX9 hardware generation enable you to avoid the multiple passes by deferring the shading to the image postprocessing stage. (October 24, 2002) [Print]
Rendering in 1 bit per pixel: This article describes how I used pixel shaders for rendering images in black and white (1 bpp) using a pattern dither. (January 11, 2002) [Print]
Streaming vertex data to AGP memory with VAR and fence: NVidia's vertex array range and fence extensions allow you to reach very high triangle rates by letting the GPU pull vertices from AGP memory rather than from system memory. This article describes a rendering architecture that uses VAR and fence to increase throughput for non-static vertex arrays. (June 28, 2001) [Print]
WGL Extensions: The WGL API supports extensions just like OpenGL does. WGL extensions, however, are used for functionality that is specific to the windowing system (Win32 in our case). This article discusses how to detect and load WGL extensions, and then takes a look at a few interesting examples of such extensions. (January 6, 2001) [Print]
Quaternions: Quaternions are a compact way of representing rotations. This article discusses how quaternions work and why they are so popular. (September 27, 2000) [Print]
Gamma Correction: By supporting gamma correction, users can tweak the brightness of your 3D graphics to suit their monitor. This way, your application can look the same on all displays. This article explains how gamma correction works and why is necessary. (September 20, 2000) [Print]
Metaballs: Metaballs are a powerful way of modeling smooth, organic shapes. This article takes a look at how metaballs work. (August 14, 2000) [Print]
Generating Triangle Strips: You can optimize model rendering by joining triangles together into triangle strips. This article describes one possible algorithm for generating triangle strips from any random bunch of triangles. (June 4, 2000) [Print]
Multithreading: A basic introduction to multithreading, and the ways in which it can benefit your 3D applications. (May 29, 2000) [Print]
The OpenGL Framebuffer: The framebuffer consists of a lot more than just the color buffer. This article takes a look at the other buffers defined by the OpenGL specification, and examines how much video memory each of them would require. (April 7, 2000) [Print]
Constructive Solid Geometry: CSG is a method to create complex, new 3D objects from simple, old ones. You've probably seen CSG in action in your favorite modeler: CSG is what allows you to combine objects with boolean operators. (October 5, 1999) [Print]
Selection Techniques: Many applications need to have the user select items on the screen. This article discusses three useful techniques to implement a selection system. (July 26, 1999) [Print]
Sprite Animation with OpenGL: OpenGL isn't necessarily just for 3D graphics, you know. (April 30, 1999) [Print]
Creating Lathe Objects: Most 3D modelers have a lathe feature, but why would you buy SoftImage if you can write a lathe function yourself? (January 8, 1999) [Print]
Migrating between Delphi 3 and Delphi 4: A list of common problems when moving your (OpenGL) applications between different versions of Delphi. (November 24, 1998) [Print]
Articles that discuss specific aspects of 3D game engines.
Terrain texturing: There are tons of articles on the net that deal with terrain LOD, but only few that deal with terrain texturing. This article describes an approach to blending multiple tiled textures. (March 8, 2002) [Print]
Impostors: Impostors are an "advanced" version of billboards. The difference with traditional billboarding is that the texture is rendered at run-time, using a real 3D model. The texture is also updated to reflect changes in the viewpoint, so impostors look much more realistic than traditional billboards. (November 22, 2001) [Print]
State Management: State changes are expensive, and should be avoided at all cost. In this article, I outline a rendering architecture that will help reduce state changes to the bare minimum. (March 30, 2001) [Print]
Terrain Rendering: Terrain engines typically work very differently from indoor engines. This article discusses a quadtree-based approach to continuous LOD terrain rendering. (October 22, 2000) [Print]
Occlusion Culling: Do not draw what cannot be seen. It's pretty much the holy grail of 3D engine development, but like any other quest for any other holy grail, this is not easy. One of the things you'll surely need is occlusion culling. (August 24, 2000) [Print]
Octrees: A lot of 3D engines depend on BSP trees for the spatial organization of polygons. In this article, I'll first try to explain why BSPs aren't always the best choice, and then present an alternative in the form of octrees. (August 2, 2000) [Print]
Texture Management: Using more and bigger textures can make your scenes look a lot better, but it comes at a price. At some point, you're going to run out of memory. Some clever texture management can help you reduce the resulting performance losses. (March 8, 2000) [Print]
Level Of Detail (LOD): You probably already know of some algorithms to speed up scene rendering - backface culling, portal rendering, PVS, and so on. These algorithms can help you draw more detailed environments, but you still have to be very careful about the detail of your actors. This is where LOD kicks in... (February 7, 2000) [Print]
Untitled-3D's Camera Model: You can achieve lots of cool effects in your 3D engine just by playing around with the camera. The trick is to make your camera model as flexible as possible. In this article, I'll describe the model I designed for Untitled-3D, along with some of the neat things it allows me to do. (January 13, 2000) [Print]
Radiosity Lighting: In a previous article, I already tried to explain how lightmapping works. That article failed to discuss one crucial thing, though: how to actually calculate the light maps. One way to do so is by using radiosity. (December 6, 1999) [Print]
Collision Detection: Everyone has probably wished he or she could walk through walls at some point in his life. But as much as you'd like to walk through the walls in real life, you probably don't want to do so in your 3D games. (November 15, 1999) [Print]
Customizability: If your 3D engine/game is any good, your fans will want to start customizing it, so you'd better make sure your engine is as accessible as possible. (November 6, 1999) [Print]
Advanced Portal Features: Portal rendering doesn't just facilitate your engine's visibility determination. You can use portals to do other cool stuff, too. (October 29, 1999) [Print]
Animated Skyboxes: Add some realism to your skybox by making the clouds move. (May 21, 1999) [Print]
BSP trees: BSP trees are a useful technique for any graphics programmer. This article explains the how and why of the BSP algorithm. (April 19, 1999) [Print]
Potentially Visible Sets: Portal rendering is okay, but if your geometry is static, it also adds a lot of unnecessary overhead. Potential Visibility Sets (PVS) are designed to eliminate this overhead. (September 15, 1998) [Print]
Implementing a Console: Ever since Quake, nearly every first person shooter has had a console. If you've been living in another galaxy for the past three years, a console is one of those drop-down thingies that you can enter commands in. (September 6, 1998) [Print]
Adding User Code: Your engine becomes a lot more flexible if it can load and execute user code. There are two popular mechanisms for implementing this: scripting languages and DLLs. (August 12, 1998) [Print]
Character Animation: Once you get a half-decent 3D engine up and running, you might want to create some characters to walk around in your virtual worlds. Putting them in there is easy enough, but making them come alive is no mean feat... (July 29, 1998) [Print]
Viewing Systems: To make your engine as flexible as possible, you need a viewing system that can give the viewer full freedom of movement. That's why this article discusses a viewing system that makes sure the view behaves the way the user expects it to. (July 14, 1998) [Print]
Special Effects Integration: Integrating different kinds of special effects into your engine can be a little trickier than you might think. This article offers an elegant solution that uses one of Object Pascal's more advanced features... (June 15, 1998) [Print]
Content Creation Tools: You can write 3D engines all you want, but how are you going to test them? You'll need some testing data, but to create data files, you need to write the right tools first. (June 9, 1998) [Print]
Data Structures for 3D Engines: Good data structures are very important to the efficiency of a 3D engine. This article discusses a high-level way of organizing your data. (June 3, 1998) [Print]
Portal Rendering: Portal rendering is a very popular hidden surface removal algorithm. This article discusses a variation of portal rendering that I used in my Untitled-3D engine (May 29, 1998) [Print]
Visibility Determination: Visibility determination (more particularly hidden surface removal) is probably the single most important aspect of any 3D engine. (May 27, 1998) [Print]
|