creating a halo

i think this is a bit of a non-trivial problem:

i´ve got a scene with several objects that represent light sources, like headlights etc. these are not actually openGL light sources, i just bright cubes or whatever. what i want to do is lay a halo effect on each of these light sources: you see this in various games, like you would have a star-shaped flare emitted by a car´s brake lights, streetlights, etc… can also be seen in the N64 game “Perfect Dark” quite frequently
basically, i only need to draw a semi-transparent bitmap overlaid on each lightsource. the problem is, how do i determine where the sources (and IF) they are actually drawn? i must only draw the halo if a lightsource is visible otherwise it looks wrong.
basically, it´s the same problem as with a lens flare, you want to know when to draw the flare because the light source is visible, and when to omit it.

i´ve got one approach, but am not sure whether this might work:

  • set a certain value in the stencil buffer if a lightsource is drawn
  • set another value if anything else is drawn
  • finally, check where there are “source” values in the stencil buffer and draw the halos there.
    this might be very slow since i need to directly access the stencil buffer that way.

has anyone some experience with haloing / lens flares, or knows a good net resource?



this is what i do. run a linesegment from the camera to the light source + check to see if any polygons block its path.

hmmm taht means you´d write your own raycaster wouldn´t you? how do you check for intersection with blocking polygons, isn´t that quite some huge overhead?

not much overhead at all i just run it through my scenegraph which will return all the nodes that the ray goes through then i check if the ray collides with any of the polygons in those nodes. yes it does take a while to set up BUT u need to do this anyway if u wanna have collision detection in your program. BTW once its setup it goes quick.

BSP/PVS would be another alternative. while implementing an efficient tree could be time consuming, the fruits of your labor will be well worth the effort. using BSP/PVS, utilities like line-of-sight come in handy and can be executed quickly. essentially, you check for visibility between the node where the light is and the node where the camera is. i’m working on a BSP/PVS with Constructive Solid Geometry. once i get a demo finished i’ll post it. good lick


lick = luck

…how embarrassing…