dba02e35d4
FG_ENABLE_MULTIPASS_CLOUDS must be defined to enable the algorithm. I made this because the stencil buffer must be initialized at the beginning of the program and OpenGL can fallback to software rendering if it can't find a visual with stencil buffer. I didn't touch the configure script, so CXXFLAGS=-DFG_ENABLE_MULTIPASS_CLOUDS must be set before running ./configure. If FG_ENABLE_MULTIPASS_CLOUDS is defined, the main render loop begins by reading the /sim/rendering/multi-pass-clouds property. It is a boolean property so there are only two quality levels. false means no multi pass and no use of the stencil buffer, true means an additionnal pass for both upper and lower cloud layers. The algorithms are as follow : /sim/rendering/multi-pass-clouds=false 1. draw sky dome 2. draw terrain only 3. draw clouds above the viewer 4. draw models except the aircraft 5. draw clouds below the viewer 6. draw the aircraft. The cloud rendering doesn't update the depth buffer. This means that models overwrite clouds above the viewer. This is only noticeable for tall buildings and when flying very low. Also, drawing low clouds after models means that they are not blended with models' translucent surfaces. Large transparent area require alpha test enabled and AI aircraft canopy are making holes. The pilot's aircraft being rendered at the end, there is no problem with canopy or prop disc. /sim/rendering/multi-pass-clouds=true 1. draw the sky dome 2. draw the terrain only 3. draw all clouds 4. draw models except the aircraft 5. redraw the clouds where the models where drawn ( stencil test on ) 6. draw the aircraft The assumptions made by this algoritm are that the terrain is not transparent ( should be true in all cases and that there are no clouds between the aircraft and the viewer. Assuming these facts, there should be no blending bugs. The screenshot rendering is not updated yet. |
||
---|---|---|
.. | ||
.cvsignore | ||
3dfx.sh | ||
bootstrap.cxx | ||
fg_commands.cxx | ||
fg_commands.hxx | ||
fg_init.cxx | ||
fg_init.hxx | ||
fg_io.cxx | ||
fg_io.hxx | ||
fg_os.cxx | ||
fg_os.hxx | ||
fg_props.cxx | ||
fg_props.hxx | ||
globals.cxx | ||
globals.hxx | ||
logger.cxx | ||
logger.hxx | ||
main.cxx | ||
main.hxx | ||
Makefile.am | ||
metar_main.cxx | ||
options.cxx | ||
options.hxx | ||
README | ||
runfgfs.bat.in | ||
runfgfs.in | ||
splash.cxx | ||
splash.hxx | ||
util.cxx | ||
util.hxx | ||
viewer.cxx | ||
viewer.hxx | ||
viewmgr.cxx | ||
viewmgr.hxx |
Last updated $Date$ This directory contains the main routine for FlightGear, together with various utility classes and functions that do not fit in anywhere else, and subsystems that have not yet graduated to having their own directories (because the maintainers are lazy, not because the subsystems are not important). fg_commands.cxx fg_commands.hxx This module defines a global function to register FlightGear's built-in commands. fg_init.cxx fg_init.hxx This module defines global functions to initialize for the various subsystems. Code is gradually being moved out of here and into the subsystems' own init() methods, so this module will eventually disappear. fg_io.cxx fg_io.hxx This module defines high-level global I/O functions for FlightGear. I don't know how widely these are used, yet. fg_props.cxx fg_props.hxx This module provides a FlightGear layer over the SimGear property manager. This module performs two roles: it provides global convenience functions for accessing the FlightGear property tree, and it ties some properties to its own static functions. The second role has mostly disappeared, since subsystems now tie their own properties in their bind() methods, and eventually this module will contain only the convenience functions. fgfs.cxx fgfs.hxx This module defines FGSubsystem, the abstract base class (or interface) for subsystems in FlightGear. Most of the important subsystems already extend this class, and eventually, all subsystems will. globals.cxx globals.hxx This module defines FGGlobals, a class that holds pointers to subsystems and other variables used by a FlightGear session. Many global variables have migrated into here, and eventually, all will, so that the program can maintain state for more than one session at once. logger.cxx logger.hxx This module defines the FGLogger subsystem, which allows the user to log any property value to any number of CSV files, somewhat like an overenthusiastic flight data recorder. main.cxx This file defines the main() function for FlightGear as well as the top-level loop. Currently, there is a still lot of code in here that belongs in the individual subsystems' init() and update() methods; eventually, this will be a short, simple file defining the top-level flow logic of the program. options.cxx options.hxx This module defines global functions for parsing command-line options and transferring them to the property tree. runfgfs.bat runfgfs.bat.in This is a batch file for launching FlightGear under MSWindows. runfgfs.bat is autogenerated from runfgfs.bat.in, so any changes should be made to the latter file. splash.cxx splash.hxx This module defines global functions for displaying and updating the splash screen. viewer.cxx viewer.hxx This module defines the FGViewer subsystem, which calculates the viewpoint in world coordinates and provides transformation matrices for the scenery code. FGViewer has methods that allow the program to rotate or move the current view direction. viewmgr.cxx viewmgr.hxx This module defines the FGViewMgr subsystem, which manages all of the different views available in FlightGear.