<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.flightgear.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Fahim+Dalvi</id>
	<title>FlightGear wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.flightgear.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Fahim+Dalvi"/>
	<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/Special:Contributions/Fahim_Dalvi"/>
	<updated>2026-05-09T09:21:40Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.6</generator>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Howto:Create_WS3.0_terrain&amp;diff=143988</id>
		<title>Howto:Create WS3.0 terrain</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Howto:Create_WS3.0_terrain&amp;diff=143988"/>
		<updated>2026-04-16T15:51:20Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: Update running instructions to match latest release&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WS30 Navbar}}&lt;br /&gt;
This article provides instructions on how to generate basic WS3.0 terrain.&lt;br /&gt;
&lt;br /&gt;
WS3.0 terrain consists of three parts:&lt;br /&gt;
&lt;br /&gt;
# A terrain mesh consisting of a landclass texture draped over an elevation model.  &lt;br /&gt;
# A high resolution water raster used to show water features such as rivers, lakes and coastline with more definition&lt;br /&gt;
# Line features such as roads and railways.&lt;br /&gt;
&lt;br /&gt;
The terrain is generated by a set of tools that are packaged in a docker image for convenience.[[File:Diagram-export-21-12-2023-16 29 37.png|thumb|Basic WS3.0 Scenery Generation Process]]&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
=== Set up a Workspace ===&lt;br /&gt;
Create a directory with the following sub-directories:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;cache&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;data&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;output/vpb&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;output/Terrain&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Docker ===&lt;br /&gt;
&lt;br /&gt;
# Install [https://docs.docker.com/get-started/ Docker] on your platform.&lt;br /&gt;
#Pull the docker image by running the following command&lt;br /&gt;
&lt;br /&gt;
 docker pull flightgear/ws30-vpb-generator:latest&lt;br /&gt;
Optionally, if you are hitting rate limits:&lt;br /&gt;
#Create an account on https://hub.docker.com/.  (Note that you will need to click on an email verification link before you can log in for the first time)&lt;br /&gt;
#Run &amp;lt;code&amp;gt;docker login&amp;lt;/code&amp;gt; before the '''docker pull''' command above&lt;br /&gt;
&lt;br /&gt;
== Getting the base data ==&lt;br /&gt;
You need two pieces of data for the area of scenery you are generating:&lt;br /&gt;
&lt;br /&gt;
# An elevation model (aka DEM).  This indicates what altitude each point of the surface is.&lt;br /&gt;
# Landclass data showing what type of terrain is at each point of the surface.  This is often either a Raster (effectively a texture), or vector data.  &lt;br /&gt;
&lt;br /&gt;
=== Elevation Model ===&lt;br /&gt;
Download the NASADEM elevation model for the area of scenery you wish to generate.  This is available in 1x1 degree blocks from [https://lpdaac.usgs.gov/products/nasadem_hgtv001/ here], and with an interactive browser [https://search.earthdata.nasa.gov/search here].  &lt;br /&gt;
&lt;br /&gt;
Unzip the files into the &amp;lt;code&amp;gt;data&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
=== Landclass Raster ===&lt;br /&gt;
Download an landclass raster for the area of scenery you wish to generate.&lt;br /&gt;
&lt;br /&gt;
* For Europe, use of [https://land.copernicus.eu/pan-european/corine-land-cover/clc2018 CORINE] is recommended.&lt;br /&gt;
* For the USA [https://www.mrlc.gov/viewer/ NLCD] is recommended&lt;br /&gt;
* Sentinel-2 data is available for the entire world via [https://livingatlas.arcgis.com/landcoverexplorer/ ESRI], but has limited set of landclasses.&lt;br /&gt;
&lt;br /&gt;
Put these into the &amp;lt;code&amp;gt;data&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
More detailed terrain can be created by modifying the landclass raster, and/or generating a new raster from vector data.  These processes are discussed below.&lt;br /&gt;
&lt;br /&gt;
== Generating Terrain ==&lt;br /&gt;
To generate terrain you need to run the tools within the docker container we installed above.  The docker image is like a small, independent virtual computing environment running within your system.  This particular docker image has all the scenery generation tools already installed.&lt;br /&gt;
&lt;br /&gt;
=== Running the docker container ===&lt;br /&gt;
Firstly, get the container running from the directory containing your &amp;lt;code&amp;gt;cache&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;data&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;output&amp;lt;/code&amp;gt; directories:&lt;br /&gt;
 docker run --rm --mount &amp;quot;type=bind,source=`pwd`/data,target=/home/flightgear/data,readonly&amp;quot; --mount &amp;quot;type=bind,source=`pwd`/output,target=/home/flightgear/output&amp;quot; --mount &amp;quot;type=bind,source=`pwd`/cache,target=/home/flightgear/cache&amp;quot; -it flightgear/ws30-vpb-generator:latest /bin/bash&lt;br /&gt;
&lt;br /&gt;
You should now find yourself in a bash shell within your container.  You should see data and output directories which are linked to the directories you created earlier:&lt;br /&gt;
 flightgear@ddcac77f7d5e:~$ ls&lt;br /&gt;
 cache data output bin scripts&lt;br /&gt;
&lt;br /&gt;
=== Building the terrain ===&lt;br /&gt;
To build the terrain mesh, use the &amp;lt;code&amp;gt;genVPB.py&amp;lt;/code&amp;gt; tool from inside the docker container:&lt;br /&gt;
&lt;br /&gt;
 Usage: genVPB.py --raster &amp;lt;input-raster&amp;gt; [ option ... ]&lt;br /&gt;
 Usage: genVPB.py --bbox &amp;lt;lat0&amp;gt; &amp;lt;lon0&amp;gt; &amp;lt;lat1&amp;gt; &amp;lt;lon1&amp;gt; --sentinel --reclass &amp;lt;reclass&amp;gt; [ option ... ]&lt;br /&gt;
&lt;br /&gt;
 Arguments:&lt;br /&gt;
 --raster RASTER                      Input landclass raster.&lt;br /&gt;
 --bbox lat0 lon0 lat1 lon1           Bounding box of scenery to be generated&lt;br /&gt;
 --sentinel                           Use Sentinel2 landclass tiles&lt;br /&gt;
 --sentinel-dir SENTINEL_DIR          Directory for Sentinel Data. Default /home/flightgear/data/Sentinel-2&lt;br /&gt;
 --hgt-dir HGT_DIR                    Directory containing HGT DEM files. Default /home/flightgear/data/NASADEM&lt;br /&gt;
 --output-dir OUTPUT_DIR              Set output directory. Default /home/flightgear/output&lt;br /&gt;
 --download-sentinel                  Download Sentinel2 tiles if needed&lt;br /&gt;
 --reclass RECLASS                    Reclassify raster using file &amp;lt;reclass&amp;gt;. See ./scripts/mappings/&lt;br /&gt;
 --coastline COASTLINE                Clip against coastline against polygon (.osm)&lt;br /&gt;
 --shrink-water SHRINK_WATER          Shrink water bodies (landclasses 40, 41) by &amp;lt;pixels&amp;gt; pixels&lt;br /&gt;
 --generate-water-raster              Generate a water raster from OSM data&lt;br /&gt;
 --generate-line-features             Generate a water raster from OSM data&lt;br /&gt;
 --cache-dir CACHE_DIR                Directory for OSM data cache. Default /home/flightgear/cache/&lt;br /&gt;
 --nasadem-server NASADEM_SERVER      Set server to download NASADEM data from. Default https://e4ftl01.cr.usgs.gov/MEASURES/NASADEM_HGT.001/2000.02.11/)&lt;br /&gt;
 --nasadem-user NASADEM_USER          NASA Earthdata username.&lt;br /&gt;
 --nasadem-password NASADEM_PASSWORD  NASA Earthdata password.&lt;br /&gt;
 --debug                              Debug output&lt;br /&gt;
&lt;br /&gt;
For example, to generate a piece of terrain around Edinburgh (latitude 55.5, longitude 3 degrees West):&lt;br /&gt;
 ./scripts/genVPB.py --bbox 55 -4 56 -3 --raster ./data/uk_wgs84_10m_N54.tif&lt;br /&gt;
&lt;br /&gt;
If you are using anything other than a CORINE raster you will need to reclassify the data to match the landclasses used by FlightGear.  Those classes are defined in [https://gitlab.com/flightgear/fgdata/-/tree/next/Materials/base/landclass-mapping.xml Materials/base/landclass-mapping.xml].  You can reclassify them using the files in the [https://gitlab.com/flightgear/fgmeta/-/tree/next/ws30/mappings/ scripts/mappings] directory. E.g. to reclassify NLCD2019 data you can use &amp;lt;code&amp;gt;--reclassify ./scripts/mappings/nlcd2019.txt&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
genVPB.py will output the data to the output/vpb directory, in which you should find a series of files and directories.&lt;br /&gt;
&lt;br /&gt;
=== Adding water ===&lt;br /&gt;
The terrain mesh does not have highly detailed water features - as typically the source data has a resolution of 10-25m.  Water features are generated from OpenStreetMap data.  To generate water features simply run the &amp;lt;code&amp;gt;genwaterraster.py&amp;lt;/code&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
 Usage: genwaterraster.py [-h] --bbox lat0 lon0 lat1 lon1 [--debug] [--output-dir OUTPUT_DIR] [--cache-dir CACHE_DIR]&lt;br /&gt;
&lt;br /&gt;
 Arguments:&lt;br /&gt;
 --bbox lat0 lon0 lat1 lon1    Bounding box of scenery to be generated&lt;br /&gt;
 --debug                       Debug output&lt;br /&gt;
 --output-dir OUTPUT_DIR       Directory to write files into. Default /home/flightgear/output&lt;br /&gt;
 --cache-dir CACHE_DIR         Directory for OSM data cache. Default /home/flightgear/cache&lt;br /&gt;
&lt;br /&gt;
For example, to generate water for the area around Edinburgh:&lt;br /&gt;
 ./scripts/genwaterraster.py --bbox 55 -4 56 -3&lt;br /&gt;
&lt;br /&gt;
Inside the ./output/vpb directory there should be a set of directories and .png files.&lt;br /&gt;
&lt;br /&gt;
=== Adding roads and railways ===&lt;br /&gt;
The terrain mesh does not have any line features - things like roads.  These are generated separately from OpenStreetMap data.  To generate line features simply run the &amp;lt;code&amp;gt;genroads.py&amp;lt;/code&amp;gt; command:&lt;br /&gt;
&lt;br /&gt;
 Usage: ./scripts/genroads.py [-h] --bbox lat0 lon0 lat1 lon1 [--debug] [--threads THREADS] [--cache-dir CACHE_DIR] [--output-dir OUTPUT_DIR]&lt;br /&gt;
&lt;br /&gt;
 Arguments:&lt;br /&gt;
 --bbox lat0 lon0 lat1 lon1     Bounding box of scenery to be generated&lt;br /&gt;
 --debug                        Debug output&lt;br /&gt;
 --threads THREADS              Number of parallel threads to run. Defaults to 1&lt;br /&gt;
 --cache-dir CACHE_DIR          Directory for OSM data cache. Default /home/flightgear/cache/&lt;br /&gt;
 --output-dir OUTPUT_DIR        Set output directory. Default /home/flightgear/cache/&lt;br /&gt;
&lt;br /&gt;
For example, to generate roads for the area around Edinburgh:&lt;br /&gt;
 ./scripts/genroads.py --bbox 55 -4 56 -3&lt;br /&gt;
&lt;br /&gt;
Inside the ./output/Terrain directory there should be a set of directories and, .STG files text files.&lt;br /&gt;
&lt;br /&gt;
==Running FlightGear with the new WS3.0 Terrain==&lt;br /&gt;
To test the new terrain, simply include the output directory in your scenery path and run FlightGear with the &amp;lt;code&amp;gt;--prop:/scenery/use-vpb=true&amp;lt;/code&amp;gt; to enable WS3.0.&lt;br /&gt;
&lt;br /&gt;
== Advanced Techniques ==&lt;br /&gt;
The following sections describe more complex techniques to generate higher quality WS3.0 terrain.  Almost all of them involve using different data sources to generate a more detailed landclass raster before running the final scenery generation processes described above.  Generating a highly detailed landclass raster is where the magic happens.  &lt;br /&gt;
&lt;br /&gt;
Most techniques use gdal or grass to modify the raster/vector data, typically using the QGIS program.&lt;br /&gt;
&lt;br /&gt;
=== Using a different elevation model ===&lt;br /&gt;
If you are using another elevation model other than NASAEM, then you may need to re-project it using QGIS/gdalwarp to the WGS84 CRS (aka EPSG:4326).  &lt;br /&gt;
&lt;br /&gt;
=== Landclass Data Requirements ===&lt;br /&gt;
For any landclass data we need to ensure the data is in the correct format.  That means:&lt;br /&gt;
&lt;br /&gt;
# Is a Raster (geotiff) rather than Vector data.  This raster will become the texture on the terrain that the terrain shaders do their magic on.&lt;br /&gt;
# Uses the WGS84 Coordinate Reference System.  The ensures that the terrain generation step is efficient.&lt;br /&gt;
# Has the correct landclass values for each terrain type.  We use a set of values based on the CORINE raster set, defined in [https://sourceforge.net/p/flightgear/fgdata/ci/next/tree/Materials/base/landclass-mapping.xml Materials/base/landclass-mapping.xml].&lt;br /&gt;
&lt;br /&gt;
Below is a quick table showing what steps you need to take for common landclass data sources.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Landclass Data&lt;br /&gt;
!Warp to WGS84 required?&lt;br /&gt;
!Landclass re-classification Required?&lt;br /&gt;
!Raster Simplification Required?&lt;br /&gt;
!Conversion to Raster Required?&lt;br /&gt;
|-&lt;br /&gt;
|CORINE Raster&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|-&lt;br /&gt;
|CORINE Vector&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|NLCD&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|-&lt;br /&gt;
|Sentinel-2&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|}&lt;br /&gt;
Conversion to Raster must be done manually.  Converting to WGS84 and the correct landclasses ''can'' be done by the genVPB.py script, but slows down scenery generation.  Therefore if you are planning to generate scenery multiple times it is best to pre-process the files yourself.&lt;br /&gt;
&lt;br /&gt;
The easiest way to do these operations is using QGIS, which is available for most platforms.  If you are scripting a toolchain, the QGIS tools include command-line equivalents for all commands.&lt;br /&gt;
&lt;br /&gt;
When using QGIS, set the Project CRS to WGS84 (aka EPSG:4326).  You can then add layers of Raster or Vector data from files from the &amp;lt;code&amp;gt;Layer-&amp;gt;Add Layer&amp;lt;/code&amp;gt; menu.  When performing any operations, &amp;lt;u&amp;gt;always&amp;lt;/u&amp;gt; write out the data to a real file so you can go back to it later. Disk space is cheap :).&lt;br /&gt;
&lt;br /&gt;
=== Warping Raster Layers to WGS84 ===&lt;br /&gt;
genVPB.py will automatically convert to WGS84 if it detects a landclass raster with a different Coordinate System.  However, you may wish to do so manually instead so all your data is on the same coordinate system.&lt;br /&gt;
&lt;br /&gt;
In QGIS you can warp a raster layer to a different CRS using the Raster-&amp;gt;Projections-Warp (Reproject) tool.  &lt;br /&gt;
&lt;br /&gt;
Select the following options in the dialog:&lt;br /&gt;
&lt;br /&gt;
* Input Layer - Check you have selected the correct layer. The CRS is shown at the right.&lt;br /&gt;
* Target CRS -   set to &amp;lt;code&amp;gt;EPSG:4326 - WGS84&amp;lt;/code&amp;gt;, which should be your project CRS.&lt;br /&gt;
* Resampling Method to Use - Nearest Neighbour.  (Landclass data is not like normal images.  You don't want to interpolate between values.)&lt;br /&gt;
* Nodata value for output bands - 0.0  (This means that any data at the edges will be Ocean, usually a reasonable default)&lt;br /&gt;
* Advanced Parameters - No Compression&lt;br /&gt;
* Output data type - Byte&lt;br /&gt;
* Reprojected - Choose a target filename&lt;br /&gt;
&lt;br /&gt;
Alternatively you can do this step from the commandline.&lt;br /&gt;
 gdalwarp -t_srs EPSG:4326 -dstnodata 0.0 -r near -ot Byte -of GTiff -co COMPRESS=NONE -co BIGTIFF=IF_NEEDED /home/stuart/FlightGear/VPB/data/CORINE/u2018_clc2018_v2020_20u1_raster100m/DATA/U2018_CLC2018_V2020_20u1.tif /home/stuart/FlightGear/VPB/data/scratch/corine_WGS84.tif&lt;br /&gt;
&lt;br /&gt;
=== Warping Vector Layers to WGS84 ===&lt;br /&gt;
genVPB.py will automatically convert to WGS84 if it detects a landclass raster with a different Coordinate System.  However, you may wish to do so manually instead so all your data is on the same coordinate system.  &lt;br /&gt;
&lt;br /&gt;
In QGIS you can warp a vector layer using Vector-&amp;gt;Data Management Tools-&amp;gt;Reproject Layer.  &lt;br /&gt;
&lt;br /&gt;
Set the following options in the dialog:&lt;br /&gt;
&lt;br /&gt;
* Input Layer - Check you have selected the correct layer. The CRS is shown at the right.&lt;br /&gt;
* Target CRS -   set to &amp;lt;code&amp;gt;EPSG:4326 - WGS84&amp;lt;/code&amp;gt;, which should be your project CRS.&lt;br /&gt;
* Reprojected - Choose a target filename&lt;br /&gt;
&lt;br /&gt;
=== Reclassifying Vector Layers ===&lt;br /&gt;
For CORINE vector data in particular, the attributes used in the vector data are not the same as those used by the CORINE Raster data.  So we need to create a new attribute on the data.&lt;br /&gt;
[[File:Field Calculator.png|thumb|QGIS Field Calculator]]&lt;br /&gt;
To do this &lt;br /&gt;
&lt;br /&gt;
* Select &amp;lt;code&amp;gt;Layer-&amp;gt;Open Attribute Table&amp;lt;/code&amp;gt;.  You should see a table with multiple columns.  Each row represents a feature in the data.&lt;br /&gt;
* Click on &amp;lt;code&amp;gt;Toggle Editing Mode&amp;lt;/code&amp;gt; (Ctrl + E), on the top left of the dialog&lt;br /&gt;
* Click on &amp;lt;code&amp;gt;New Field&amp;lt;/code&amp;gt; (Ctrl+W) and create a new field called Landclass of type &amp;quot;Whole Number (Integer)&amp;quot;.  This will create a new column which we will populate with the correct landclass data&lt;br /&gt;
* Click on the &amp;lt;code&amp;gt;Open Field Calculator&amp;lt;/code&amp;gt; button (Ctrl + I).  (If you get an error about only being able to create Virtual fields, go back to the Layer menu, export it and open the exported file).&lt;br /&gt;
* Select the following options:&lt;br /&gt;
** Update Existing Field&lt;br /&gt;
** Select the Landclass field you just created.&lt;br /&gt;
** Copy the contents of https://sourceforge.net/p/flightgear/fgmeta/ci/next/tree/ws30/mappings/corine_vector.txt into the Expression box (without the comment lines starting with &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt;).  This is just some simple code to set the attribute correctly.  The code should be correct for CORINE vector data.  If your data is from other sources you will need to work out how you want to map your source data landclasses to the CORINE ones.  [https://sourceforge.net/p/flightgear/fgdata/ci/next/tree/Materials/base/landclass-mapping.xml Materials/base/landclass-mapping.xml] can be used as a guide.&lt;br /&gt;
* Select &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;.  You should see that your landclass column is now populated with the landclass data.&lt;br /&gt;
* Select &amp;lt;code&amp;gt;Layer-&amp;gt;Save Layer Edits&amp;lt;/code&amp;gt; to save you changes&lt;br /&gt;
&lt;br /&gt;
=== Creating a Raster from a Vector Layer ===&lt;br /&gt;
To create a Raster from a Vector Layer select &amp;lt;code&amp;gt;Raster-&amp;gt;Conversion-&amp;gt;Rasterize (Vector to Raster)&amp;lt;/code&amp;gt;.  &lt;br /&gt;
[[File:QGIS Rasterize (Vector to Raster).png|thumb|Creating a Raster from a Vector Layer - QGIS Rasterize]]&lt;br /&gt;
Select the following options:&lt;br /&gt;
&lt;br /&gt;
* Input Layer - correct layer, check CRS&lt;br /&gt;
* Field to use for burn-in value - select the &amp;lt;code&amp;gt;Landclass&amp;lt;/code&amp;gt; column you created above.&lt;br /&gt;
* Output raster size units.  This is going to set the resolution of your raster.  You can work out the resolution in two different ways:&lt;br /&gt;
** Select &amp;quot;Georeferenced units&amp;quot; and determine how many degrees each pixel is in latitude and longitude.&lt;br /&gt;
** Select &amp;quot;Pixels&amp;quot; and determine the size of raster you want in pixels.  [https://www.nhc.noaa.gov/gccalc.shtml This] is a good calculator to help. You input e.g. SE and SW coordinates and calculate to get the distance in Km. Then you multiply by thousand and devide by the number of metres per pixel (e.g. 5) -&amp;gt; resolution for width.&lt;br /&gt;
* Width/Horizontal Resolution. Enter the values you've calculated for the horizontal resolution (longitudinal), or the width of the raster&lt;br /&gt;
* Height/Vertical Resolution. Enter the values you've calculated for the vertical resolution (latitude or the height of the raster)&lt;br /&gt;
* Output extent - Select an option from the box on the right. You can edit the text afterwards (NB: East, West, South, North). Best practise is to create long thin strips of 1 degree latitude in height, as this makes subsequent processing much easier.&lt;br /&gt;
* Assign a specific nodata value to output bands - Select 0.0 for Ocean.  CORINE vector data in particular has a lot of nodata for Oceans&lt;br /&gt;
* Advanced Parameters - No Compression&lt;br /&gt;
* Output data type - Byte&lt;br /&gt;
* Rasterized - Select a new filename&lt;br /&gt;
&lt;br /&gt;
=== Simplifying a Raster Layer ===&lt;br /&gt;
Some Raster Landclass data (NLCD included) has too much noise - in particular large US highway systems are identified as Urban areas.&lt;br /&gt;
&lt;br /&gt;
To smooth it out we can use the GRASS &amp;lt;code&amp;gt;n.neighbors&amp;lt;/code&amp;gt; function from the Processing Toolbox in QGIS.&lt;br /&gt;
&lt;br /&gt;
Select the following options:&lt;br /&gt;
&lt;br /&gt;
* Input Layer - correct layer, check CRS&lt;br /&gt;
* Neighborhood operation - median.  (This is not a normal image, so using an average will result in weird values)&lt;br /&gt;
* Neighborhood size - 5.&lt;br /&gt;
* Neighbors - Select a new filename.&lt;br /&gt;
&lt;br /&gt;
=== Clipping a Raster Layer with OSM Data for Land (Corine) ===&lt;br /&gt;
The Corine dataset does not match OSM coastlines exactly. The following multi-stage process makes sure, that no Corine land-use is in the water as defined by OSM. &lt;br /&gt;
&lt;br /&gt;
==== Download OSM Land Data ====&lt;br /&gt;
&lt;br /&gt;
Download land polygons based on OSM data as a Shapefile from [https://osmdata.openstreetmap.de/data/land-polygons.html Land Polygons] and make sure to pick the WGS84 projected download with split polygons (&amp;quot;Large polygons are split, use for larger scales&amp;quot;). Once downloaded unzip the content into a directory.&lt;br /&gt;
&lt;br /&gt;
==== Reclassifying the OSM Land Data Vector Layer ====&lt;br /&gt;
I QGIS make sure that only the layer for the raster for land data is selected (e.g. &amp;lt;code&amp;gt;land-polygons-split-4326&amp;lt;/code&amp;gt;) -&amp;gt; in the map view you will see the whole earth. NB: typically you do this reclassify only once after download and can reuse the result for future processing.&lt;br /&gt;
&lt;br /&gt;
Then: &lt;br /&gt;
&lt;br /&gt;
* Select &amp;lt;code&amp;gt;Layer-&amp;gt;Open Attribute Table&amp;lt;/code&amp;gt;. You should see a table with multiple columns. Each row represents a feature in the data.&lt;br /&gt;
* Click on &amp;lt;code&amp;gt;Toggle Editing Mode&amp;lt;/code&amp;gt; (Ctrl + E), on the top left of the dialogue&lt;br /&gt;
* Click on &amp;lt;code&amp;gt;New Field&amp;lt;/code&amp;gt; (Ctrl+W) and create a new field called Landclass of type &amp;lt;code&amp;gt;Integer (32 bit)&amp;lt;/code&amp;gt;. This will create a new column which we will populate with the correct land class data&lt;br /&gt;
* On top of the table on the left side choose &amp;quot;Landclass&amp;quot; in the drop-down menu, then input &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; into the field to the right and then press button &amp;quot;Update&amp;quot; all to the left of this field.&lt;br /&gt;
* Wait a bit and the close the dialogue.&lt;br /&gt;
* Select &amp;lt;code&amp;gt;Layer-&amp;gt;Save Layer Edits&amp;lt;/code&amp;gt; to save your changes (overwrite e.g. &amp;lt;code&amp;gt;land-polygons-split-4326&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
==== Convert the Land Data from Vector to Raster ====&lt;br /&gt;
Do the same as in chapter &amp;quot;Creating a Raster from a Vector Layer&amp;quot; above. The only difference is that the Input layer will be the land data polygons and you need to choose a different file name for the &amp;quot;Rasterized&amp;quot; (e.g. osm_land_scotland_5m.tif)&lt;br /&gt;
&lt;br /&gt;
==== Remove Novalue Entries in the Land Data Raster ====&lt;br /&gt;
To do this:&lt;br /&gt;
&lt;br /&gt;
* Select &amp;lt;code&amp;gt;Processing-&amp;gt;Toolbox&amp;lt;/code&amp;gt;. You should see a new box on the right side.&lt;br /&gt;
* Write &amp;quot;gdal_calc&amp;quot; in the search box and you should see an entry &amp;quot;Raster calculator&amp;quot;. Double click on it and you will get a new dialogue window.&lt;br /&gt;
* In this dialogue:&lt;br /&gt;
** For &amp;quot;Input layer A&amp;quot; choose the raster from the previous chapter ((e.g. osm_land_scotland_5m.tif)&lt;br /&gt;
** In field &amp;quot;Calculation in gdalnumeric ...&amp;quot; write: &amp;lt;code&amp;gt;greater(A,0) * A&amp;lt;/code&amp;gt;&lt;br /&gt;
** In field &amp;quot;Output raster type&amp;quot; choose &amp;lt;code&amp;gt;Byte&amp;lt;/code&amp;gt;&lt;br /&gt;
** In field &amp;quot;Advanced Parameters&amp;quot; choose Profile &amp;lt;code&amp;gt;No compression&amp;lt;/code&amp;gt;&lt;br /&gt;
** In field &amp;quot;Additional command-line parameters&amp;quot; write: &amp;lt;code&amp;gt;--hideNoData&amp;lt;/code&amp;gt;&lt;br /&gt;
** In field &amp;quot;Calculated&amp;quot; choose a file (e.g. osm_land_scotland_allvalues_5m.tif)&lt;br /&gt;
** (In the &amp;quot;GDAL/OGR console call&amp;quot; it will have something similar to the follwing - just with different paths: &amp;lt;code&amp;gt;gdal_calc.py --overwrite --calc &amp;quot;greater(A ,0) * A&amp;quot; --format GTiff --type Byte -A /home/vanosten/custom-fg-scenery/data/osm_land_scotland_5m.tif --A_band 1 --co COMPRESS=NONE --co BIGTIFF=IF_NEEDED --hideNoData --outfile /home/vanosten/custom-fg-scenery/data/osm_land_scotland_allvalues_5m.tif&amp;lt;/code&amp;gt;&lt;br /&gt;
** Press the &amp;quot;Run&amp;quot; button - and when complete close the dialogue.&lt;br /&gt;
&lt;br /&gt;
You should now see a map only black and white. You can check for correctness by pressing &amp;lt;code&amp;gt;CTRL+SHIFT+I&amp;lt;/code&amp;gt; to get a cursor with an arrow and an &amp;quot;i&amp;quot;. First make sure the new raster is selected on the left side. Next click on the sea/ocean and then check in the &amp;quot;Identify Results&amp;quot; window on the right that the value is &amp;lt; 2. The click on the land and check that the value is 2.&lt;br /&gt;
&lt;br /&gt;
==== Create the Final Clipped Corine Raster Against OSM Land Data =====&lt;br /&gt;
Do the following:&lt;br /&gt;
&lt;br /&gt;
* In QGIS make sure that you have only the following two layers: the basis Corine raster (see chapter &amp;quot;Creating a Raster from a Vector Layer&amp;quot; - here e.g. corine_raster_scotland_5m.tif) and plus the raster from the previous step (e.g. osm_land_scotland_allvalues_5m.tif)&lt;br /&gt;
* Select &amp;lt;code&amp;gt;Raster-&amp;gt;Raster Calculator ...&amp;lt;/code&amp;gt; and a corresponding dialogue will open showing on the left hand side the two rasters.&lt;br /&gt;
* Choose a new &amp;quot;Output layer&amp;quot; (e.g. corine_raster_scotland_clipped_5m.tif).&lt;br /&gt;
* In the &amp;quot;Raster Calculator Expression&amp;quot; field input: &amp;lt;code&amp;gt;if (&amp;quot;osm_land_scotland_all_data_5m@1&amp;quot; &amp;lt; 2, 44, &amp;quot;corine_raster_scotland_5m@1&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* Press button &amp;quot;OK&amp;quot; and wait a while (you will see a new dialogue with showing the progress.&lt;br /&gt;
&lt;br /&gt;
Done. You have now a raster (e.g. corine_raster_scotland_clipped_5m.tif) which does not have land in areas, where OSM data has sea/ocean.&lt;br /&gt;
&lt;br /&gt;
=== Reclassifying a Raster Layer ===&lt;br /&gt;
WS3.0 uses CORINE landclass values.  If using data from other sources it needs to be reclassified to the correct values.  genVPB.py has an option to do this, but you may wish to do so manually.  &lt;br /&gt;
&lt;br /&gt;
To do this select &amp;lt;code&amp;gt;GRASS-&amp;gt;Raster-&amp;gt;r.reclass&amp;lt;/code&amp;gt; from the Processing Toolbox.&lt;br /&gt;
&lt;br /&gt;
Select the following options:&lt;br /&gt;
&lt;br /&gt;
* Input Raster Layer - correct layer, check CRS&lt;br /&gt;
* Reclass rules text - copy in the contents of https://sourceforge.net/p/flightgear/fgmeta/ci/next/tree/ws30/mappings/nlcd2019.txt.  Or an appropriate mapping from your landclass data to CORINE.  Note that you can also reference a file using the &amp;quot;File containing reclass rules&amp;quot; option. Note a mapping of 22 24 = 1 is the same as 22 and 24 = 1. For a range of 22 to 24 use 22 23 24 = 1.&lt;br /&gt;
* Reclassified - Select a new filename.&lt;br /&gt;
&lt;br /&gt;
(If this doesn't work a similar function is available in the Processing Toolbox under &amp;lt;code&amp;gt;Raster analysis-&amp;gt;Reclassify by table&amp;lt;/code&amp;gt;.  However this doesn't save your table once you close the dialog, and entries have to be manually entered individually which takes a lot of effort)&lt;br /&gt;
&lt;br /&gt;
=== Step By Step Procedure for Processing NLCD for the USA using the Raster Calculator, Up sampling and GRASS r.neighbors===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE: This &amp;quot;raster calculator&amp;quot; process or method is considered suboptimal to the Python script method below. The Python script method below has newer smoothing processes. However, this method does contain useful knowledge on how to use the raster calculator. It needs to be updated to match the Python script method.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We will use a predetermined file naming convention throughout this procedure for simplicity. You can use a naming convention of your choice.&lt;br /&gt;
The below python script produces more refined scenery than this method. I left this documentation though as it is a good starting point and has examples of how you can manipulate rasters using the calculator. It was the first steps I took to learn how all this stuff works. It could be updated to match all the steps used in the python script method.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Obtain your NLCD_2019_Land_Cover from source of choice, https://www.mrlc.gov/viewer/&lt;br /&gt;
&lt;br /&gt;
NLCD_2019_Land_Cover data = NLCD_2019_Land_Cover_California-Southern.tiff&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Obtain your NLCD_2016_Tree_Canopy from source of choice, https://www.mrlc.gov/viewer/ &lt;br /&gt;
&lt;br /&gt;
NLCD_2016_Tree_Canopy data = NLCD_2016_Tree_Canopy_California-Southern.tiff&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make Deciduous Layer 255 to 0 EPSG:5070 - NAD83 - Raster Calculator&lt;br /&gt;
&lt;br /&gt;
(&amp;quot;NLCD_2016_Tree_Canopy_California-Southern@1&amp;quot; = 255) * 0 + (&amp;quot;NLCD_2016_Tree_Canopy_California-Southern@1&amp;quot; != 255) * &amp;quot;NLCD_2016_Tree_Canopy_California-Southern@1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Output CRS = EPSG:5070 - NAD83&lt;br /&gt;
&lt;br /&gt;
Output Layer = California-Southern_deciduous-coast-clipped.tiff&lt;br /&gt;
&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make Tree Canopy Layer EPSG:5070 - NAD83 - Raster Calculator&lt;br /&gt;
&lt;br /&gt;
Use the prevailing tree type, for Deciduous use * 41, for Evergreen use  * 42, for MixedForest use 43.&lt;br /&gt;
&lt;br /&gt;
Later we add this Tree Canopy layer to the raster where there is currently no trees in the NLCD&lt;br /&gt;
&lt;br /&gt;
If ocean bordering with index 255 - &lt;br /&gt;
&lt;br /&gt;
(&amp;quot;California-Southern_deciduous-coast-clipped@1&amp;quot; != 0) * 42&lt;br /&gt;
&lt;br /&gt;
Else&lt;br /&gt;
&lt;br /&gt;
(&amp;quot;NLCD_2016_Tree_Canopy_California-Southern@1&amp;quot; != 0) * 42&lt;br /&gt;
&lt;br /&gt;
Output CRS = EPSG:5070 - NAD83&lt;br /&gt;
&lt;br /&gt;
Output Layer = California-Southern_deciduous.tiff&lt;br /&gt;
&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make Clipped Ocean Frontage EPSG:5070 - NAD83 - GIMP&lt;br /&gt;
&lt;br /&gt;
Source = NLCD_2019_Land_Cover_California-Southern.tiff&lt;br /&gt;
&lt;br /&gt;
Flood fill index 11 (blue) with 0 (black)&lt;br /&gt;
&lt;br /&gt;
Export tiff =  California-Southern_coast-clipped.tiff&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Warp NLCD Deciduous and Base NLCD from EPSG:5070 - NAD83 / Conus Albers NLCD to Project CRS: EPSG:4326 - WGS 84 - WARP&lt;br /&gt;
&lt;br /&gt;
If ocean bordering with index 255&lt;br /&gt;
&lt;br /&gt;
Warp California-Southern_coast-clipped.tiff&lt;br /&gt;
&lt;br /&gt;
Else&lt;br /&gt;
&lt;br /&gt;
Warp NLCD_2016_Tree_Canopy_California-Southern.tiff&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
&lt;br /&gt;
Warp Deciduous NLCD from EPSG:5070 - NAD83 / Conus Albers NLCD to Project CRS: EPSG:4326 - WGS 84&lt;br /&gt;
&lt;br /&gt;
Warp California-Southern_deciduous.tiff&lt;br /&gt;
&lt;br /&gt;
Raster -&amp;gt; Projection - &amp;gt; Warp&lt;br /&gt;
&lt;br /&gt;
Target CRS = EPSG:4326 - WGS 84&lt;br /&gt;
&lt;br /&gt;
Resampling method to use = Nearest Neighbour&lt;br /&gt;
&lt;br /&gt;
Output data type = byte&lt;br /&gt;
&lt;br /&gt;
Reprojected = California-Southern_4326-84.tiff and California-Southern_deciduous_4326-84.tiff&lt;br /&gt;
&lt;br /&gt;
Run&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Combine &amp;quot;California-Southern_deciduous_4326-84.@1&amp;quot; and &amp;quot;California-Southern_4326-84@1&amp;quot; - Raster Calculator&lt;br /&gt;
&lt;br /&gt;
This step adds the Tree Canopy layer to the existing NLCD raster only where there is currently no existing tree land cover.&lt;br /&gt;
&lt;br /&gt;
((&amp;quot;California-Southern_4326-84@1&amp;quot; &amp;gt; 0 AND &amp;quot;California-Southern_4326-84@1&amp;quot; != 41 AND &amp;quot;California-Southern_4326-84@1&amp;quot; != 42 AND &amp;quot;California-Southern_4326-84@1&amp;quot; != 43) AND &amp;quot;California-Southern_deciduous_4326-84@1&amp;quot; &amp;gt; 0) * &amp;quot;California-Southern_deciduous_4326-84@1&amp;quot; + (&amp;quot;California-Southern_4326-84@1&amp;quot; = 41 OR &amp;quot;California-Southern_4326-84@1&amp;quot; = 42 OR &amp;quot;California-Southern_4326-84@1&amp;quot; = 43 OR &amp;quot;California-Southern_deciduous_4326-84@1&amp;quot; &amp;lt;= 0) * &amp;quot;California-Southern_4326-84@1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Output CRS = EPSG:4326 - WGS 84&lt;br /&gt;
&lt;br /&gt;
Output Layer = California-Southern_adjusted.tiff&lt;br /&gt;
&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Re-class urban 21, 22, 23, 24 = grass 26 - Raster Calculator&lt;br /&gt;
&lt;br /&gt;
This step is being used to erase all the man made clutter on the raster with grassland. Instead of grassland you can replace it with any type of prevailing groundcover in the area your processing.&lt;br /&gt;
&lt;br /&gt;
For example this places a road easement of grass on all the road clutter that was originally in the raster. If your processing a desert area you might want to use dirt or sand instead of grassland. For Arctic areas maybe use tundra.&lt;br /&gt;
&lt;br /&gt;
Part of the clutter gets replaced later in the process.&lt;br /&gt;
&lt;br /&gt;
(&amp;quot;California-Southern_adjusted@1&amp;quot; = 11) * 41 + (&amp;quot;California-Southern_adjusted@1&amp;quot; = 12) * 34 + (&amp;quot;California-Southern_adjusted@1&amp;quot; = 21) * 26 + (&amp;quot;California-Southern_adjusted@1&amp;quot; = 22) * 26 + (&amp;quot;California-Southern_adjusted@1&amp;quot; = 23) * 26 + (&amp;quot;California-Southern_adjusted@1&amp;quot; = 24) * 26 + (&amp;quot;California-Southern_adjusted@1&amp;quot; = 31) * 27 + (&amp;quot;California-Southern_adjusted@1&amp;quot; = 41) * 26 + (&amp;quot;California-Southern_adjusted@1&amp;quot; = 42) * 24 + (&amp;quot;California-Southern_adjusted@1&amp;quot; = 43) * 25 + (&amp;quot;California-Southern_adjusted@1&amp;quot; = 51) * 30 + (&amp;quot;California-Southern_adjusted@1&amp;quot; = 52) * 29 + (&amp;quot;California-Southern_adjusted@1&amp;quot; = 71) * 26 + (&amp;quot;California-Southern_adjusted@1&amp;quot; = 72) * 32 + (&amp;quot;California-Southern_adjusted@1&amp;quot; = 73) * 31 + (&amp;quot;California-Southern_adjusted@1&amp;quot; = 74) * 31 + (&amp;quot;California-Southern_adjusted@1&amp;quot; = 75) * 32 + (&amp;quot;California-Southern_adjusted@1&amp;quot; = 81) * 18 + (&amp;quot;California-Southern_adjusted@1&amp;quot; = 82) * 19 + (&amp;quot;California-Southern_adjusted@1&amp;quot; = 90) * 25 + (&amp;quot;California-Southern_adjusted@1&amp;quot; = 95) * 35&lt;br /&gt;
&lt;br /&gt;
Output CRS = EPSG:4326 - WGS 84&lt;br /&gt;
&lt;br /&gt;
Output Layer = California-Southern_reclass-grass.tiff&lt;br /&gt;
&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make Urban layer&lt;br /&gt;
&lt;br /&gt;
(&amp;quot;California-Southern_adjusted@1&amp;quot; = 21) * 10 + (&amp;quot;California-Southern_adjusted@1&amp;quot; = 22) * 1 + (&amp;quot;California-Southern_adjusted@1&amp;quot; = 23) * 1 + (&amp;quot;California-Southern_adjusted@1&amp;quot; = 24) * 2&lt;br /&gt;
&lt;br /&gt;
Output CRS = EPSG:4326 - WGS 84&lt;br /&gt;
&lt;br /&gt;
Output Layer = California-Southern_urban.tiff&lt;br /&gt;
&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Remove the road clutter with r.neighbor&lt;br /&gt;
&lt;br /&gt;
GRASS/Raster/r.neighbor&lt;br /&gt;
&lt;br /&gt;
Neighborhood operation = median&lt;br /&gt;
&lt;br /&gt;
Neighborhood size = 7&lt;br /&gt;
&lt;br /&gt;
Neighbors = California-Southern_urban-only.tiff&lt;br /&gt;
&lt;br /&gt;
Run&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Combine &amp;quot;California-Southern_reclass-urban@1&amp;quot; and &amp;quot;California-Southern_reclass-grass@1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This step replaces the &amp;quot;cleaned up&amp;quot; urban areas back into the raster.&lt;br /&gt;
&lt;br /&gt;
(&amp;quot;California-Southern_urban-only@1&amp;quot; &amp;lt; 1) * &amp;quot;California-Southern_reclass-grass@1&amp;quot; + (&amp;quot;California-Southern_urban-only@1&amp;quot; != 0) * &amp;quot;California-Southern_urban-only@1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Output CRS = EPSG:4326 - WGS 84&lt;br /&gt;
&lt;br /&gt;
Output Layer = California-Southern_adjusted-combined.tiff&lt;br /&gt;
&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Up sample California-Southern_adjusted-combined.tiff 2x, 4x or 8x resolution 0.00008309125&lt;br /&gt;
&lt;br /&gt;
Active Layer = California-Southern_adjusted-combined.tiff&lt;br /&gt;
&lt;br /&gt;
Layer/Save As&lt;br /&gt;
&lt;br /&gt;
2x Horizontal = 0.00008309125&lt;br /&gt;
&lt;br /&gt;
2x Vertical = 0.00008309125&lt;br /&gt;
&lt;br /&gt;
4x Horizontal = 0.00010637625&lt;br /&gt;
&lt;br /&gt;
4x Vertical = 0.00010637625&lt;br /&gt;
&lt;br /&gt;
8x Horizontal = 0.00005318812&lt;br /&gt;
&lt;br /&gt;
8x Vertical = 0.00005318812&lt;br /&gt;
&lt;br /&gt;
File Name = California-Southern_final-prep-4x.tiff&lt;br /&gt;
&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Simplify California-Southern_4326-84-hd.tiff with r.neighbor&lt;br /&gt;
&lt;br /&gt;
GRASS/Raster/r.neighbor&lt;br /&gt;
&lt;br /&gt;
Neighborhood operation = median&lt;br /&gt;
&lt;br /&gt;
Neighborhood size = 7&lt;br /&gt;
&lt;br /&gt;
Neighbors = California-Southern_urban-only.tiff&lt;br /&gt;
&lt;br /&gt;
Run&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reclass index 0 to 44, leave the rest the same&lt;br /&gt;
&lt;br /&gt;
(&amp;quot;California-Southern_4326-84-hd@1&amp;quot; = 0) * 44 + (&amp;quot;California-Southern_4326-84-hd@1&amp;quot; != 0) * &amp;quot;California-Southern_4326-84-hd@1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Output CRS = EPSG:4326 - WGS 84&lt;br /&gt;
&lt;br /&gt;
Output Layer = California-Southern_4326-84-hd-corrected.tiff&lt;br /&gt;
&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;Optional HD Fresh Water Option&amp;lt;/big&amp;gt; &lt;br /&gt;
*Step 1 - Obtain and load hi resolution vector layer&lt;br /&gt;
Make sure that the vector layer and the raster layer you will eventually merge to have the same projection. ** Extent can be different if you use the option below.&lt;br /&gt;
#Use Top Menu: &amp;quot;Raster&amp;quot; -&amp;gt; &amp;quot;Conversion&amp;quot; -&amp;gt; &amp;quot;Rasterize (vector to raster)&amp;quot; or Processing Toolbox: GDAL -&amp;gt; &amp;quot;Vector conversion&amp;quot; -&amp;gt; &amp;quot;Rasterize (vector to raster)&amp;quot;&lt;br /&gt;
# Input layer = Southern-California_water_4326-84&lt;br /&gt;
#Fixed value to burn = 41 (water)&lt;br /&gt;
# Output raster size units = &amp;quot;Georeferenced units&amp;quot;&lt;br /&gt;
#Width/Horizontal resolution = 0.00008309125 (4x the base NLCD resolution )&lt;br /&gt;
#Height/Vertical resolution = 0.00008309125 (4x the base NLCD resolution)&lt;br /&gt;
#&amp;lt;nowiki&amp;gt;** Output extent = Select the raster layer you will eventually merge with as the &amp;quot;Output extent&amp;quot;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
#Under &amp;quot;Rasterized&amp;quot; choose a new filename to save the new raster to. We'll use Southern-California_4326-84-hd-water.tiff.&lt;br /&gt;
&lt;br /&gt;
    Click &amp;quot;Run&amp;quot; to generate the hi resolution raster layer.&lt;br /&gt;
&lt;br /&gt;
*Step 2 - Reclass hi res, smoothed water to grass&lt;br /&gt;
# Open Raster Calculator&lt;br /&gt;
#Under &amp;quot;Output layer&amp;quot; choose a new filename to save the new raster to. We'll use Southern-California_4326-84-hd-nowater.tiff.&lt;br /&gt;
#Copy the following into the &amp;quot;Raster Calculator Expression&amp;quot; box. Where Southern-California_4326-84-hd is the name of your hi resolution, smoothed NLCD that includes the water data.&lt;br /&gt;
&amp;quot;Southern-California_4326-84-hd@1&amp;quot; * (&amp;quot;Southern-California_4326-84-hd@1&amp;quot; != 41) + 26 * (&amp;quot;Southern-California_4326-84-hd@1 = 41&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    Click on &amp;quot;OK&amp;quot;. When finished you will have a new raster with the water layer changed to grassland. Another choice would be to change it to sand. &lt;br /&gt;
&lt;br /&gt;
*Step 3 - Combine the hi resolution no water raster and the hi resolution water raster.&lt;br /&gt;
# Use Top Menu: &amp;quot;Raster&amp;quot; -&amp;gt; &amp;quot;Miscellaneous&amp;quot; -&amp;gt; &amp;quot;Merge&amp;quot; or Processing Toolbax: GDAL -&amp;gt; Raster Miscellaneous -&amp;gt; Merge&lt;br /&gt;
#Input layers = Select &amp;quot;Southern-California_4326-84-hd-nowater@1&amp;quot; and Southern-California_4326-84-hd-water.tiff&lt;br /&gt;
#Output data type = &amp;quot;byte&amp;quot;.&lt;br /&gt;
# Under &amp;quot;Merged&amp;quot; choose a new filename to save the new raster to. We'll use Southern-California_4326-84-hdwater.tiff.&lt;br /&gt;
&lt;br /&gt;
    Click &amp;quot;Run&amp;quot; to generate the new merged hi resolution raster layer.&lt;br /&gt;
&lt;br /&gt;
=== Optional Python script to process NLCD for the USA ===&lt;br /&gt;
You can optionally process the NLCD by loading this script in the python console of the QGIS Desktop program.&lt;br /&gt;
This python script method produces more refined data than by using the python calculator method above and it is more automated.&lt;br /&gt;
If you run this script outside the python console you will need to modify it to locate the data you are processing.&lt;br /&gt;
If you save the NLCD tiff's using the same consistent naming convention used in this example it is fairly simple to generate final WS3.0 tiff's to use to generate the scenery.&lt;br /&gt;
&lt;br /&gt;
You will start with an original tree layer and a land cover layer from the MRLC.gov site. See the section &amp;quot;Obtaining NLCD&amp;quot; in the above &amp;quot;Step By Step Procedure for Processing NLCD for the USA using the Raster Calculator&amp;quot; topic.&lt;br /&gt;
&lt;br /&gt;
For example, to start with you will have a couple files named...&lt;br /&gt;
&lt;br /&gt;
NLCD_2016_Tree_Canopy_Alaska141-140_60.tiff&lt;br /&gt;
&lt;br /&gt;
NLCD_2016_Land_Cover_Alaska141-140_60.tiff&lt;br /&gt;
&lt;br /&gt;
In the QGIS program the layer names you start with will be...&lt;br /&gt;
&lt;br /&gt;
NLCD_2016_Tree_Canopy_Alaska141-140_60&lt;br /&gt;
&lt;br /&gt;
NLCD_2016_Land_Cover_Alaska141-140_60&lt;br /&gt;
&lt;br /&gt;
which will refer to the tiff files.&lt;br /&gt;
&lt;br /&gt;
Running this script will generate a bunch of intermediate files including the last file, that will be the final finished file for running in the VPB script or VPB build environment Docker image.&lt;br /&gt;
&lt;br /&gt;
The last file for this example for New York would be, NLCD_2016_Alaska141-140_60_Smoothed-HD-Compressed_4326.tiff&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from qgis.core import QgsApplication, QgsCoordinateTransform, QgsProject, QgsRasterLayer, QgsCoordinateReferenceSystem, QgsProcessingException, QgsRasterBlock, QgsRectangle&lt;br /&gt;
from qgis.analysis import QgsRasterCalculator, QgsRasterCalculatorEntry&lt;br /&gt;
from qgis import processing&lt;br /&gt;
from processing.core.Processing import Processing&lt;br /&gt;
from osgeo import gdal, osr, ogr&lt;br /&gt;
import os&lt;br /&gt;
import numpy&lt;br /&gt;
import numpy as np&lt;br /&gt;
import subprocess&lt;br /&gt;
&lt;br /&gt;
# Define input layer names, change according to your file names&lt;br /&gt;
path = 'G:/Scenery/ws3.0/';&lt;br /&gt;
year = '2016';&lt;br /&gt;
state = 'Alaska';&lt;br /&gt;
part = '141-140_60';&lt;br /&gt;
&lt;br /&gt;
################################## IMPORTANT ###############################&lt;br /&gt;
# Beginning filename of the NLCD from the source needs to be&lt;br /&gt;
# NLCD_' + year +  '_Tree_Canopy_' + state + part + '.tiff'&lt;br /&gt;
# Also note that &amp;quot;/data/&amp;quot; is hardcoded into the path as well&lt;br /&gt;
# I needed the existing path structure to process it by state.&lt;br /&gt;
# For Alaska I used one lat and a few lon sections per chunck built.&lt;br /&gt;
# I will likly do the entire NLCD coverage area the same in future runs.&lt;br /&gt;
# Example beginning NLCD source:&lt;br /&gt;
# NLCD_2016_Tree_Canopy_Alaska141-140_60.tiff&lt;br /&gt;
# Full path and filename to source example is:&lt;br /&gt;
# G:/Scenery/ws3.0/Alaska/data/NLCD_2016_Tree_Canopy_Alaska141-140_60.tiff&lt;br /&gt;
# Final output path to last processed file is:&lt;br /&gt;
# G:/Scenery/ws3.0/Alaska/data/NLCD_2016_Alaska141-140_60_Smoothed-HD-Compressed_4326&lt;br /&gt;
&lt;br /&gt;
#IMPORTANT NOTE:&lt;br /&gt;
# On any subprocess.run(command, shell=True) process, when using the script in Linux&lt;br /&gt;
# you need to change to subprocess.run(command). Remove the shell=True.&lt;br /&gt;
&lt;br /&gt;
#You can try using the following syntax for both Windows and Linux&lt;br /&gt;
#subprocess.run([&lt;br /&gt;
#    'gdal_calc.py',&lt;br /&gt;
#    '-A', input_path,&lt;br /&gt;
#    '--outfile', output_path,&lt;br /&gt;
#    '--calc', expression,&lt;br /&gt;
#    '--type', 'Byte'&lt;br /&gt;
#], check=True)&lt;br /&gt;
############################################################################&lt;br /&gt;
&lt;br /&gt;
################################################## Step 1: Reclass tree canopy to one landcover type 41, 42, or 43 #########################################&lt;br /&gt;
#FG                     NLCD&lt;br /&gt;
#23 DeciduousBroadCover 41&lt;br /&gt;
#24 EvergreenForest     42&lt;br /&gt;
#25 MixedForest         43&lt;br /&gt;
&lt;br /&gt;
# Define input and output paths&lt;br /&gt;
input_path = path + state + '/data/NLCD_' + year +  '_Tree_Canopy_' + state + part + '.tiff'&lt;br /&gt;
output_path = path + state + '/data/NLCD_' + year +  '_' + state + part + '_Trees-Combined.tiff'&lt;br /&gt;
&lt;br /&gt;
expression = (&lt;br /&gt;
    '((A &amp;gt; 0) &amp;amp; (A &amp;lt; 255)) * 43 + '&lt;br /&gt;
    '(A &amp;lt;= 0) * A'&lt;br /&gt;
)&lt;br /&gt;
command = [&lt;br /&gt;
    'gdal_calc.py',&lt;br /&gt;
    '-A', input_path,&lt;br /&gt;
    '--outfile', output_path,&lt;br /&gt;
    '--calc', expression,&lt;br /&gt;
    '--type', 'Byte'&lt;br /&gt;
]&lt;br /&gt;
subprocess.run(command, shell=True)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Step 1: Calculate result_tree_canopy completed. (NLCD_&amp;quot; + year +  &amp;quot;_&amp;quot; + state + part + &amp;quot;_Trees-Combined)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
############################################################# Step 2: Warp tree canopy to 4326 #############################################################&lt;br /&gt;
&lt;br /&gt;
input_path = path + state + '/data/NLCD_' + year +  '_' + state + part + '_Trees-Combined.tiff'&lt;br /&gt;
output_path = path + state + '/data/NLCD_' + year +  '_' + state + part + '_Tree_Canopy_4326.tiff'&lt;br /&gt;
&lt;br /&gt;
processing.run(&lt;br /&gt;
    &amp;quot;gdal:warpreproject&amp;quot;,&lt;br /&gt;
    {&lt;br /&gt;
        'INPUT':input_path,&lt;br /&gt;
        'SOURCE_CRS':None,&lt;br /&gt;
        'TARGET_CRS':QgsCoordinateReferenceSystem('EPSG:4326'),&lt;br /&gt;
        'RESAMPLING':0,&lt;br /&gt;
        'NODATA':None,&lt;br /&gt;
        'TARGET_RESOLUTION':None,&lt;br /&gt;
        'OPTIONS':'',&lt;br /&gt;
        'DATA_TYPE':1,  # GDAL GDT_Byte&lt;br /&gt;
        'TARGET_EXTENT':None,&lt;br /&gt;
        'TARGET_EXTENT_CRS':None,&lt;br /&gt;
        'MULTITHREADING':False,&lt;br /&gt;
        'EXTRA':'',&lt;br /&gt;
        'OUTPUT':output_path&lt;br /&gt;
    }&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Step 2: Warp tree_canopy completed. (NLCD_&amp;quot; + year +  &amp;quot;_&amp;quot; + state + part + &amp;quot;_Tree_Canopy_4326)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
################################################################### Step 3: Warp land cover 4326 ############################################################&lt;br /&gt;
&lt;br /&gt;
input_path = path + state + '/data/NLCD_' + year +  '_Land_Cover_' + state + part + '.tiff'&lt;br /&gt;
output_path = path + state + '/data/NLCD_' + year +  '_' + state + part + '_Land_Cover_4326.tiff'&lt;br /&gt;
&lt;br /&gt;
processing.run(&lt;br /&gt;
    &amp;quot;gdal:warpreproject&amp;quot;,&lt;br /&gt;
    {&lt;br /&gt;
        'INPUT':input_path,&lt;br /&gt;
        'SOURCE_CRS':None,&lt;br /&gt;
        'TARGET_CRS':QgsCoordinateReferenceSystem('EPSG:4326'),&lt;br /&gt;
        'RESAMPLING':0,&lt;br /&gt;
        'NODATA':None,&lt;br /&gt;
        'TARGET_RESOLUTION':None,&lt;br /&gt;
        'OPTIONS':'',&lt;br /&gt;
        'DATA_TYPE':1,  # GDAL GDT_Byte&lt;br /&gt;
        'TARGET_EXTENT':None,&lt;br /&gt;
        'TARGET_EXTENT_CRS':None,&lt;br /&gt;
        'MULTITHREADING':False,&lt;br /&gt;
        'EXTRA':'',&lt;br /&gt;
        'OUTPUT':output_path&lt;br /&gt;
    }&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Step 3: Warp land_cover completed. (NLCD_&amp;quot; + year +  &amp;quot;_&amp;quot; + state + part + &amp;quot;_Land_Cover_4326)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
################################################################ Step 4: Combine land cover 4326 and tree canopy 4326######################################&lt;br /&gt;
&lt;br /&gt;
input_path_a = path + state + '/data/NLCD_' + year +  '_' + state + part + '_Tree_Canopy_4326.tiff'&lt;br /&gt;
input_path_b = path + state + '/data/NLCD_' + year +  '_' + state + part + '_Land_Cover_4326.tiff'&lt;br /&gt;
output_path = path + state + '/data/NLCD_' + year +  '_' + state + part + '_Tree_Land_Combined_4326.tiff'&lt;br /&gt;
&lt;br /&gt;
expression = (&lt;br /&gt;
    '(((B &amp;gt; 0) &amp;amp; (B &amp;lt; 255)) &amp;amp; (B != 41) &amp;amp; (B != 42) &amp;amp; (B != 43) &amp;amp; (A &amp;gt; 0)) * A + '&lt;br /&gt;
    '((B == 41) | (B == 42) | (B == 43) | (A &amp;lt;= 0)) * B'&lt;br /&gt;
   )&lt;br /&gt;
command = [&lt;br /&gt;
    'gdal_calc.py',&lt;br /&gt;
    '-A', input_path_a,&lt;br /&gt;
    '-B', input_path_b,&lt;br /&gt;
    '--outfile', output_path,&lt;br /&gt;
    '--calc', expression,&lt;br /&gt;
    '--type', 'Byte'&lt;br /&gt;
]&lt;br /&gt;
subprocess.run(command, shell=True)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Step 4: Combine tree canopy and land cover completed. (NLCD_&amp;quot; + year +  &amp;quot;_&amp;quot; + state + part + &amp;quot;_Tree_Land_Combined_4326)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
############################################################## Step 5: Replace urban and clutter with grass ###################################################&lt;br /&gt;
&lt;br /&gt;
input_path = path + state + '/data/NLCD_' + year +  '_' + state + part + '_Tree_Land_Combined_4326.tiff'&lt;br /&gt;
output_path = path + state + '/data/NLCD_' + year +  '_' + state + part + '_Grass-Only_4326.tiff'&lt;br /&gt;
&lt;br /&gt;
expression = (&lt;br /&gt;
    '(A == 0) * 44 + '&lt;br /&gt;
    '(A == 11) * 44 + '&lt;br /&gt;
    '(A == 12) * 34 + '&lt;br /&gt;
    '(A == 21) * 26 + '&lt;br /&gt;
    '(A == 22) * 26 + '&lt;br /&gt;
    '(A == 23) * 26 + '&lt;br /&gt;
    '(A == 24) * 26 + '&lt;br /&gt;
    '(A == 31) * 27 + '&lt;br /&gt;
    '(A == 41) * 23 + '&lt;br /&gt;
    '(A == 42) * 24 + '&lt;br /&gt;
    '(A == 43) * 25 + '&lt;br /&gt;
    '(A == 51) * 30 + '&lt;br /&gt;
    '(A == 52) * 29 + '&lt;br /&gt;
    '(A == 71) * 26 + '&lt;br /&gt;
    '(A == 72) * 32 + '&lt;br /&gt;
    '(A == 73) * 31 + '&lt;br /&gt;
    '(A == 74) * 31 + '&lt;br /&gt;
    '(A == 75) * 32 + '&lt;br /&gt;
    '(A == 81) * 18 + '&lt;br /&gt;
    '(A == 82) * 19 + '&lt;br /&gt;
    '(A == 90) * 25 + '&lt;br /&gt;
    '(A == 95) * 35'&lt;br /&gt;
)&lt;br /&gt;
command = [&lt;br /&gt;
    'gdal_calc.py',&lt;br /&gt;
    '-A', input_path,&lt;br /&gt;
    '--outfile', output_path,&lt;br /&gt;
    '--calc', expression,&lt;br /&gt;
    '--type', 'Byte'&lt;br /&gt;
]&lt;br /&gt;
subprocess.run(command, shell=True)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Step 5: Replace urban and clutter with grass completed. (NLCD_&amp;quot; + year +  &amp;quot;_&amp;quot; + state + part + &amp;quot;_Grass-Only_4326)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
################################################################## Step 6: Reclass urban 21, 22, 23 or 24 ###########################################################&lt;br /&gt;
&lt;br /&gt;
input_path = path + state + '/data/NLCD_' + year +  '_' + state + part + '_Tree_Land_Combined_4326.tiff'&lt;br /&gt;
output_path = path + state + '/data/NLCD_' + year +  '_' + state + part + '_Reclassed-Urban_4326.tiff'&lt;br /&gt;
&lt;br /&gt;
expression = (&lt;br /&gt;
    '(A == 21)*10 + '&lt;br /&gt;
    '(A == 22)*1 + '&lt;br /&gt;
    '(A == 23)*1 + '&lt;br /&gt;
    '(A == 24)*2'&lt;br /&gt;
)&lt;br /&gt;
command = [&lt;br /&gt;
    'gdal_calc.py',&lt;br /&gt;
    '-A', input_path,&lt;br /&gt;
    '--outfile', output_path,&lt;br /&gt;
    '--calc', expression,&lt;br /&gt;
    '--type', 'Byte'&lt;br /&gt;
]&lt;br /&gt;
subprocess.run(command, shell=True)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Step 6:  Reclass urban completed. (NLCD_&amp;quot; + year +  &amp;quot;_&amp;quot; + state + part + &amp;quot;_Reclassed-Urban_4326)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
################################################################ Step 7: Remove clutter and roads from urban ###########################################################&lt;br /&gt;
&lt;br /&gt;
input_path = path + state + '/data/NLCD_' + year +  '_' + state + part + '_Reclassed-Urban_4326.tiff'&lt;br /&gt;
output_path = path + state + '/data/NLCD_' + year +  '_' + state + part + '_Urban-Only_4326.tiff'&lt;br /&gt;
&lt;br /&gt;
processing.run(&lt;br /&gt;
    &amp;quot;grass7:r.neighbors&amp;quot;,&lt;br /&gt;
    {&lt;br /&gt;
        'input':input_path,&lt;br /&gt;
        'selection':None,&lt;br /&gt;
        'method':1, #1=median, 2=mode&lt;br /&gt;
        'size':7,&lt;br /&gt;
        'gauss':None,&lt;br /&gt;
        'quantile':'',&lt;br /&gt;
        '-c':False,&lt;br /&gt;
        '-a':False,&lt;br /&gt;
        'weight':'',&lt;br /&gt;
        'output':output_path,&lt;br /&gt;
        'GRASS_REGION_PARAMETER':None,&lt;br /&gt;
        'GRASS_REGION_CELLSIZE_PARAMETER':0,&lt;br /&gt;
        'GRASS_RASTER_FORMAT_OPT':'',&lt;br /&gt;
        'GRASS_RASTER_FORMAT_META':''&lt;br /&gt;
    }&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Step 7: Remove clutter and roads from urban. (NLCD_&amp;quot; + year +  &amp;quot;_&amp;quot; + state + part + &amp;quot;_Urban-Only_4326)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
############################################################## Step 8: Combine grass only and clean urban #########################################################&lt;br /&gt;
&lt;br /&gt;
input_path_a = path + state + '/data/NLCD_' + year + '_' + state + part + '_Urban-Only_4326.tiff'&lt;br /&gt;
input_path_b = path + state + '/data/NLCD_' + year + '_' + state + part + '_Grass-Only_4326.tiff'&lt;br /&gt;
output_path = path + state + '/data/NLCD_' + year + '_' + state + part + '_Combined-Clean_4326.tiff'&lt;br /&gt;
&lt;br /&gt;
expression = (&lt;br /&gt;
   '((A &amp;gt; 0) &amp;amp; (B &amp;gt; 0)) * A + '&lt;br /&gt;
   '((A &amp;lt;= 0) | (B &amp;lt;= 0)) * B'&lt;br /&gt;
)&lt;br /&gt;
command = [&lt;br /&gt;
    'gdal_calc.py',&lt;br /&gt;
    '-A', input_path_a,&lt;br /&gt;
    '-B', input_path_b,&lt;br /&gt;
    '--outfile', output_path,&lt;br /&gt;
    '--calc', expression,&lt;br /&gt;
    '--NoDataValue', '0'&lt;br /&gt;
]&lt;br /&gt;
subprocess.run(command, shell=True)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Step 8: Combined and clean completed. (NLCD_&amp;quot; + year +  &amp;quot;_&amp;quot; + state + part + &amp;quot;_Combined-Clean_4326)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
################################################################## Step 9: Upsample to HD #################################################################&lt;br /&gt;
&lt;br /&gt;
input_path = path + state + '/data/NLCD_' + year +  '_' + state + part + '_Combined-Clean_4326.tiff'&lt;br /&gt;
output_path = path + state + '/data/NLCD_' + year +  '_' + state + part + '_Combined-Clean-HD_4326.tiff'&lt;br /&gt;
&lt;br /&gt;
# Open the original raster&lt;br /&gt;
ds = gdal.Open(input_path)&lt;br /&gt;
gt = ds.GetGeoTransform()&lt;br /&gt;
&lt;br /&gt;
# Extract the original resolution&lt;br /&gt;
original_xRes = gt[1]&lt;br /&gt;
original_yRes = abs(gt[5])&lt;br /&gt;
&lt;br /&gt;
# Define the percentage to resize by (e.g., 0.50 for 50%, 2.0 for 200%)&lt;br /&gt;
percentage = 8.0  # Adjust this as needed&lt;br /&gt;
&lt;br /&gt;
# Calculate the new resolution&lt;br /&gt;
new_xRes = original_xRes / percentage&lt;br /&gt;
new_yRes = original_yRes / percentage&lt;br /&gt;
&lt;br /&gt;
# Perform the warp (resampling)&lt;br /&gt;
gdal.Warp(&lt;br /&gt;
    output_path,&lt;br /&gt;
    input_path,&lt;br /&gt;
    xRes=new_xRes,&lt;br /&gt;
    yRes=new_yRes,&lt;br /&gt;
    outputType=gdal.GDT_Byte  # Set the output type to uint8&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Step 9: Upsample to. (NLCD_&amp;quot; + year +  &amp;quot;_&amp;quot; + state + part + &amp;quot;_Combined-Clean-HD_4326)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
################################################################## Step 10: Smooth all features in original dataset #################################################################&lt;br /&gt;
&lt;br /&gt;
input_path = path + state + '/data/NLCD_' + year +  '_' + state + part + '_Combined-Clean-HD_4326.tiff'&lt;br /&gt;
output_path = path + state + '/data/NLCD_' + year +  '_' + state + part + '_Smoothed-HD_4326.tiff'&lt;br /&gt;
&lt;br /&gt;
processing.run(&lt;br /&gt;
    &amp;quot;grass7:r.neighbors&amp;quot;,&lt;br /&gt;
    {&lt;br /&gt;
        'input':input_path,&lt;br /&gt;
        'selection':None,&lt;br /&gt;
        'method':1, #1=median, 3=mode&lt;br /&gt;
        'size':11,&lt;br /&gt;
        'gauss':None,&lt;br /&gt;
        'quantile':'',&lt;br /&gt;
        '-c':False,&lt;br /&gt;
        '-a':False,&lt;br /&gt;
		'weight':'',&lt;br /&gt;
        'output':output_path,&lt;br /&gt;
        'GRASS_REGION_CELLSIZE_PARAMETER':0,&lt;br /&gt;
        'GRASS_RASTER_FORMAT_OPT':'',&lt;br /&gt;
        'GRASS_RASTER_FORMAT_META':''&lt;br /&gt;
    }&lt;br /&gt;
) &lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Step 10: Smooth all features in original dataset completed. (NLCD_&amp;quot; + year +  &amp;quot;_&amp;quot; + state + part + &amp;quot;_Smoothed-HD_4326)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
################################################################## Step 11: Convert to 8Bit #################################################################&lt;br /&gt;
&lt;br /&gt;
input_path = path + state + '/data/NLCD_' + year +  '_' + state + part + '_Smoothed-HD_4326.tiff'&lt;br /&gt;
output_path = path + state + '/data/NLCD_' + year +  '_' + state + part + '_Smoothed-HD-Compressed_4326.tiff'&lt;br /&gt;
&lt;br /&gt;
processing.run(&lt;br /&gt;
	&amp;quot;gdal:translate&amp;quot;,&lt;br /&gt;
	{&lt;br /&gt;
		'INPUT':input_path,&lt;br /&gt;
		'TARGET_CRS':None,&lt;br /&gt;
		'NODATA':0,&lt;br /&gt;
		'COPY_SUBDATASETS':False,&lt;br /&gt;
		'OPTIONS':'',&lt;br /&gt;
		'EXTRA':'',&lt;br /&gt;
		'DATA_TYPE':1,&lt;br /&gt;
		'OUTPUT':output_path,&lt;br /&gt;
		'OPTIONS': 'COMPRESS=LZW'&lt;br /&gt;
	}&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
result_urban_layer = QgsRasterLayer(output_path, 'NLCD_' + year +  '_' + state + part + '_Smoothed-HD-Compressed_4326')&lt;br /&gt;
QgsProject.instance().addMapLayer(result_urban_layer)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Step 11:  Reclass no-data (nan) to 41. (NLCD_&amp;quot; + year +  &amp;quot;_&amp;quot; + state + part + &amp;quot;_Smoothed-HD-Compressed_4326)&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Generating the Terrain using osgdem===&lt;br /&gt;
Instead of using genVPB.py, you may wish to run osgdem directly.&lt;br /&gt;
&lt;br /&gt;
In the Windows/Docker platform you can send the generate tile command directly to osgdem.exe, one tile at a time.&lt;br /&gt;
&lt;br /&gt;
Using the NLCD raster processing convention from above, following is the the final step after creating the raster and entering bash shell with the windows version of &amp;quot;docker run...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 osgdem --TERRAIN --image-ext png --RGBA --no-interpolate-imagery --disable-error-diffusion --geocentric --no-mip-mapping -t ./data/California-Southern_4326-84-hd-corrected.tiff -d ./SRTM-3/N32W115.hgt -b -115 32 -114 33 --PagedLOD -l 7 --radius-to-max-visible-distance-ratio 3 -o ./output/vpb/w120n30/w115n32/ws_w115n32.osgb&lt;br /&gt;
&lt;br /&gt;
Note: the --image-ext png --RGBA flags are critical to successfully building correctly placed landclasses in the final VPB generated scenery.&lt;br /&gt;
&lt;br /&gt;
If you prefer to run the scenery generation manually, running the VPB osgdem process is described in more detail here: [[Virtual Planet Builder#Running VPB]].&lt;br /&gt;
&lt;br /&gt;
After doing this you should have an output directory containing files of the form &amp;lt;code&amp;gt;output/vpb/w010n50/w004n50/ws_w004n50.osgb&amp;lt;/code&amp;gt;, plus a host of sub-directories. Each one of these is a 1x1 tile of terrain.  &lt;br /&gt;
&lt;br /&gt;
to leave the container simply type &amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Packaging the Scenery===&lt;br /&gt;
Once you have the terrain and line features they should be packaged in a scenery directory in vpb and Terrain sub-directories respectively.  E.g.&lt;br /&gt;
 MyCoolScenery/Terrain&lt;br /&gt;
 MyCoolScenery/vpb&lt;br /&gt;
It is good practise to document the data sources used in scenery generation.  Some source licenses require attribution of the original data source for anything derived, published or distributed.   &lt;br /&gt;
&lt;br /&gt;
To assist in fulfilling these license obligations, you can create a source.xml file in the scenery directory which includes attribution information.  This will then be available from within the simulator under Help-&amp;gt;Scenery Sources, and &amp;lt;u&amp;gt;may&amp;lt;/u&amp;gt; fulfil the attribution requirements of your license.  '''Note that you are responsible for fulfilling any license requirements from the data, not FlightGear'''.  &lt;br /&gt;
&lt;br /&gt;
The format of the file is straightforward:&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;PropertyList&amp;gt;&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;&amp;lt;source&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
         &amp;lt;name&amp;gt;Corine Land Cover (CLC) 2018, Version 2020_20u1&amp;lt;/name&amp;gt;&lt;br /&gt;
         &amp;lt;nowiki&amp;gt;&amp;lt;link&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;nowiki&amp;gt;http://web.archive.org/web/20221112175615/https://land.copernicus.eu/pan-european/corine-land-cover/clc2018?tab=metadata%2A&amp;lt;/nowiki&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;/link&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
         &amp;lt;license&amp;gt;GMES Open License&amp;lt;/license&amp;gt;&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;&amp;lt;/source&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;&amp;lt;source&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
         &amp;lt;name&amp;gt;NASADEM Merged DEM Global 1 arc second V001&amp;lt;/name&amp;gt;&lt;br /&gt;
         &amp;lt;nowiki&amp;gt;&amp;lt;link&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;nowiki&amp;gt;https://www.earthdata.nasa.gov/&amp;lt;/nowiki&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;/link&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
         &amp;lt;license&amp;gt;Public Domain&amp;lt;/license&amp;gt;&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;&amp;lt;/source&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;&amp;lt;source&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
         &amp;lt;name&amp;gt;OpenStreetMap&amp;lt;/name&amp;gt;&lt;br /&gt;
         &amp;lt;nowiki&amp;gt;&amp;lt;link&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;nowiki&amp;gt;https://www.openstreetmap.org/copyright&amp;lt;/nowiki&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;/link&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
         &amp;lt;license&amp;gt;Open Data Commons Open Database License&amp;lt;/license&amp;gt;&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;&amp;lt;/source&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;/PropertyList&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=File:July_2025_SOTM.png&amp;diff=142432</id>
		<title>File:July 2025 SOTM.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=File:July_2025_SOTM.png&amp;diff=142432"/>
		<updated>2025-08-29T10:30:54Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: Uploaded own work with UploadWizard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=Mid-day Innsbruck take off, FlightGear Next + HDR}}&lt;br /&gt;
|date=2025-07-04&lt;br /&gt;
|source={{own}}&lt;br /&gt;
|author=[[User:Fahim Dalvi|Fahim Dalvi]]&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{self|cc-by-sa-4.0}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Screenshot of the month]]&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User:Fahim_Dalvi&amp;diff=141539</id>
		<title>User:Fahim Dalvi</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User:Fahim_Dalvi&amp;diff=141539"/>
		<updated>2025-03-16T12:06:27Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{User&lt;br /&gt;
|name = Fahim Imaduddin Dalvi&lt;br /&gt;
|location = Doha,Qatar&lt;br /&gt;
|age = 17&lt;br /&gt;
|job = Student&lt;br /&gt;
|interests = Programming, Computers, FlightGear&lt;br /&gt;
|callsign = Fahim&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Spare-time FlightGear developer since late 2007.&lt;br /&gt;
I Have Been Working on the Following Projects:&lt;br /&gt;
* '''Aircraft'''&lt;br /&gt;
** Airbus A380&lt;br /&gt;
** LCA&lt;br /&gt;
&lt;br /&gt;
* '''Scenery'''&lt;br /&gt;
** Singapore &lt;br /&gt;
** Carribean&lt;br /&gt;
** Courchevel&lt;br /&gt;
** Monuments Around the world&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Misc Links:&lt;br /&gt;
&lt;br /&gt;
https://www.bitwisetech.com/fgfs/fgdata/Input/Joysticks/Logitech/&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Changelog_2020.3&amp;diff=138560</id>
		<title>Changelog 2020.3</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Changelog_2020.3&amp;diff=138560"/>
		<updated>2023-10-28T06:16:35Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: Added to changelog for 2020.3.19&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{changelogs|prev=2020.1|next=2022.1}}&lt;br /&gt;
&lt;br /&gt;
Available in: [[Changelog_2020.3|English]], [[Pl/Changelog_2020.3|Polish]], [[Zh/2020.3|Chinese]]&lt;br /&gt;
&lt;br /&gt;
Please help us translate into other languages!&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
The FlightGear development team is delighted to announce the v2020.3 LTS release of FlightGear, the free, open-source flight simulator. This is the second Long Term Support release for FlightGear, since the project changed to offering both Long Term Support releases, and more cutting-edge Preview releases.  This release represents the culmination of two years of development effort by a worldwide group of volunteers, brought together by a shared ambition to create the most realistic flight simulator possible that is free to use, modify and distribute. FlightGear is used all over the world by desktop flight simulator enthusiasts, for research in universities and for interactive exhibits in museums.&lt;br /&gt;
&lt;br /&gt;
Major enhancements since the v2020.3 LTS include: &lt;br /&gt;
* a developer preview of the upcoming Compositor graphical rendering framework as a separate pre-built binary, &lt;br /&gt;
* enhancements to both the JSBSim and YASim flight dynamics models&lt;br /&gt;
* DDS texture caching to reduce load times&lt;br /&gt;
* faster loading and more memory efficient buildings&lt;br /&gt;
* improved aircraft carrier support&lt;br /&gt;
&lt;br /&gt;
Additionally 30 completely new aircraft have been added to the official hangar, and a further 71 have received major updates.&lt;br /&gt;
&lt;br /&gt;
{{Disclaimer|id=final-fixed-function-release}}&lt;br /&gt;
&lt;br /&gt;
Founded in 1997, FlightGear features more than 700 aircraft, a worldwide scenery database, a multiplayer environment, detailed sky modelling, a flexible and open aircraft modelling system, varied networking options, multiple display support, a powerful scripting language, and an open architecture. Best of all, being open-source, the simulator is owned by the community and everyone is encouraged to contribute.&lt;br /&gt;
&lt;br /&gt;
FlightGear - Fly Free! &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Launcher ==&lt;br /&gt;
* Addition of a welcome screen on first launch, providing helpful information to first time users.&lt;br /&gt;
* Aircraft can now be marked as Favourites, and filtered, making it easier to see find your favourite aircraft out of the hundreds available.&lt;br /&gt;
* The launcher now supports aircraft carriers, including selecting a carrier and setting a start position.&lt;br /&gt;
* {{key press|Ctrl|F}} shortcut for when you just want to Fly!&lt;br /&gt;
* Improved support for helipads and seaports, including detection of current aircraft type.&lt;br /&gt;
* Numerous bugfixes and stability improvements, in particular for the aircraft and addons tabs.&lt;br /&gt;
&lt;br /&gt;
== Graphics ==&lt;br /&gt;
* To provide a developer preview, the [[Compositor]] renderer is included as part of this release.  It provides a fully XML-configurable multi-pass rendering pipeline that is compatible with ALS and includes clustered shading.&lt;br /&gt;
* Support for DDS Texture Cache, improving loading times for texture files.&lt;br /&gt;
* Star visibility is configurable based on magnitude of star and atmospheric conditions.&lt;br /&gt;
* Use of non-directional point sprites as a fallback for drivers that do not support triangles of point sprites is now supported by setting &amp;lt;code&amp;gt;/rendering/triangle-directional-lights=false&amp;lt;/code&amp;gt;.&lt;br /&gt;
* A new Tower AGL view has been added.  This is similar to Tower View, except that it keeps both the aircraft and the ground immediately below the aircraft in view, zooming and panning smoothly as the aircraft moves. Good for viewing landings.&lt;br /&gt;
* Improved airport grass textures&lt;br /&gt;
* Implemented tidal movement for littoral areas.&lt;br /&gt;
* Updated regional material definitions for California, Asia, Northern Brazil, Iceland, Jan Mayen island.&lt;br /&gt;
* Active volcanoes - Katla, Eyjafjallajokull, Surtsey.  &lt;br /&gt;
* Instanced-based random and OpenStreetMap buildings, improving performance and graphical quality significantly.&lt;br /&gt;
* Improvements to the Wingflex Shader.&lt;br /&gt;
* Users may enable/disable the pilot model from the View Options dialog.&lt;br /&gt;
&lt;br /&gt;
== JSBSim ==&lt;br /&gt;
* Added the ability to set up the starter and acceleration times of a turbine (parameters &amp;lt;code&amp;gt;&amp;lt;n1spinup&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;n2spinup&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;n1startrate&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;n2startrate&amp;gt;&amp;lt;/code&amp;gt;).&lt;br /&gt;
* The &amp;lt;code&amp;gt;&amp;lt;integrator&amp;gt;&amp;lt;/code&amp;gt; filter can now be reset to 0.0 by setting its &amp;lt;code&amp;gt;&amp;lt;trigger&amp;gt;&amp;lt;/code&amp;gt; property to a negative value.&lt;br /&gt;
* The integration scheme of the &amp;lt;code&amp;gt;&amp;lt;integrator&amp;gt;&amp;lt;/code&amp;gt; filter can now be chosen among &amp;lt;code&amp;gt;rect&amp;lt;/code&amp;gt; (Euler), &amp;lt;code&amp;gt;trap&amp;lt;/code&amp;gt; (Trapezoidal), &amp;lt;code&amp;gt;ab2&amp;lt;/code&amp;gt; (2nd order Adams-BashForth) and &amp;lt;code&amp;gt;ab3&amp;lt;/code&amp;gt; (3rd order Adams-Bashforth)&lt;br /&gt;
* The following functions can now be used in &amp;lt;code&amp;gt;&amp;lt;function&amp;gt;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;floor&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ceil&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;fmod&amp;lt;/code&amp;gt;. Their functionalities are the same than the corresponding C/C++ functions.&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;function&amp;gt;&amp;lt;/code&amp;gt; now checks the number of its arguments.&lt;br /&gt;
* New system component linear_actuator&lt;br /&gt;
* Export the fuel density to the property tree&lt;br /&gt;
* Added cyclic clipping for FCS components&lt;br /&gt;
* Added the ability to control the turbine engines spin down factor&lt;br /&gt;
* [Backward compatibility breakage] Gyros are now measuring rotation rates instead of rotational accelerations. Gyros that measure rotational accelerations do not exist in the real world.&lt;br /&gt;
* Output properties of flight control elements are no longer tied. This saves a lot of spurious warning messages and allows direct references of the same properties among several flight controls.&lt;br /&gt;
* Water vapor in the atmosphere is now managed through its mass fraction rather than its partial pressure. The former being the physical quantity that is conserved when pressure and temperature vary.&lt;br /&gt;
* Check that there are at least 3 contacts before trying to trim on ground.&lt;br /&gt;
* Added optional transmission of the simulation time for FG UDP interface&lt;br /&gt;
* The existence of the property that is used for table independent vars is now checked during execution rather than when the XML definition is parsed. This relaxes the order in which filters, table and more generally flight controls need to be declared in the XML definition files.&lt;br /&gt;
* Electric engines RPM is now exported in UDP sockets.&lt;br /&gt;
* The parameter &amp;lt;code&amp;gt;&amp;lt;ignitionn2&amp;gt;&amp;lt;/code&amp;gt; now affects N2 rather than N1. &lt;br /&gt;
* A warning is now given when max &amp;lt; min in a &amp;lt;code&amp;gt;&amp;lt;clipto&amp;gt;&amp;lt;/code&amp;gt; rather than throwing an exception&lt;br /&gt;
* Added the ability to log properties in a CSV file with the new fgfs executable argument &amp;lt;code&amp;gt;--jsbsim-output-directive-file&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== YASim ==&lt;br /&gt;
* Ground friction (stiction) changes&lt;br /&gt;
* Support for transonic flow effects.&lt;br /&gt;
* Control initial gear state directly by setting &amp;lt;code&amp;gt;/fdm/yasim/respect-external-gear-state=true&amp;lt;/code&amp;gt;, rather then YASim settings this depending on whether the aircraft is in the air or on the ground.&lt;br /&gt;
* Electric engines are now supported.&lt;br /&gt;
&lt;br /&gt;
== Weather and Environment ==&lt;br /&gt;
* Increased turbulence will be encountered near active volcanoes.&lt;br /&gt;
* Configurable METAR URL.&lt;br /&gt;
* METAR strings are decoded and displayed in a human-readable form in the weather dialog.&lt;br /&gt;
&lt;br /&gt;
== Carriers ==&lt;br /&gt;
* Two new carrier-specific starting options are supported in the launcher: &amp;lt;code&amp;gt;carrier-takeoff&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;carrier-approach&amp;lt;/code&amp;gt;.&lt;br /&gt;
* A new &amp;lt;code&amp;gt;--carrier-position&amp;lt;/code&amp;gt; command-line argument has been added.  This can be used to select the aircraft start position on an aircraft carrier.  Either a catapult (e.g. &amp;lt;code&amp;gt;cat-1&amp;lt;/code&amp;gt;), a parking position (e.g. &amp;lt;code&amp;gt;park-1&amp;lt;/code&amp;gt;), on final approach on the FLOLS (&amp;lt;code&amp;gt;flols&amp;lt;/code&amp;gt;) or abeam the carrier (&amp;lt;code&amp;gt;abeam&amp;lt;/code&amp;gt;).&lt;br /&gt;
* MPCarrier can now be detected by the GUI even if not available on startup.  To enable this feature set &amp;lt;code&amp;gt;/sim/mp-carriers/auto-attach=true&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== AI ==&lt;br /&gt;
* New fgcommands &amp;lt;code&amp;gt;add-aiobject&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;remove-aiobject&amp;lt;/code&amp;gt; for adding/removing objects to the AI subsystem.&lt;br /&gt;
* New AI aircraft, including 747 Freighter, CRJ900, SR-71, Saab 340.&lt;br /&gt;
* Numerous updates to AI traffic schedules and airline liveries.&lt;br /&gt;
* Space Shuttle TAEM and approach at KEDW scenario.&lt;br /&gt;
* Accurate Britten-Norman Islander performance data, from an Islander pilot.&lt;br /&gt;
&lt;br /&gt;
== Multiplayer ==&lt;br /&gt;
* Connection to VATSIM via swift is now available via the GUI.&lt;br /&gt;
* FGCom now supports both COM1 and COM2, as well as volume settings.&lt;br /&gt;
* The views defined by the user's aircraft (Pilot view, Helicopter view, Tower view etc) can now be used with multiplayer aircraft.  Viewing a particular multiplayer aircraft is done by clicking in the Pilot List dialogue's &amp;quot;view' column (see the &amp;quot;Multiplayer/Pilot List&amp;quot; menu).&lt;br /&gt;
* &amp;lt;code&amp;gt;--disable-hold-short&amp;lt;/code&amp;gt; option which allows the user to force a start on the runway when multiplayer is enabled.  This option should be used with caution - it can give other pilots and ATC a nasty fright to find an aircraft materialize on the runway!&lt;br /&gt;
* Support for recording multiplayer data&lt;br /&gt;
&lt;br /&gt;
== Nasal Scripting ==&lt;br /&gt;
* Configurable load order for core Nasal modules.&lt;br /&gt;
* Improvements and bug fixes to Emesary, the messaging interface.&lt;br /&gt;
* Improvements to the core libraries.&lt;br /&gt;
* Garbage collection improvements to reduce frame stuttering&lt;br /&gt;
* Re-loadable Nasal modules&lt;br /&gt;
* Canvas EFIS framework&lt;br /&gt;
* New methods in Canvas Image to set colors of pixels in the image.&lt;br /&gt;
&lt;br /&gt;
== Aircraft == &lt;br /&gt;
* FG1000 Glass Panel improvements include user-configurable VFR transponder codes, volume controls, new fascia, UI is now resizeable, support for custom SVG files (e.g. for a G500).  The FG1000 is now available on the Cessna 182T, J3 Cub, Diamond DA40.&lt;br /&gt;
* Improved glider vario instrument.&lt;br /&gt;
* New Aircraft: &lt;br /&gt;
** Airbus A320 - airliner&lt;br /&gt;
** Alisport Silent2Electro - glider with electric sustainer motor&lt;br /&gt;
** Bombardier Q400 DHC8-402 - shorthaul turboprop airliner&lt;br /&gt;
** Breguet Atlantic BR 1150 - long-range maritime patrol aircraft&lt;br /&gt;
** Cessna 140 - GA aircraft&lt;br /&gt;
** Cessna 208B Caravan - short range passenger, freighter and utility aircraft&lt;br /&gt;
** Cirrus SR22T - GA aircraft&lt;br /&gt;
** Diamond DA40 NG - GA aircraft, including FG1000 glass panel cockpit&lt;br /&gt;
** Diamond DA62 Twinstar- Twin engine GA aircraft&lt;br /&gt;
** Diamond HK36 Super Dimona - motorglider&lt;br /&gt;
** Dornier DO 28 Skyservant - Twin engine STOL utility aircraft&lt;br /&gt;
** Douglas TBD Devastator - WWII Torpedo bomber&lt;br /&gt;
** Draco Wilga - turboprop taildragger bush plane&lt;br /&gt;
** Fokker T.V - twin engine bomber&lt;br /&gt;
** Glasfluegel H201B Standard Libelle - glider&lt;br /&gt;
** Grumman F11-Tiger - carrier-based fighter&lt;br /&gt;
** Grumman HU-16A Albatross - twin engine amphibian&lt;br /&gt;
** Petliakov PE-8 (Ant-42/TB-7) - WWII bomber&lt;br /&gt;
** Piper PA28-161 Warrior II - GA aircraft&lt;br /&gt;
** Pipistrel Alpha Electro - electric training aircraft&lt;br /&gt;
** Pipistrel Taurus Electro G2.5 - glider with electric sustainer motor&lt;br /&gt;
** Rolladen Schneider LS8sc neo - standard glider with electric sustainer motor&lt;br /&gt;
** Robin DR400 Ecoflyer - GA Aircraft&lt;br /&gt;
** Scheibe Bergfalke II/55 - training glider&lt;br /&gt;
** Schempp-Hirth Arcus S - high performance glider&lt;br /&gt;
** Schleicher Ka6(CR) &amp;quot;Rhoensegler&amp;quot; - training glider&lt;br /&gt;
** SEPECAT Jaguar GR.1 - jet attack aircraft&lt;br /&gt;
** SUMPAC - Human powered airplane&lt;br /&gt;
** Supermarine Swift - jet fighter&lt;br /&gt;
** Yak 52 - training aircraft&lt;br /&gt;
* Major updates to over 70 aircraft.  Including 737-100, 737-300, 777, A-26-Invader, AR-234, ASG29, ASK13, ASK21, Aero-Commander, Aichi-D3A, B-17, B-24-Liberator, B-25, Bombardier-415, CH750STOL, CRJ700-family, Cessna-208-Caravan, Cessna Citation II, Cessna-L19, Cirrus-SR22, Concorde, DO-228, DO-335, Diamond-Da40, Diamond-Da42, Dragonfly, Embraer-ERJ-145, F-15, Fairchild-Metroliner, Falcon-50, Fokker-S-11, Fw200, H4-Hercules, Harrier-GR3, Horten-Ho-IX, Hughes-XF11, J3Cub, JA37, JAS39-Gripen, Jaguar, LS4, Lancair-235, Lionceau, Lockheed-NF104A, Lockheed-P38, ME-262, Mirage-2000, MirageIV, Northrop-xb35, PC-12, Piaggio-P166, Piper-PA-28, Potez-630, R44, Ryan-Navion, SIAI-Marchetti-SF.260, Socata-ST10, SpaceShuttle, Starship, Tecnam-P2006T, UH-1, Yak-18T, Zlin-50lx, an24b, bluebird, c182s, dhc1, f-14b, f16.&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous ==&lt;br /&gt;
* Updated Chinese, Dutch, French, German, Italian, Polish and Slovak translations.&lt;br /&gt;
* Map dialog displays heliports and allows configurable cursor key panning&lt;br /&gt;
* Faster Terrasync:  Download a tarball of airport information on first start and only check for updates every 24 hours rather than every simulator run.&lt;br /&gt;
* GPS fly-by mode&lt;br /&gt;
* Sentry.io integration to provide centralized crash reporting.&lt;br /&gt;
* Change screenshot filename to have date and time&lt;br /&gt;
* New thread safe particle manager -- should reduce random crashes around particles.&lt;br /&gt;
&lt;br /&gt;
=Updates since 2020.1=&lt;br /&gt;
Changes since the 2020.1 preview release include:&lt;br /&gt;
* Various launcher improvements including a Welcome screen and a keyboard shortcut ({{key press|Ctrl|F}}) to Fly!&lt;br /&gt;
* Improved regional definitions for California, Iceland and Northern Brazil and better grass textures.&lt;br /&gt;
* Implemented tidal movement for littoral areas.&lt;br /&gt;
* New AI model for the 747 Freighter, and numerous AI livery and traffic updates.&lt;br /&gt;
* Updates to the FG1000 glass panel display including configurable VFR transponder codes, volume controls, a new fascia, resizeable UI and support for custom SVG files.&lt;br /&gt;
* A hangar full of new aircraft: HU-16A-Albatross, LS8, Embraer-ERJ-145, Cessna 208B Caravan, PZL 104 wilga 2000 Draco, Scheibe Bergfalke, Taurus, f16, Dornier Do 28 Skyservant, Petliakov Pe 8 (Ant 42/DB 7), Grumman F.11 Tiger&lt;br /&gt;
* Updates to a large number of aircraft including CRJ700, Dragonfly, Mirage 2000, Jaguar GR1, H4 Hercules, JA37, Supermarine Swift, A320, Cirrus-SR22, Cessna Citation, J3Cub&lt;br /&gt;
* Updated Chinese, Dutch, French, German, Italian, Polish and Slovak translations.&lt;br /&gt;
* Faster Terrasync:  Download a tarball of airport information on first start and only check for updates every 24 hours rather than every simulator run.&lt;br /&gt;
* GPS fly-by mode&lt;br /&gt;
* Sentry.io integration to provide centralized crash reporting.&lt;br /&gt;
* New thread safe particle manager -- should reduce random crashes around particles.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Updates since 2020.3.0=&lt;br /&gt;
&lt;br /&gt;
As 2020.3 is a long term supported release, there are ongoing bug-fixes and small improvements happening, based on user feedback and automatic reporting of crashes and issues. Significant fixes are listed below:&lt;br /&gt;
&lt;br /&gt;
==2020.3.1==&lt;br /&gt;
* Add help page to the launcher&lt;br /&gt;
* Fix handling of helipads at heliports&lt;br /&gt;
* Migrate installed aircraft packages, when migrating to the new stable catalog&lt;br /&gt;
* TerraSync: improve startup performance on Windows&lt;br /&gt;
&lt;br /&gt;
==2020.3.2==&lt;br /&gt;
* TerraSync waits for Models to be completely sync-ed, to avoid missing models when starting&lt;br /&gt;
* First-run screen: add a 'scroll to the bottom' hint icon&lt;br /&gt;
* Tides fixes from Erik Hofman&lt;br /&gt;
* Use nicer scrollbar for the launcher, fixes some issue with long aircraft lists&lt;br /&gt;
* Support Apt.dat v1000 comm frequencies&lt;br /&gt;
* Fix an ATC crash when repositioning&lt;br /&gt;
* Many translations fixes identified by Michael Danilov&lt;br /&gt;
* Greatly improve the Brazilian cerradio areas (near SBMQ)&lt;br /&gt;
* Russian translation updates&lt;br /&gt;
* Iceland materials fixes&lt;br /&gt;
&lt;br /&gt;
==2020.3.3==&lt;br /&gt;
* Fix accidental mouse picks while using a right-mouse-drag to look around&lt;br /&gt;
* Fix the download location we recommend in the 'setup root' dialog&lt;br /&gt;
&lt;br /&gt;
==2020.3.4==&lt;br /&gt;
* Handle more METAR strings correctly, including wind sensor failures&lt;br /&gt;
* Fix airmass velocity being applied to sub-models twice (eg, when dropping payloads in a cross-wind)&lt;br /&gt;
* Fix crash on shutdown in the properties code&lt;br /&gt;
* Spanish translation updates &lt;br /&gt;
* Disable flights to EGEL to avoid crashes in traffic code&lt;br /&gt;
&lt;br /&gt;
==2020.3.5==&lt;br /&gt;
* Change default Windows download location to %USERS%\FlightGear\Downloads, to avoid problems with Windows Defender blocking un-trusted applications from writing to Documents, which was the previous location.&lt;br /&gt;
* Fix a crash when returning to FlightGear from another application and scrolling or clicking&lt;br /&gt;
* Avoid crashing with UIUC-based aircraft such as the Wright Flyer&lt;br /&gt;
* Fix a crash on macOS when a joystick failed to open&lt;br /&gt;
* Update the macOS application icon&lt;br /&gt;
* Fix Nasal crash on reset&lt;br /&gt;
* Canvas: allow anisotropic filtering&lt;br /&gt;
* Larger, improved moon texture&lt;br /&gt;
* UFO speed goes to 11&lt;br /&gt;
* Fix taxiway markings disappearing in specific graphics settings&lt;br /&gt;
&lt;br /&gt;
==2020.3.6==&lt;br /&gt;
* Fixed crash downloading the default aircraft catalog&lt;br /&gt;
* Fix a hang starting at scenery in the ocean&lt;br /&gt;
* Fix incorrect sky &amp;amp; cockpit rendering with certain METAR values&lt;br /&gt;
* Add getting-started hints to the launcher (English only for now)&lt;br /&gt;
* Fix Shuttle AI scenarios&lt;br /&gt;
* Improvements to flight-planning mode&lt;br /&gt;
* Sun / moon scaling fixes&lt;br /&gt;
* Fix initial position of submodels&lt;br /&gt;
* macOS: warn if running with app translocation&lt;br /&gt;
* Windows: detect missing OpenGL drivers&lt;br /&gt;
* Fix UIUC FDM crashes&lt;br /&gt;
* Fix crash with invalid view numbers&lt;br /&gt;
* Catch FDM NaN errors more gracefully&lt;br /&gt;
* KAP-140 approach mode improvements&lt;br /&gt;
* Traffic+AI livery updates&lt;br /&gt;
&lt;br /&gt;
== 2020.3.7 ==&lt;br /&gt;
* Enable OSM2City buildings via TerraSync for the whole planet&lt;br /&gt;
* C172 bug-fixes and updates&lt;br /&gt;
* Improved regional material definitions for Europe, California&lt;br /&gt;
* Allow chat box to be re-positioned&lt;br /&gt;
* Fix crashes related to particle systems&lt;br /&gt;
* Fix selection of time-zone around Beijing&lt;br /&gt;
* Fix display of non-Latin1 strings in Canvas displays&lt;br /&gt;
* Fix Multi-player mode runway-start logic to select hold-short position correctly&lt;br /&gt;
* macOS: fix crash on text with certain fonts&lt;br /&gt;
* Fix launcher language selection when the UI language include a script specifier (eg zh-Hans-CN)&lt;br /&gt;
* Fix aircraft-id property when loading from a hangar ( https://sourceforge.net/p/flightgear/codetickets/2502/ )&lt;br /&gt;
* Improve checks for out-of-date Intel Graphics drivers on Windows&lt;br /&gt;
&lt;br /&gt;
== 2020.3.8 ==&lt;br /&gt;
* Fix behaviour of &amp;lt;code&amp;gt;&amp;lt;local&amp;gt;&amp;lt;/code&amp;gt; particle systems &lt;br /&gt;
* Fix autumn tree appearance&lt;br /&gt;
&lt;br /&gt;
== 2020.3.9 ==&lt;br /&gt;
* Fix crash in Swift&lt;br /&gt;
* Corrections to MP protocol timing&lt;br /&gt;
* Correct URL to FGData&lt;br /&gt;
* Fix bug in cache reload dialog&lt;br /&gt;
* Improvements to ATC dialog to display frequencies with 3 decimal places correctly&lt;br /&gt;
* Improve material definitions for Africa, Mediterranean regions&lt;br /&gt;
* Add updated ocean and water visual effects&lt;br /&gt;
&lt;br /&gt;
== 2020.3.10 ==&lt;br /&gt;
* Transponder: make standby mode work&lt;br /&gt;
* Launcher: pick up scenery and aircraft paths from the command line&lt;br /&gt;
* Launcher: store locations differently, to avoid problems when running multiple FlightGear versions and switching between them.&lt;br /&gt;
* Launcher: add 'restart on quit' option&lt;br /&gt;
* Fix NavCache errors loading ShapeFile data&lt;br /&gt;
* Fix NavCache errors when running multiple copies of FlightGear&lt;br /&gt;
&lt;br /&gt;
== 2020.3.11 ==&lt;br /&gt;
* Fix a crash introduced in 2020.3.10&lt;br /&gt;
* Improve error message when no aircraft search paths are available&lt;br /&gt;
* Fix a crash with misconfigured traffic taxi routes&lt;br /&gt;
* Update AI traffic schedules&lt;br /&gt;
&lt;br /&gt;
== 2020.3.12 ==&lt;br /&gt;
* Add aircraft directory name validation &lt;br /&gt;
* Add an extra step of antialiasing (8x)&lt;br /&gt;
* Add feature allowing aircraft to define custom fonts for osg::Text&lt;br /&gt;
* Add generic combined ALS procedural lights and Compositor lights&lt;br /&gt;
* Add new regional materials for Australia&lt;br /&gt;
* Fix Basic Weather producing invalid pressure altitudes&lt;br /&gt;
* Fix bug in path searching for previews&lt;br /&gt;
* Fix bug in sound system when approaching max-dist range&lt;br /&gt;
* Fix crashes after reset&lt;br /&gt;
* Fix crash when AI aircraft has invalid destination runway&lt;br /&gt;
* Fix Mapstructure error in RTE layer&lt;br /&gt;
* Fix &amp;lt;code&amp;gt;--view-offset&amp;lt;/code&amp;gt; to use the correct property&lt;br /&gt;
* HUD: make vertical gauges look the same as horizontal ones&lt;br /&gt;
* Improved Russian and Spanish translations&lt;br /&gt;
* Miscellaneous improvements to weather dialog&lt;br /&gt;
* Property browser: display values for folders in verbose mode &lt;br /&gt;
* Route manager: select correct waypoint when duplicate waypoints exist&lt;br /&gt;
* Update AI traffic schedules and add new AI models&lt;br /&gt;
&lt;br /&gt;
== 2020.3.13 ==&lt;br /&gt;
* Fix for the disappearing MP pilot list&lt;br /&gt;
* Fix JSBsim linear actuators behaving badly in certain conditions&lt;br /&gt;
&lt;br /&gt;
== 2020.3.14 ==&lt;br /&gt;
* Support for add-on paths&lt;br /&gt;
* Instant audio queue&lt;br /&gt;
* Allow canvas dialogs to not grab focus away from FG (more like how focus in PUI dialogs behaves)&lt;br /&gt;
&lt;br /&gt;
== 2020.3.15 ==&lt;br /&gt;
* Fix radio audio morse issue.&lt;br /&gt;
&lt;br /&gt;
== 2020.3.16 ==&lt;br /&gt;
* Fix audio indent issue.&lt;br /&gt;
&lt;br /&gt;
== 2020.3.17 ==&lt;br /&gt;
* Navradio: disable low-pass filter when changing selected freq or leaving GPS slave mode. When the selected frequency is changed or when leaving GPS slave mode, disable the low-pass filter applied to signal quality.&lt;br /&gt;
* Navradio: fix regression and optimize older code. Fix a little regression introduced in previous commit. Add: changing the standby frequency disabled the low-pass filter for the next call to updateReceiver(); this must happen when the selected frequency is changed but not when the standby frequency is changed.&lt;br /&gt;
* AP input: add property-path support to Inputs. Allow making the AP source indirect (via a string property), so that the actual source property can be configured or adjusted from a -set.xml, or at runtime.&lt;br /&gt;
* Replace displaying in Launcher `--on-ground=false` to `--in-air` for on final. The option`--on-ground=false` doesn't exist which can be misleading.&lt;br /&gt;
&lt;br /&gt;
== 2020.3.18 == &lt;br /&gt;
&amp;lt;!-- Just for placeholder, someone will need to fix this --&amp;gt;&lt;br /&gt;
* Added photoscenery capability.&lt;br /&gt;
* New basic autopilot system.&lt;br /&gt;
* Fix crash with a 'between' type constraint in Navigraph procedure files&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2020.3.19 == &lt;br /&gt;
* Add AI submodel collision&lt;br /&gt;
* Fix crash with invalid METAR strings&lt;br /&gt;
* Fix rendering bug where OSM buildings appeared blue under certain graphics settings&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
{{Appendix}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:FlightGear changelogs‎]]&lt;br /&gt;
[[pl:Changelog_2020.3]]&lt;br /&gt;
[[Zh:2020.3]]&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User:Fahim_Dalvi/Compiling_on_Apple_Silicon&amp;diff=138534</id>
		<title>User:Fahim Dalvi/Compiling on Apple Silicon</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User:Fahim_Dalvi/Compiling_on_Apple_Silicon&amp;diff=138534"/>
		<updated>2023-10-18T17:48:12Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dump of initial commands, to be improved...&lt;br /&gt;
&lt;br /&gt;
== Prerequisites: ==&lt;br /&gt;
* `brew` for packages (https://brew.sh)&lt;br /&gt;
&lt;br /&gt;
== Building FlightGear: ==&lt;br /&gt;
Move to your directory of choice.&lt;br /&gt;
&lt;br /&gt;
=== Setup the build directory ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
PREFIX=`pwd`/build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Clone and compile `openscenegraph` ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
brew install cmake freetype&lt;br /&gt;
&lt;br /&gt;
git clone --branch fgfs-osg-36-1 https://github.com/zakalawe/osg.git osg-custom-36&lt;br /&gt;
cd osg-custom-36&lt;br /&gt;
mkdir build.osg&lt;br /&gt;
cd build.osg&lt;br /&gt;
cmake \&lt;br /&gt;
 -D CMAKE_BUILD_TYPE=&amp;quot;Release&amp;quot;\&lt;br /&gt;
 -D CMAKE_CXX_FLAGS_RELEASE=&amp;quot;-O3 -pipe&amp;quot;\&lt;br /&gt;
 -D CMAKE_C_FLAGS_RELEASE=&amp;quot;-O3 -pipe&amp;quot;\&lt;br /&gt;
 -D CMAKE_INSTALL_PREFIX:PATH=&amp;quot;${PREFIX}&amp;quot;\&lt;br /&gt;
 -D CMAKE_INSTALL_RPATH_USE_LINK_PATH:BOOLEAN=&amp;quot;true&amp;quot; -G &amp;quot;Unix Makefiles&amp;quot; ..&lt;br /&gt;
make -j 8&lt;br /&gt;
make install&lt;br /&gt;
cd ../..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Clone and compile `simgear` ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
brew install boost&lt;br /&gt;
&lt;br /&gt;
git clone --branch next https://git.code.sf.net/p/flightgear/simgear simgear&lt;br /&gt;
cd simgear&lt;br /&gt;
mkdir build.simgear&lt;br /&gt;
cd build.simgear &lt;br /&gt;
cmake \&lt;br /&gt;
 -DCMAKE_CXX_STANDARD=17 \&lt;br /&gt;
 -DCMAKE_CXX_STANDARD_REQUIRED=ON \&lt;br /&gt;
 -DCMAKE_CXX_EXTENSIONS=OFF \&lt;br /&gt;
 -DCMAKE_OSX_ARCHITECTURES=&amp;quot;arm64&amp;quot; \&lt;br /&gt;
 -DCMAKE_OSX_DEPLOYMENT_TARGET=13.1 \&lt;br /&gt;
 -DCMAKE_INSTALL_PREFIX=${PREFIX} \&lt;br /&gt;
 -DCMAKE_BUILD_TYPE=Release \&lt;br /&gt;
 -G &amp;quot;Unix Makefiles&amp;quot; ..&lt;br /&gt;
make -j 8&lt;br /&gt;
make install&lt;br /&gt;
cd ../..&lt;br /&gt;
cp simgear/simgear/math/simd.hxx build/include/simgear/math/&lt;br /&gt;
cp simgear/simgear/math/simd_neon.hxx build/include/simgear/math/&lt;br /&gt;
cp simgear/simgear/math/simd4x4_neon.hxx build/include/simgear/math/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Clone and compile `plib` ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
brew install svn automake&lt;br /&gt;
svn checkout https://svn.code.sf.net/p/plib/code/trunk plib&lt;br /&gt;
cd plib&lt;br /&gt;
./autogen.sh&lt;br /&gt;
./configure --disable-pw --disable-sl --disable-psl --disable-ssg --disable-ssgaux --prefix=${PREFIX} CXXFLAGS=&amp;quot;-arch arm64 -mmacosx-version-min=13.1&amp;quot; CFLAGS=&amp;quot;-arch arm64 -mmacosx-version-min=13.1&amp;quot;&lt;br /&gt;
# use of undeclared identifier 'finite'; did you mean 'isfinite'&lt;br /&gt;
# Add `#define finite isfinite` to src/sg/sg.cxx&lt;br /&gt;
make install&lt;br /&gt;
cd ..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Clone and compile `flightgear` ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
brew install qt@5&lt;br /&gt;
brew install speex speexdsp&lt;br /&gt;
brew install dbus libevent # not working for swift yet&lt;br /&gt;
git clone --branch next https://git.code.sf.net/p/flightgear/fgdata fgdata&lt;br /&gt;
git clone --branch next https://git.code.sf.net/p/flightgear/flightgear flightgear&lt;br /&gt;
cd flightgear&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Changes to compile on Apple silicon =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;dpatch&amp;quot;&amp;gt;&lt;br /&gt;
CMakeLists.txt&lt;br /&gt;
@@ -438,7 +438,13 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL &amp;quot;Clang&amp;quot; OR CMAKE_CXX_COMPILER_ID STREQUAL &amp;quot;Ap&lt;br /&gt;
     set(CMAKE_CXX_FLAGS_RELWITHDEBINFO &amp;quot;-O3 -g -DNDEBUG&amp;quot;)&lt;br /&gt;
     set(CMAKE_C_FLAGS_RELWITHDEBINFO  &amp;quot;-O3 -g -DNDEBUG&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
-    set(SIMD_COMPILER_FLAGS &amp;quot;-msse2 -mfpmath=sse -ftree-vectorize -ftree-slp-vectorize&amp;quot;)&lt;br /&gt;
+    if (X86 OR X86_64)&lt;br /&gt;
+        set(SIMD_COMPILER_FLAGS &amp;quot;-msse2 -mfpmath=sse&amp;quot;)&lt;br /&gt;
+    endif()&lt;br /&gt;
+    set(SIMD_COMPILER_FLAGS &amp;quot;${SIMD_COMPILER_FLAGS} -ftree-vectorize -ftree-slp-vectorize&amp;quot;)&lt;br /&gt;
+&lt;br /&gt;
+    # set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY &amp;quot;libc++&amp;quot;)&lt;br /&gt;
+    # set(CMAKE_CXX_FLAGS &amp;quot;${CMAKE_CXX_FLAGS} -stdlib=libc++&amp;quot;)&lt;br /&gt;
     set(WARNING_FLAGS_C &amp;quot;-Wall&amp;quot;)&lt;br /&gt;
 endif()&lt;br /&gt;
&lt;br /&gt;
src/GUI/CocoaHelpers.mm&lt;br /&gt;
@@ -35,6 +35,10 @@&lt;br /&gt;
 #include &amp;lt;Foundation/NSLocale.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;AppKit/NSAlert.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
+#if defined(HAVE_QT)&lt;br /&gt;
+#  include &amp;lt;GUI/QtLauncher.hxx&amp;gt;&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
 // simgear&lt;br /&gt;
 #include &amp;lt;simgear/misc/sg_path.hxx&amp;gt;&lt;br /&gt;
 #include &amp;lt;simgear/debug/logstream.hxx&amp;gt;&lt;br /&gt;
@@ -46,10 +50,6 @@&lt;br /&gt;
 #include &amp;lt;Main/locale.hxx&amp;gt;&lt;br /&gt;
 #include &amp;lt;Main/globals.hxx&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
-#if defined(HAVE_QT)&lt;br /&gt;
-#  include &amp;lt;GUI/QtLauncher.hxx&amp;gt;&lt;br /&gt;
-#endif&lt;br /&gt;
-&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Continue with compilation =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir build.flightgear&lt;br /&gt;
cd build.flightgear&lt;br /&gt;
cmake \&lt;br /&gt;
 -E env CFLAGS=&amp;quot;-Wno-deprecated-declarations -Wno-inconsistent-missing-override&amp;quot; CXXFLAGS=&amp;quot;-Wno-deprecated-declarations -Wno-inconsistent-missing-override&amp;quot; \&lt;br /&gt;
 cmake \&lt;br /&gt;
  -DFG_DATA_DIR=../../fgdata \&lt;br /&gt;
  -DSYSTEM_SPEEX=ON \&lt;br /&gt;
  -DCMAKE_OSX_ARCHITECTURES=&amp;quot;arm64&amp;quot; \&lt;br /&gt;
  -DCMAKE_OSX_DEPLOYMENT_TARGET=13.1 \&lt;br /&gt;
  -DCMAKE_INSTALL_PREFIX=${PREFIX} \&lt;br /&gt;
  -DCMAKE_BUILD_TYPE=&amp;quot;Release&amp;quot; \&lt;br /&gt;
  -DQt5_DIR=$(brew --prefix qt5)/lib/cmake/Qt5 \&lt;br /&gt;
  -DWITH_FGPANEL=false \&lt;br /&gt;
  -DCMAKE_CXX_STANDARD=17 \&lt;br /&gt;
  -DCMAKE_CXX_STANDARD_REQUIRED=ON \&lt;br /&gt;
  -DCMAKE_CXX_EXTENSIONS=OFF \&lt;br /&gt;
  -G &amp;quot;Unix Makefiles&amp;quot; ..&lt;br /&gt;
make -j 4 install&lt;br /&gt;
cd ../..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Running compiled FG ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Make sure you are in the top level directory (with subdirectories like `build`, `flightgear`, `simgear` etc)&lt;br /&gt;
&lt;br /&gt;
DYLD_LIBRARY_PATH=`pwd`/build/lib:$DYLD_LIBRARY_PATH FG_HOME=`pwd`/fghome build/fgfs.app/Contents/MacOS/fgfs --fg-root=`pwd`/fgdata/ --launcher&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User:Fahim_Dalvi/Compiling_on_Apple_Silicon&amp;diff=138533</id>
		<title>User:Fahim Dalvi/Compiling on Apple Silicon</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User:Fahim_Dalvi/Compiling_on_Apple_Silicon&amp;diff=138533"/>
		<updated>2023-10-18T17:47:28Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dump of initial commands, to be improved...&lt;br /&gt;
&lt;br /&gt;
== Prerequisites: ==&lt;br /&gt;
* `brew` for packages (https://brew.sh)&lt;br /&gt;
&lt;br /&gt;
== Building FlightGear: ==&lt;br /&gt;
Move to your directory of choice.&lt;br /&gt;
&lt;br /&gt;
=== Setup the build directory: ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
PREFIX=`pwd`/build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Clone and compile `openscenegraph`: ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
brew install cmake freetype&lt;br /&gt;
&lt;br /&gt;
git clone --branch fgfs-osg-36-1 https://github.com/zakalawe/osg.git osg-custom-36&lt;br /&gt;
cd osg-custom-36&lt;br /&gt;
mkdir build.osg&lt;br /&gt;
cd build.osg&lt;br /&gt;
cmake \&lt;br /&gt;
 -D CMAKE_BUILD_TYPE=&amp;quot;Release&amp;quot;\&lt;br /&gt;
 -D CMAKE_CXX_FLAGS_RELEASE=&amp;quot;-O3 -pipe&amp;quot;\&lt;br /&gt;
 -D CMAKE_C_FLAGS_RELEASE=&amp;quot;-O3 -pipe&amp;quot;\&lt;br /&gt;
 -D CMAKE_INSTALL_PREFIX:PATH=&amp;quot;${PREFIX}&amp;quot;\&lt;br /&gt;
 -D CMAKE_INSTALL_RPATH_USE_LINK_PATH:BOOLEAN=&amp;quot;true&amp;quot; -G &amp;quot;Unix Makefiles&amp;quot; ..&lt;br /&gt;
make -j 8&lt;br /&gt;
make install&lt;br /&gt;
cd ../..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Clone and compile `simgear`: ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
brew install boost&lt;br /&gt;
&lt;br /&gt;
git clone --branch next https://git.code.sf.net/p/flightgear/simgear simgear&lt;br /&gt;
cd simgear&lt;br /&gt;
mkdir build.simgear&lt;br /&gt;
cd build.simgear &lt;br /&gt;
cmake \&lt;br /&gt;
 -DCMAKE_CXX_STANDARD=17 \&lt;br /&gt;
 -DCMAKE_CXX_STANDARD_REQUIRED=ON \&lt;br /&gt;
 -DCMAKE_CXX_EXTENSIONS=OFF \&lt;br /&gt;
 -DCMAKE_OSX_ARCHITECTURES=&amp;quot;arm64&amp;quot; \&lt;br /&gt;
 -DCMAKE_OSX_DEPLOYMENT_TARGET=13.1 \&lt;br /&gt;
 -DCMAKE_INSTALL_PREFIX=${PREFIX} \&lt;br /&gt;
 -DCMAKE_BUILD_TYPE=Release \&lt;br /&gt;
 -G &amp;quot;Unix Makefiles&amp;quot; ..&lt;br /&gt;
make -j 8&lt;br /&gt;
make install&lt;br /&gt;
cd ../..&lt;br /&gt;
cp simgear/simgear/math/simd.hxx build/include/simgear/math/&lt;br /&gt;
cp simgear/simgear/math/simd_neon.hxx build/include/simgear/math/&lt;br /&gt;
cp simgear/simgear/math/simd4x4_neon.hxx build/include/simgear/math/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Clone and compile `plib`: ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
brew install svn automake&lt;br /&gt;
svn checkout https://svn.code.sf.net/p/plib/code/trunk plib&lt;br /&gt;
cd plib&lt;br /&gt;
./autogen.sh&lt;br /&gt;
./configure --disable-pw --disable-sl --disable-psl --disable-ssg --disable-ssgaux --prefix=${PREFIX} CXXFLAGS=&amp;quot;-arch arm64 -mmacosx-version-min=13.1&amp;quot; CFLAGS=&amp;quot;-arch arm64 -mmacosx-version-min=13.1&amp;quot;&lt;br /&gt;
# use of undeclared identifier 'finite'; did you mean 'isfinite'&lt;br /&gt;
# Add `#define finite isfinite` to src/sg/sg.cxx&lt;br /&gt;
make install&lt;br /&gt;
cd ..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Clone and compile `flightgear`: ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
brew install qt@5&lt;br /&gt;
brew install speex speexdsp&lt;br /&gt;
brew install dbus libevent # not working for swift yet&lt;br /&gt;
git clone --branch next https://git.code.sf.net/p/flightgear/fgdata fgdata&lt;br /&gt;
git clone --branch next https://git.code.sf.net/p/flightgear/flightgear flightgear&lt;br /&gt;
cd flightgear&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Changes to compile on Apple silicon =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;dpatch&amp;quot;&amp;gt;&lt;br /&gt;
CMakeLists.txt&lt;br /&gt;
@@ -438,7 +438,13 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL &amp;quot;Clang&amp;quot; OR CMAKE_CXX_COMPILER_ID STREQUAL &amp;quot;Ap&lt;br /&gt;
     set(CMAKE_CXX_FLAGS_RELWITHDEBINFO &amp;quot;-O3 -g -DNDEBUG&amp;quot;)&lt;br /&gt;
     set(CMAKE_C_FLAGS_RELWITHDEBINFO  &amp;quot;-O3 -g -DNDEBUG&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
-    set(SIMD_COMPILER_FLAGS &amp;quot;-msse2 -mfpmath=sse -ftree-vectorize -ftree-slp-vectorize&amp;quot;)&lt;br /&gt;
+    if (X86 OR X86_64)&lt;br /&gt;
+        set(SIMD_COMPILER_FLAGS &amp;quot;-msse2 -mfpmath=sse&amp;quot;)&lt;br /&gt;
+    endif()&lt;br /&gt;
+    set(SIMD_COMPILER_FLAGS &amp;quot;${SIMD_COMPILER_FLAGS} -ftree-vectorize -ftree-slp-vectorize&amp;quot;)&lt;br /&gt;
+&lt;br /&gt;
+    # set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY &amp;quot;libc++&amp;quot;)&lt;br /&gt;
+    # set(CMAKE_CXX_FLAGS &amp;quot;${CMAKE_CXX_FLAGS} -stdlib=libc++&amp;quot;)&lt;br /&gt;
     set(WARNING_FLAGS_C &amp;quot;-Wall&amp;quot;)&lt;br /&gt;
 endif()&lt;br /&gt;
&lt;br /&gt;
src/GUI/CocoaHelpers.mm&lt;br /&gt;
@@ -35,6 +35,10 @@&lt;br /&gt;
 #include &amp;lt;Foundation/NSLocale.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;AppKit/NSAlert.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
+#if defined(HAVE_QT)&lt;br /&gt;
+#  include &amp;lt;GUI/QtLauncher.hxx&amp;gt;&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
 // simgear&lt;br /&gt;
 #include &amp;lt;simgear/misc/sg_path.hxx&amp;gt;&lt;br /&gt;
 #include &amp;lt;simgear/debug/logstream.hxx&amp;gt;&lt;br /&gt;
@@ -46,10 +50,6 @@&lt;br /&gt;
 #include &amp;lt;Main/locale.hxx&amp;gt;&lt;br /&gt;
 #include &amp;lt;Main/globals.hxx&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
-#if defined(HAVE_QT)&lt;br /&gt;
-#  include &amp;lt;GUI/QtLauncher.hxx&amp;gt;&lt;br /&gt;
-#endif&lt;br /&gt;
-&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Continue with compilation =====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir build.flightgear&lt;br /&gt;
cd build.flightgear&lt;br /&gt;
cmake \&lt;br /&gt;
 -E env CFLAGS=&amp;quot;-Wno-deprecated-declarations -Wno-inconsistent-missing-override&amp;quot; CXXFLAGS=&amp;quot;-Wno-deprecated-declarations -Wno-inconsistent-missing-override&amp;quot; \&lt;br /&gt;
 cmake \&lt;br /&gt;
  -DFG_DATA_DIR=../../fgdata \&lt;br /&gt;
  -DSYSTEM_SPEEX=ON \&lt;br /&gt;
  -DCMAKE_OSX_ARCHITECTURES=&amp;quot;arm64&amp;quot; \&lt;br /&gt;
  -DCMAKE_OSX_DEPLOYMENT_TARGET=13.1 \&lt;br /&gt;
  -DCMAKE_INSTALL_PREFIX=${PREFIX} \&lt;br /&gt;
  -DCMAKE_BUILD_TYPE=&amp;quot;Release&amp;quot; \&lt;br /&gt;
  -DQt5_DIR=$(brew --prefix qt5)/lib/cmake/Qt5 \&lt;br /&gt;
  -DWITH_FGPANEL=false \&lt;br /&gt;
  -DCMAKE_CXX_STANDARD=17 \&lt;br /&gt;
  -DCMAKE_CXX_STANDARD_REQUIRED=ON \&lt;br /&gt;
  -DCMAKE_CXX_EXTENSIONS=OFF \&lt;br /&gt;
  -G &amp;quot;Unix Makefiles&amp;quot; ..&lt;br /&gt;
make -j 4 install&lt;br /&gt;
cd ../..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Running compile FG: ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Make sure you are in the top level directory (with subdirectories like `build`, `flightgear`, `simgear` etc)&lt;br /&gt;
&lt;br /&gt;
DYLD_LIBRARY_PATH=`pwd`/build/lib:$DYLD_LIBRARY_PATH FG_HOME=`pwd`/fghome build/fgfs.app/Contents/MacOS/fgfs --fg-root=`pwd`/fgdata/ --launcher&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User:Fahim_Dalvi/Compiling_on_Apple_Silicon&amp;diff=138471</id>
		<title>User:Fahim Dalvi/Compiling on Apple Silicon</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User:Fahim_Dalvi/Compiling_on_Apple_Silicon&amp;diff=138471"/>
		<updated>2023-10-15T06:23:47Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dump of initial commands, to be improved...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
PREFIX=`pwd`/build&lt;br /&gt;
&lt;br /&gt;
brew install cmake freetype&lt;br /&gt;
&lt;br /&gt;
git clone --branch fgfs-osg-36-1 https://github.com/zakalawe/osg.git osg-custom-36&lt;br /&gt;
cd osg-custom-36&lt;br /&gt;
mkdir build.osg&lt;br /&gt;
cd build.osg&lt;br /&gt;
cmake \&lt;br /&gt;
 -D CMAKE_BUILD_TYPE=&amp;quot;Release&amp;quot;\&lt;br /&gt;
 -D CMAKE_CXX_FLAGS_RELEASE=&amp;quot;-O3 -pipe&amp;quot;\&lt;br /&gt;
 -D CMAKE_C_FLAGS_RELEASE=&amp;quot;-O3 -pipe&amp;quot;\&lt;br /&gt;
 -D CMAKE_INSTALL_PREFIX:PATH=&amp;quot;${PREFIX}&amp;quot;\&lt;br /&gt;
 -D CMAKE_INSTALL_RPATH_USE_LINK_PATH:BOOLEAN=&amp;quot;true&amp;quot; -G &amp;quot;Unix Makefiles&amp;quot; ..&lt;br /&gt;
make -j 8&lt;br /&gt;
make install&lt;br /&gt;
cd ../..&lt;br /&gt;
&lt;br /&gt;
brew install boost&lt;br /&gt;
&lt;br /&gt;
git clone --branch next https://git.code.sf.net/p/flightgear/simgear simgear&lt;br /&gt;
cd simgear&lt;br /&gt;
mkdir build.simgear&lt;br /&gt;
cd build.simgear &lt;br /&gt;
cmake \&lt;br /&gt;
 -DCMAKE_CXX_STANDARD=17 \&lt;br /&gt;
 -DCMAKE_CXX_STANDARD_REQUIRED=ON \&lt;br /&gt;
 -DCMAKE_CXX_EXTENSIONS=OFF \&lt;br /&gt;
 -DCMAKE_OSX_ARCHITECTURES=&amp;quot;arm64&amp;quot; \&lt;br /&gt;
 -DCMAKE_OSX_DEPLOYMENT_TARGET=13.1 \&lt;br /&gt;
 -DCMAKE_INSTALL_PREFIX=${PREFIX} \&lt;br /&gt;
 -DCMAKE_BUILD_TYPE=Release \&lt;br /&gt;
 -G &amp;quot;Unix Makefiles&amp;quot; ..&lt;br /&gt;
make -j 8&lt;br /&gt;
make install&lt;br /&gt;
cd ../..&lt;br /&gt;
cp simgear/simgear/math/simd.hxx build/include/simgear/math/&lt;br /&gt;
cp simgear/simgear/math/simd_neon.hxx build/include/simgear/math/&lt;br /&gt;
cp simgear/simgear/math/simd4x4_neon.hxx build/include/simgear/math/&lt;br /&gt;
&lt;br /&gt;
# Plib&lt;br /&gt;
brew install svn automake&lt;br /&gt;
svn checkout https://svn.code.sf.net/p/plib/code/trunk plib&lt;br /&gt;
cd plib&lt;br /&gt;
./autogen.sh&lt;br /&gt;
./configure --disable-pw --disable-sl --disable-psl --disable-ssg --disable-ssgaux --prefix=${PREFIX} CXXFLAGS=&amp;quot;-arch arm64 -mmacosx-version-min=13.1&amp;quot; CFLAGS=&amp;quot;-arch arm64 -mmacosx-version-min=13.1&amp;quot;&lt;br /&gt;
# use of undeclared identifier 'finite'; did you mean 'isfinite'&lt;br /&gt;
# Add `#define finite isfinite` to src/sg/sg.cxx&lt;br /&gt;
make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
# Flightgear&lt;br /&gt;
brew install qt@5&lt;br /&gt;
brew install speex speexdsp&lt;br /&gt;
brew install dbus libevent # not working for swift yet&lt;br /&gt;
git clone --branch next https://git.code.sf.net/p/flightgear/fgdata fgdata&lt;br /&gt;
git clone --branch next https://git.code.sf.net/p/flightgear/flightgear flightgear&lt;br /&gt;
cd flightgear&lt;br /&gt;
&lt;br /&gt;
# Changes to compile on Apple silicon&lt;br /&gt;
&lt;br /&gt;
CMakeLists.txt&lt;br /&gt;
@@ -438,7 +438,13 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL &amp;quot;Clang&amp;quot; OR CMAKE_CXX_COMPILER_ID STREQUAL &amp;quot;Ap&lt;br /&gt;
     set(CMAKE_CXX_FLAGS_RELWITHDEBINFO &amp;quot;-O3 -g -DNDEBUG&amp;quot;)&lt;br /&gt;
     set(CMAKE_C_FLAGS_RELWITHDEBINFO  &amp;quot;-O3 -g -DNDEBUG&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
-    set(SIMD_COMPILER_FLAGS &amp;quot;-msse2 -mfpmath=sse -ftree-vectorize -ftree-slp-vectorize&amp;quot;)&lt;br /&gt;
+    if (X86 OR X86_64)&lt;br /&gt;
+        set(SIMD_COMPILER_FLAGS &amp;quot;-msse2 -mfpmath=sse&amp;quot;)&lt;br /&gt;
+    endif()&lt;br /&gt;
+    set(SIMD_COMPILER_FLAGS &amp;quot;${SIMD_COMPILER_FLAGS} -ftree-vectorize -ftree-slp-vectorize&amp;quot;)&lt;br /&gt;
+&lt;br /&gt;
+    # set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY &amp;quot;libc++&amp;quot;)&lt;br /&gt;
+    # set(CMAKE_CXX_FLAGS &amp;quot;${CMAKE_CXX_FLAGS} -stdlib=libc++&amp;quot;)&lt;br /&gt;
     set(WARNING_FLAGS_C &amp;quot;-Wall&amp;quot;)&lt;br /&gt;
 endif()&lt;br /&gt;
&lt;br /&gt;
src/GUI/CocoaHelpers.mm&lt;br /&gt;
@@ -35,6 +35,10 @@&lt;br /&gt;
 #include &amp;lt;Foundation/NSLocale.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;AppKit/NSAlert.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
+#if defined(HAVE_QT)&lt;br /&gt;
+#  include &amp;lt;GUI/QtLauncher.hxx&amp;gt;&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
 // simgear&lt;br /&gt;
 #include &amp;lt;simgear/misc/sg_path.hxx&amp;gt;&lt;br /&gt;
 #include &amp;lt;simgear/debug/logstream.hxx&amp;gt;&lt;br /&gt;
@@ -46,10 +50,6 @@&lt;br /&gt;
 #include &amp;lt;Main/locale.hxx&amp;gt;&lt;br /&gt;
 #include &amp;lt;Main/globals.hxx&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
-#if defined(HAVE_QT)&lt;br /&gt;
-#  include &amp;lt;GUI/QtLauncher.hxx&amp;gt;&lt;br /&gt;
-#endif&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
mkdir build.flightgear&lt;br /&gt;
cd build.flightgear&lt;br /&gt;
cmake \&lt;br /&gt;
 -E env CFLAGS=&amp;quot;-Wno-deprecated-declarations -Wno-inconsistent-missing-override&amp;quot; CXXFLAGS=&amp;quot;-Wno-deprecated-declarations -Wno-inconsistent-missing-override&amp;quot; \&lt;br /&gt;
 cmake \&lt;br /&gt;
  -DFG_DATA_DIR=../../fgdata \&lt;br /&gt;
  -DSYSTEM_SPEEX=ON \&lt;br /&gt;
  -DCMAKE_OSX_ARCHITECTURES=&amp;quot;arm64&amp;quot; \&lt;br /&gt;
  -DCMAKE_OSX_DEPLOYMENT_TARGET=13.1 \&lt;br /&gt;
  -DCMAKE_INSTALL_PREFIX=${PREFIX} \&lt;br /&gt;
  -DCMAKE_BUILD_TYPE=&amp;quot;Release&amp;quot; \&lt;br /&gt;
  -DQt5_DIR=$(brew --prefix qt5)/lib/cmake/Qt5 \&lt;br /&gt;
  -DWITH_FGPANEL=false \&lt;br /&gt;
  -DCMAKE_CXX_STANDARD=17 \&lt;br /&gt;
  -DCMAKE_CXX_STANDARD_REQUIRED=ON \&lt;br /&gt;
  -DCMAKE_CXX_EXTENSIONS=OFF \&lt;br /&gt;
  -G &amp;quot;Unix Makefiles&amp;quot; ..&lt;br /&gt;
&lt;br /&gt;
  -DCMAKE_OSX_SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User:Fahim_Dalvi/Compiling_on_Apple_Silicon&amp;diff=138467</id>
		<title>User:Fahim Dalvi/Compiling on Apple Silicon</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User:Fahim_Dalvi/Compiling_on_Apple_Silicon&amp;diff=138467"/>
		<updated>2023-10-12T13:58:24Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dump of initial commands, to be improved...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
PREFIX=`pwd`/build&lt;br /&gt;
&lt;br /&gt;
brew install cmake freetype&lt;br /&gt;
&lt;br /&gt;
git clone --branch fgfs-osg-36-1 https://github.com/zakalawe/osg.git osg-custom-36&lt;br /&gt;
cd osg-custom-36&lt;br /&gt;
mkdir build.osg&lt;br /&gt;
cd build.osg&lt;br /&gt;
cmake \&lt;br /&gt;
 -D CMAKE_BUILD_TYPE=&amp;quot;Release&amp;quot;\&lt;br /&gt;
 -D CMAKE_CXX_FLAGS_RELEASE=&amp;quot;-O3 -pipe&amp;quot;\&lt;br /&gt;
 -D CMAKE_C_FLAGS_RELEASE=&amp;quot;-O3 -pipe&amp;quot;\&lt;br /&gt;
 -D CMAKE_INSTALL_PREFIX:PATH=&amp;quot;${PREFIX}&amp;quot;\&lt;br /&gt;
 -D CMAKE_INSTALL_RPATH_USE_LINK_PATH:BOOLEAN=&amp;quot;true&amp;quot; -G &amp;quot;Unix Makefiles&amp;quot; ..&lt;br /&gt;
make -j 8&lt;br /&gt;
make install&lt;br /&gt;
cd ../..&lt;br /&gt;
&lt;br /&gt;
brew install boost&lt;br /&gt;
&lt;br /&gt;
git clone --branch next https://git.code.sf.net/p/flightgear/simgear simgear&lt;br /&gt;
cd simgear&lt;br /&gt;
mkdir build.simgear&lt;br /&gt;
cd build.simgear &lt;br /&gt;
cmake \&lt;br /&gt;
 -DCMAKE_CXX_STANDARD=17 \&lt;br /&gt;
 -DCMAKE_CXX_STANDARD_REQUIRED=ON \&lt;br /&gt;
 -DCMAKE_CXX_EXTENSIONS=OFF \&lt;br /&gt;
 -DCMAKE_OSX_ARCHITECTURES=&amp;quot;arm64&amp;quot; \&lt;br /&gt;
 -DCMAKE_OSX_DEPLOYMENT_TARGET=13.1 \&lt;br /&gt;
 -DCMAKE_INSTALL_PREFIX=${PREFIX} \&lt;br /&gt;
 -DCMAKE_BUILD_TYPE=Release \&lt;br /&gt;
 -G &amp;quot;Unix Makefiles&amp;quot; ..&lt;br /&gt;
make -j 8&lt;br /&gt;
make install&lt;br /&gt;
cd ../..&lt;br /&gt;
&lt;br /&gt;
# Plib&lt;br /&gt;
brew install svn automake&lt;br /&gt;
svn checkout https://svn.code.sf.net/p/plib/code/trunk plib&lt;br /&gt;
cd plib&lt;br /&gt;
./autogen.sh&lt;br /&gt;
./configure --disable-pw --disable-sl --disable-psl --disable-ssg --disable-ssgaux --prefix=${PREFIX} CXXFLAGS=&amp;quot;-arch arm64 -mmacosx-version-min=13.1&amp;quot; CFLAGS=&amp;quot;-arch arm64 -mmacosx-version-min=13.1&amp;quot;&lt;br /&gt;
# use of undeclared identifier 'finite'; did you mean 'isfinite'&lt;br /&gt;
# Add `#define finite isfinite` to src/sg/sg.cxx&lt;br /&gt;
make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
# Flightgear&lt;br /&gt;
brew install qt@5&lt;br /&gt;
brew install speex speexdsp&lt;br /&gt;
brew install dbus libevent # not working for swift yet&lt;br /&gt;
git clone --branch next https://git.code.sf.net/p/flightgear/fgdata fgdata&lt;br /&gt;
git clone --branch next https://git.code.sf.net/p/flightgear/flightgear flightgear&lt;br /&gt;
cd flightgear&lt;br /&gt;
&lt;br /&gt;
# Changes to compile on Apple silicon&lt;br /&gt;
&lt;br /&gt;
CMakeLists.txt&lt;br /&gt;
@@ -438,7 +438,13 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL &amp;quot;Clang&amp;quot; OR CMAKE_CXX_COMPILER_ID STREQUAL &amp;quot;Ap&lt;br /&gt;
     set(CMAKE_CXX_FLAGS_RELWITHDEBINFO &amp;quot;-O3 -g -DNDEBUG&amp;quot;)&lt;br /&gt;
     set(CMAKE_C_FLAGS_RELWITHDEBINFO  &amp;quot;-O3 -g -DNDEBUG&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
-    set(SIMD_COMPILER_FLAGS &amp;quot;-msse2 -mfpmath=sse -ftree-vectorize -ftree-slp-vectorize&amp;quot;)&lt;br /&gt;
+    if (X86 OR X86_64)&lt;br /&gt;
+        set(SIMD_COMPILER_FLAGS &amp;quot;-msse2 -mfpmath=sse&amp;quot;)&lt;br /&gt;
+    endif()&lt;br /&gt;
+    set(SIMD_COMPILER_FLAGS &amp;quot;${SIMD_COMPILER_FLAGS} -ftree-vectorize -ftree-slp-vectorize&amp;quot;)&lt;br /&gt;
+&lt;br /&gt;
+    # set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY &amp;quot;libc++&amp;quot;)&lt;br /&gt;
+    # set(CMAKE_CXX_FLAGS &amp;quot;${CMAKE_CXX_FLAGS} -stdlib=libc++&amp;quot;)&lt;br /&gt;
     set(WARNING_FLAGS_C &amp;quot;-Wall&amp;quot;)&lt;br /&gt;
 endif()&lt;br /&gt;
&lt;br /&gt;
src/GUI/CocoaHelpers.mm&lt;br /&gt;
@@ -35,6 +35,10 @@&lt;br /&gt;
 #include &amp;lt;Foundation/NSLocale.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;AppKit/NSAlert.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
+#if defined(HAVE_QT)&lt;br /&gt;
+#  include &amp;lt;GUI/QtLauncher.hxx&amp;gt;&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
 // simgear&lt;br /&gt;
 #include &amp;lt;simgear/misc/sg_path.hxx&amp;gt;&lt;br /&gt;
 #include &amp;lt;simgear/debug/logstream.hxx&amp;gt;&lt;br /&gt;
@@ -46,10 +50,6 @@&lt;br /&gt;
 #include &amp;lt;Main/locale.hxx&amp;gt;&lt;br /&gt;
 #include &amp;lt;Main/globals.hxx&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
-#if defined(HAVE_QT)&lt;br /&gt;
-#  include &amp;lt;GUI/QtLauncher.hxx&amp;gt;&lt;br /&gt;
-#endif&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
mkdir build.flightgear&lt;br /&gt;
cd build.flightgear&lt;br /&gt;
cmake \&lt;br /&gt;
 -E env CFLAGS=&amp;quot;-Wno-deprecated-declarations -Wno-inconsistent-missing-override&amp;quot; CXXFLAGS=&amp;quot;-Wno-deprecated-declarations -Wno-inconsistent-missing-override&amp;quot; \&lt;br /&gt;
 cmake \&lt;br /&gt;
  -DFG_DATA_DIR=../../fgdata \&lt;br /&gt;
  -DSYSTEM_SPEEX=ON \&lt;br /&gt;
  -DCMAKE_OSX_ARCHITECTURES=&amp;quot;arm64&amp;quot; \&lt;br /&gt;
  -DCMAKE_OSX_DEPLOYMENT_TARGET=13.1 \&lt;br /&gt;
  -DCMAKE_INSTALL_PREFIX=${PREFIX} \&lt;br /&gt;
  -DCMAKE_BUILD_TYPE=&amp;quot;Release&amp;quot; \&lt;br /&gt;
  -DQt5_DIR=$(brew --prefix qt5)/lib/cmake/Qt5 \&lt;br /&gt;
  -DWITH_FGPANEL=false \&lt;br /&gt;
  -DCMAKE_CXX_STANDARD=17 \&lt;br /&gt;
  -DCMAKE_CXX_STANDARD_REQUIRED=ON \&lt;br /&gt;
  -DCMAKE_CXX_EXTENSIONS=OFF \&lt;br /&gt;
  -G &amp;quot;Unix Makefiles&amp;quot; ..&lt;br /&gt;
&lt;br /&gt;
  -DCMAKE_OSX_SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User:Fahim_Dalvi/Compiling_on_Apple_Silicon&amp;diff=138466</id>
		<title>User:Fahim Dalvi/Compiling on Apple Silicon</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User:Fahim_Dalvi/Compiling_on_Apple_Silicon&amp;diff=138466"/>
		<updated>2023-10-12T13:53:29Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dump of initial commands, to be improved...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
PREFIX=`pwd`/build&lt;br /&gt;
&lt;br /&gt;
brew install cmake freetype&lt;br /&gt;
&lt;br /&gt;
git clone --branch fgfs-osg-36-1 https://github.com/zakalawe/osg.git osg-custom-36&lt;br /&gt;
cd osg-custom-36&lt;br /&gt;
mkdir build.osg&lt;br /&gt;
cd build.osg&lt;br /&gt;
cmake \&lt;br /&gt;
 -D CMAKE_BUILD_TYPE=&amp;quot;Release&amp;quot;\&lt;br /&gt;
 -D CMAKE_CXX_FLAGS_RELEASE=&amp;quot;-O3 -pipe&amp;quot;\&lt;br /&gt;
 -D CMAKE_C_FLAGS_RELEASE=&amp;quot;-O3 -pipe&amp;quot;\&lt;br /&gt;
 -D CMAKE_INSTALL_PREFIX:PATH=&amp;quot;${PREFIX}&amp;quot;\&lt;br /&gt;
 -D CMAKE_INSTALL_RPATH_USE_LINK_PATH:BOOLEAN=&amp;quot;true&amp;quot; -G &amp;quot;Unix Makefiles&amp;quot; ..&lt;br /&gt;
make -j 8&lt;br /&gt;
make install&lt;br /&gt;
cd ../..&lt;br /&gt;
&lt;br /&gt;
brew install boost&lt;br /&gt;
&lt;br /&gt;
git clone --branch next https://git.code.sf.net/p/flightgear/simgear simgear&lt;br /&gt;
cd simgear&lt;br /&gt;
mkdir build.simgear&lt;br /&gt;
cd build.simgear &lt;br /&gt;
cmake \&lt;br /&gt;
 -DCMAKE_CXX_STANDARD=17 \&lt;br /&gt;
 -DCMAKE_CXX_STANDARD_REQUIRED=ON \&lt;br /&gt;
 -DCMAKE_CXX_EXTENSIONS=OFF \&lt;br /&gt;
 -DCMAKE_OSX_ARCHITECTURES=&amp;quot;arm64&amp;quot; \&lt;br /&gt;
 -DCMAKE_OSX_DEPLOYMENT_TARGET=13.1 \&lt;br /&gt;
 -DCMAKE_INSTALL_PREFIX=${PREFIX} \&lt;br /&gt;
 -DCMAKE_BUILD_TYPE=Release \&lt;br /&gt;
 -G &amp;quot;Unix Makefiles&amp;quot; ..&lt;br /&gt;
make -j 8&lt;br /&gt;
make install&lt;br /&gt;
cd ../..&lt;br /&gt;
&lt;br /&gt;
# Plib&lt;br /&gt;
brew install svn automake&lt;br /&gt;
svn checkout https://svn.code.sf.net/p/plib/code/trunk plib&lt;br /&gt;
cd plib&lt;br /&gt;
./autogen.sh&lt;br /&gt;
./configure --disable-pw --disable-sl --disable-psl --disable-ssg --disable-ssgaux --prefix=${PREFIX} CXXFLAGS=&amp;quot;-arch arm64 -mmacosx-version-min=13.1&amp;quot; CFLAGS=&amp;quot;-arch arm64 -mmacosx-version-min=13.1&amp;quot;&lt;br /&gt;
# use of undeclared identifier 'finite'; did you mean 'isfinite'&lt;br /&gt;
# Add `#define finite isfinite` to src/sg/sg.cxx&lt;br /&gt;
make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
# Flighrgear&lt;br /&gt;
brew install qt@5&lt;br /&gt;
brew install speex speexdsp&lt;br /&gt;
brew install dbus libevent # not working for swift yet&lt;br /&gt;
git clone --branch next https://git.code.sf.net/p/flightgear/fgdata fgdata&lt;br /&gt;
git clone --branch next https://git.code.sf.net/p/flightgear/flightgear flightgear&lt;br /&gt;
cd flightgear&lt;br /&gt;
mkdir build.flightgear&lt;br /&gt;
cd build.flightgear&lt;br /&gt;
cmake \&lt;br /&gt;
 -E env CFLAGS=&amp;quot;-Wno-deprecated-declarations -Wno-inconsistent-missing-override&amp;quot; CXXFLAGS=&amp;quot;-Wno-deprecated-declarations -Wno-inconsistent-missing-override&amp;quot; \&lt;br /&gt;
 cmake \&lt;br /&gt;
  -DFG_DATA_DIR=../../fgdata \&lt;br /&gt;
  -DSYSTEM_SPEEX=ON \&lt;br /&gt;
  -DCMAKE_OSX_ARCHITECTURES=&amp;quot;arm64&amp;quot; \&lt;br /&gt;
  -DCMAKE_OSX_DEPLOYMENT_TARGET=13.1 \&lt;br /&gt;
  -DCMAKE_INSTALL_PREFIX=${PREFIX} \&lt;br /&gt;
  -DCMAKE_BUILD_TYPE=&amp;quot;Release&amp;quot; \&lt;br /&gt;
  -DQt5_DIR=$(brew --prefix qt5)/lib/cmake/Qt5 \&lt;br /&gt;
  -DWITH_FGPANEL=false \&lt;br /&gt;
  -DCMAKE_CXX_STANDARD=17 \&lt;br /&gt;
  -DCMAKE_CXX_STANDARD_REQUIRED=ON \&lt;br /&gt;
  -DCMAKE_CXX_EXTENSIONS=OFF \&lt;br /&gt;
  -G &amp;quot;Unix Makefiles&amp;quot; ..&lt;br /&gt;
&lt;br /&gt;
  -DCMAKE_OSX_SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User:Fahim_Dalvi/Compiling_on_Apple_Silicon&amp;diff=138465</id>
		<title>User:Fahim Dalvi/Compiling on Apple Silicon</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User:Fahim_Dalvi/Compiling_on_Apple_Silicon&amp;diff=138465"/>
		<updated>2023-10-12T13:35:17Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dump of initial commands, to be improved...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone --branch fgfs-osg-36-1 https://github.com/zakalawe/osg.git osg-custom-36&lt;br /&gt;
mkdir build.osg&lt;br /&gt;
cd build.osg&lt;br /&gt;
cmake \&lt;br /&gt;
 -D CMAKE_BUILD_TYPE=&amp;quot;Release&amp;quot;\&lt;br /&gt;
 -D CMAKE_CXX_FLAGS_RELEASE=&amp;quot;-O3 -pipe&amp;quot;\&lt;br /&gt;
 -D CMAKE_C_FLAGS_RELEASE=&amp;quot;-O3 -pipe&amp;quot;\&lt;br /&gt;
 -D CMAKE_INSTALL_PREFIX:PATH=&amp;quot;${PREFIX}&amp;quot;\&lt;br /&gt;
 -D CMAKE_INSTALL_RPATH_USE_LINK_PATH:BOOLEAN=&amp;quot;true&amp;quot; -G &amp;quot;Unix Makefiles&amp;quot; ..&lt;br /&gt;
make -j 8&lt;br /&gt;
make install&lt;br /&gt;
cd ../..&lt;br /&gt;
&lt;br /&gt;
brew install boost&lt;br /&gt;
&lt;br /&gt;
git clone --branch next https://git.code.sf.net/p/flightgear/simgear simgear&lt;br /&gt;
cd simgear&lt;br /&gt;
mkdir build.simgear&lt;br /&gt;
cd build.simgear &lt;br /&gt;
cmake \&lt;br /&gt;
 -DCMAKE_CXX_STANDARD=17 \&lt;br /&gt;
 -DCMAKE_CXX_STANDARD_REQUIRED=ON \&lt;br /&gt;
 -DCMAKE_CXX_EXTENSIONS=OFF \&lt;br /&gt;
 -DCMAKE_OSX_ARCHITECTURES=&amp;quot;arm64&amp;quot; \&lt;br /&gt;
 -DCMAKE_OSX_DEPLOYMENT_TARGET=13.1 \&lt;br /&gt;
 -DCMAKE_INSTALL_PREFIX=${PREFIX} \&lt;br /&gt;
 -DCMAKE_BUILD_TYPE=Release \&lt;br /&gt;
 -G &amp;quot;Unix Makefiles&amp;quot; ..&lt;br /&gt;
make -j 8&lt;br /&gt;
&lt;br /&gt;
cmake \&lt;br /&gt;
 -DCMAKE_INSTALL_PREFIX=${PREFIX} \&lt;br /&gt;
 -DCMAKE_BUILD_TYPE=Release \&lt;br /&gt;
 -G &amp;quot;Unix Makefiles&amp;quot; ..&lt;br /&gt;
make -j 4&lt;br /&gt;
&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
# Plib&lt;br /&gt;
svn checkout https://svn.code.sf.net/p/plib/code/trunk plib&lt;br /&gt;
cd plib&lt;br /&gt;
./autogen.sh&lt;br /&gt;
./configure --disable-pw --disable-sl --disable-psl --disable-ssg --disable-ssgaux --prefix=${PREFIX} CXXFLAGS=&amp;quot;-arch arm64 -mmacosx-version-min=13.1&amp;quot; CFLAGS=&amp;quot;-arch arm64 -mmacosx-version-min=13.1&amp;quot;&lt;br /&gt;
# use of undeclared identifier 'finite'; did you mean 'isfinite'&lt;br /&gt;
make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
# Flighrgear&lt;br /&gt;
brew install --cask qt@5&lt;br /&gt;
brew install speex speexdsp&lt;br /&gt;
brew install dbus libevent # not working for swift yet&lt;br /&gt;
git clone --branch next https://git.code.sf.net/p/flightgear/flightgear flightgear&lt;br /&gt;
cd flightgear&lt;br /&gt;
mkdir build.flightgear&lt;br /&gt;
cd build.flightgear&lt;br /&gt;
cmake \&lt;br /&gt;
 -E env CFLAGS=&amp;quot;-Wno-deprecated-declarations -Wno-inconsistent-missing-override&amp;quot; CXXFLAGS=&amp;quot;-Wno-deprecated-declarations -Wno-inconsistent-missing-override&amp;quot; \&lt;br /&gt;
 cmake \&lt;br /&gt;
  -DFG_DATA_DIR=/Users/devmachine/Desktop/src/fgdata \&lt;br /&gt;
  -DSYSTEM_SPEEX=ON \&lt;br /&gt;
  -DCMAKE_OSX_ARCHITECTURES=&amp;quot;arm64&amp;quot; \&lt;br /&gt;
  -DCMAKE_OSX_DEPLOYMENT_TARGET=13.1 \&lt;br /&gt;
  -DCMAKE_INSTALL_PREFIX=${PREFIX} \&lt;br /&gt;
  -DCMAKE_BUILD_TYPE=&amp;quot;Release&amp;quot; \&lt;br /&gt;
  -DQt5_DIR=$(brew --prefix qt5)/lib/cmake/Qt5 \&lt;br /&gt;
  -DWITH_FGPANEL=false \&lt;br /&gt;
  -DCMAKE_CXX_STANDARD=17 \&lt;br /&gt;
  -DCMAKE_CXX_STANDARD_REQUIRED=ON \&lt;br /&gt;
  -DCMAKE_CXX_EXTENSIONS=OFF \&lt;br /&gt;
  -G &amp;quot;Unix Makefiles&amp;quot; ..&lt;br /&gt;
&lt;br /&gt;
  -DCMAKE_OSX_SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User:Fahim_Dalvi/Compiling_on_Apple_Silicon&amp;diff=138464</id>
		<title>User:Fahim Dalvi/Compiling on Apple Silicon</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User:Fahim_Dalvi/Compiling_on_Apple_Silicon&amp;diff=138464"/>
		<updated>2023-10-12T13:33:06Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: Created page with &amp;quot;Dump of initial commands, to be improved...  git clone --branch fgfs-osg-36-1 https://github.com/zakalawe/osg.git osg-custom-36 mkdir build.osg cd build.osg cmake \  -D CMAKE_...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dump of initial commands, to be improved...&lt;br /&gt;
&lt;br /&gt;
git clone --branch fgfs-osg-36-1 https://github.com/zakalawe/osg.git osg-custom-36&lt;br /&gt;
mkdir build.osg&lt;br /&gt;
cd build.osg&lt;br /&gt;
cmake \&lt;br /&gt;
 -D CMAKE_BUILD_TYPE=&amp;quot;Release&amp;quot;\&lt;br /&gt;
 -D CMAKE_CXX_FLAGS_RELEASE=&amp;quot;-O3 -pipe&amp;quot;\&lt;br /&gt;
 -D CMAKE_C_FLAGS_RELEASE=&amp;quot;-O3 -pipe&amp;quot;\&lt;br /&gt;
 -D CMAKE_INSTALL_PREFIX:PATH=&amp;quot;${PREFIX}&amp;quot;\&lt;br /&gt;
 -D CMAKE_INSTALL_RPATH_USE_LINK_PATH:BOOLEAN=&amp;quot;true&amp;quot; -G &amp;quot;Unix Makefiles&amp;quot; ..&lt;br /&gt;
make -j 8&lt;br /&gt;
make install&lt;br /&gt;
cd ../..&lt;br /&gt;
&lt;br /&gt;
brew install boost&lt;br /&gt;
&lt;br /&gt;
git clone --branch next https://git.code.sf.net/p/flightgear/simgear simgear&lt;br /&gt;
cd simgear&lt;br /&gt;
mkdir build.simgear&lt;br /&gt;
cd build.simgear &lt;br /&gt;
cmake \&lt;br /&gt;
 -DCMAKE_CXX_STANDARD=17 \&lt;br /&gt;
 -DCMAKE_CXX_STANDARD_REQUIRED=ON \&lt;br /&gt;
 -DCMAKE_CXX_EXTENSIONS=OFF \&lt;br /&gt;
 -DCMAKE_OSX_ARCHITECTURES=&amp;quot;arm64&amp;quot; \&lt;br /&gt;
 -DCMAKE_OSX_DEPLOYMENT_TARGET=13.1 \&lt;br /&gt;
 -DCMAKE_INSTALL_PREFIX=${PREFIX} \&lt;br /&gt;
 -DCMAKE_BUILD_TYPE=Release \&lt;br /&gt;
 -G &amp;quot;Unix Makefiles&amp;quot; ..&lt;br /&gt;
make -j 8&lt;br /&gt;
&lt;br /&gt;
cmake \&lt;br /&gt;
 -DCMAKE_INSTALL_PREFIX=${PREFIX} \&lt;br /&gt;
 -DCMAKE_BUILD_TYPE=Release \&lt;br /&gt;
 -G &amp;quot;Unix Makefiles&amp;quot; ..&lt;br /&gt;
make -j 4&lt;br /&gt;
&lt;br /&gt;
make install&lt;br /&gt;
&lt;br /&gt;
# Plib&lt;br /&gt;
svn checkout https://svn.code.sf.net/p/plib/code/trunk plib&lt;br /&gt;
cd plib&lt;br /&gt;
./autogen.sh&lt;br /&gt;
./configure --disable-pw --disable-sl --disable-psl --disable-ssg --disable-ssgaux --prefix=${PREFIX} CXXFLAGS=&amp;quot;-arch arm64 -mmacosx-version-min=13.1&amp;quot; CFLAGS=&amp;quot;-arch arm64 -mmacosx-version-min=13.1&amp;quot;&lt;br /&gt;
# use of undeclared identifier 'finite'; did you mean 'isfinite'&lt;br /&gt;
make install&lt;br /&gt;
cd ..&lt;br /&gt;
&lt;br /&gt;
# Flighrgear&lt;br /&gt;
brew install --cask qt@5&lt;br /&gt;
brew install speex speexdsp&lt;br /&gt;
brew install dbus libevent # not working for swift yet&lt;br /&gt;
git clone --branch next https://git.code.sf.net/p/flightgear/flightgear flightgear&lt;br /&gt;
cd flightgear&lt;br /&gt;
mkdir build.flightgear&lt;br /&gt;
cd build.flightgear&lt;br /&gt;
cmake \&lt;br /&gt;
 -E env CFLAGS=&amp;quot;-Wno-deprecated-declarations -Wno-inconsistent-missing-override&amp;quot; CXXFLAGS=&amp;quot;-Wno-deprecated-declarations -Wno-inconsistent-missing-override&amp;quot; \&lt;br /&gt;
 cmake \&lt;br /&gt;
  -DFG_DATA_DIR=/Users/devmachine/Desktop/src/fgdata \&lt;br /&gt;
  -DSYSTEM_SPEEX=ON \&lt;br /&gt;
  -DCMAKE_OSX_ARCHITECTURES=&amp;quot;arm64&amp;quot; \&lt;br /&gt;
  -DCMAKE_OSX_DEPLOYMENT_TARGET=13.1 \&lt;br /&gt;
  -DCMAKE_INSTALL_PREFIX=${PREFIX} \&lt;br /&gt;
  -DCMAKE_BUILD_TYPE=&amp;quot;Release&amp;quot; \&lt;br /&gt;
  -DQt5_DIR=$(brew --prefix qt5)/lib/cmake/Qt5 \&lt;br /&gt;
  -DWITH_FGPANEL=false \&lt;br /&gt;
  -DCMAKE_CXX_STANDARD=17 \&lt;br /&gt;
  -DCMAKE_CXX_STANDARD_REQUIRED=ON \&lt;br /&gt;
  -DCMAKE_CXX_EXTENSIONS=OFF \&lt;br /&gt;
  -G &amp;quot;Unix Makefiles&amp;quot; ..&lt;br /&gt;
&lt;br /&gt;
  -DCMAKE_OSX_SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Howto:Create_WS3.0_terrain&amp;diff=137576</id>
		<title>Howto:Create WS3.0 terrain</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Howto:Create_WS3.0_terrain&amp;diff=137576"/>
		<updated>2023-04-20T13:39:09Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: Change references to docker image (it has been renamed to fix a typo)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WS30 Navbar}}&lt;br /&gt;
This article provides instructions on how to generate base WS3.0 terrain.&lt;br /&gt;
&lt;br /&gt;
WS3.0 terrain consists of two parts:&lt;br /&gt;
&lt;br /&gt;
# A landclass texture draped over an elevation model.  This is the terrain mesh.&lt;br /&gt;
# Line features such as roads, railways and rivers.  This is draped over the terrain mesh at runtime.&lt;br /&gt;
&lt;br /&gt;
== Getting the base data ==&lt;br /&gt;
First, you need two pieces of data for the scenery area you are generating:&lt;br /&gt;
&lt;br /&gt;
# An elevation model (aka DEM).  Use of the &amp;quot;NASADEM&amp;quot; with 30m resolution is recommended, and is available from [https://lpdaac.usgs.gov/products/nasadem_hgtv001/ here], and with an interactive browser [https://search.earthdata.nasa.gov/search here].&lt;br /&gt;
# Landclass data showing what type of terrain is at each point of the surface.  This is often either a Raster Geotiff (effectively a texture), or vector data.  For Europe, use of [https://land.copernicus.eu/pan-european/corine-land-cover/clc2018 CORINE] is recommended.  For the USA NLCD is recommended&lt;br /&gt;
Put these files into a &amp;lt;code&amp;gt;data&amp;lt;/code&amp;gt; directory and create an &amp;lt;code&amp;gt;output&amp;lt;/code&amp;gt; directory next to it. This is where the scenery will be generated..&lt;br /&gt;
&lt;br /&gt;
== Pre-processing the Elevation Model ==&lt;br /&gt;
If you are using NASADEM, then the elevation model is already using WGS84 and is ready to use as-is.  &lt;br /&gt;
&lt;br /&gt;
If you are using another elevation model, then you may need to re-project it using QGIS/gdalwarp to the WGS84 CRS (aka EPSG:4326).&lt;br /&gt;
&lt;br /&gt;
== Pre-processing the Landclass Data ==&lt;br /&gt;
For any landclass data we need to ensure the data is in the correct format.  That means:&lt;br /&gt;
&lt;br /&gt;
# Uses the WGS84 Coordinate Reference System.  The ensures that the terrain generation step is efficient.&lt;br /&gt;
# Is a Raster (geotiff) rather than Vector data.  This raster will become the texture on the terrain that the terrain shaders do their magic on.&lt;br /&gt;
# Has the correct landclass values for each terrain type.  Different landclass systems use different values.  At present we use the CORINE values, defined in [https://sourceforge.net/p/flightgear/fgdata/ci/next/tree/Materials/base/landclass-mapping.xml Materials/base/landclass-mapping.xml].&lt;br /&gt;
&lt;br /&gt;
Below is a quick table showing what steps you need to take for common landclass data sources.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Landclass Data&lt;br /&gt;
!Warp to WGS84 required?&lt;br /&gt;
!Landclass re-classification Required?&lt;br /&gt;
!Raster Simplification Required?&lt;br /&gt;
!Conversion to Raster Required?&lt;br /&gt;
|-&lt;br /&gt;
|CORINE Raster&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|-&lt;br /&gt;
|CORINE Vector&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|NLCD&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|}&lt;br /&gt;
The easiest way to do these operations is using QGIS, which is available for most platforms.  If you are scripting a toolchain, the QGIS tools include command-line equivalents for all commands.&lt;br /&gt;
&lt;br /&gt;
When using QGIS, set the Project CRS to WGS84 (aka EPSG:4326).  You can then add layers of Raster or Vector data from files from the &amp;lt;code&amp;gt;Layer-&amp;gt;Add Layer&amp;lt;/code&amp;gt; menu.  When performing any operations, &amp;lt;u&amp;gt;always&amp;lt;/u&amp;gt; write out the data to a real file so you can go back to it later. Disk space is cheap :).&lt;br /&gt;
&lt;br /&gt;
=== Warping Raster Layers to WGS84 ===&lt;br /&gt;
This is applicable to CORINE Raster data&lt;br /&gt;
&lt;br /&gt;
You can warp a raster layer to a different CRS using the Raster-&amp;gt;Projections-Warp (Reproject) tool.  &lt;br /&gt;
&lt;br /&gt;
Select the following options in the dialog:&lt;br /&gt;
&lt;br /&gt;
* Input Layer - Check you have selected the correct layer. The CRS is shown at the right.&lt;br /&gt;
* Target CRS -   set to &amp;lt;code&amp;gt;EPSG:4326 - WGS84&amp;lt;/code&amp;gt;, which should be your project CRS.&lt;br /&gt;
* Resampling Method to Use - Nearest Neighbour.  (Landclass data is not like normal images.  You don't want to interpolate between values.)&lt;br /&gt;
* Nodata value for output bands - 0.0  (This means that any data at the edges will be Ocean, usually a reasonable default)&lt;br /&gt;
* Advanced Parameters - No Compression&lt;br /&gt;
* Output data type - Byte&lt;br /&gt;
* Reprojected - Choose a target filename&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Alternatively you can do this step from the commandline.&lt;br /&gt;
 gdalwarp -t_srs EPSG:4326 -dstnodata 0.0 -r near -ot Byte -of GTiff -co COMPRESS=NONE -co BIGTIFF=IF_NEEDED /home/stuart/FlightGear/VPB/data/CORINE/u2018_clc2018_v2020_20u1_raster100m/DATA/U2018_CLC2018_V2020_20u1.tif /home/stuart/FlightGear/VPB/data/scratch/corine_WGS84.tif&lt;br /&gt;
&lt;br /&gt;
=== Warping Vector Layers to WGS84 ===&lt;br /&gt;
You can warp a vector layer using Vector-&amp;gt;Data Management Tools-&amp;gt;Reproject Layer.  &lt;br /&gt;
&lt;br /&gt;
Set the following options in the dialog:&lt;br /&gt;
&lt;br /&gt;
* Input Layer - Check you have selected the correct layer. The CRS is shown at the right.&lt;br /&gt;
* Target CRS -   set to &amp;lt;code&amp;gt;EPSG:4326 - WGS84&amp;lt;/code&amp;gt;, which should be your project CRS.&lt;br /&gt;
* Reprojected - Choose a target filename&lt;br /&gt;
&lt;br /&gt;
=== Reclassifying Vector Layers ===&lt;br /&gt;
For CORINE vector data in particular, the attributes used in the vector data are not the same as those used by the CORINE Raster data.  So we need to create a new attribute on the data.&lt;br /&gt;
[[File:Field Calculator.png|thumb|QGIS Field Calculator]]&lt;br /&gt;
To do this &lt;br /&gt;
&lt;br /&gt;
* Select &amp;lt;code&amp;gt;Layer-&amp;gt;Open Attribute Table&amp;lt;/code&amp;gt;.  You should see a table with multiple columns.  Each row represents a feature in the data.&lt;br /&gt;
* Click on &amp;lt;code&amp;gt;New Field&amp;lt;/code&amp;gt; (Ctrl+W) and create a new field called Landclass of type &amp;quot;Whole Number (Integer)&amp;quot;.  This will create a new column which we will populate with the correct landclass data&lt;br /&gt;
* Click on the &amp;lt;code&amp;gt;Open Field Calculator&amp;lt;/code&amp;gt; button (Ctrl + I).  (If you get an error about only being able to create Virtual fields, go back to the Layer menu, export it and open the exported file).&lt;br /&gt;
* Select the following options:&lt;br /&gt;
** Update Existing Field&lt;br /&gt;
** Select the Landclass field you just created.&lt;br /&gt;
** Copy the contents of https://sourceforge.net/p/flightgear/fgmeta/ci/next/tree/ws30/mappings/corine_vector.txt into the Expression box.  This is just some simple code to set the attribute correctly.  The code should be correct for CORINE vector data.  If your data is from other sources you will need to work out how you want to map your source data landclasses to the CORINE ones.  [https://sourceforge.net/p/flightgear/fgdata/ci/next/tree/Materials/base/landclass-mapping.xml Materials/base/landclass-mapping.xml] can be used as a guide.&lt;br /&gt;
* Select &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;.  You should see that your landclass column is now populated with the landclass data.&lt;br /&gt;
* Select &amp;lt;code&amp;gt;Layer-&amp;gt;Save Layer Edits&amp;lt;/code&amp;gt; to save you changes&lt;br /&gt;
&lt;br /&gt;
=== Creating a Raster from a Vector Layer ===&lt;br /&gt;
To create a Raster from a Vector Layer select &amp;lt;code&amp;gt;Raster-&amp;gt;Conversion-&amp;gt;Rasterize (Vector to Raster)&amp;lt;/code&amp;gt;.  &lt;br /&gt;
[[File:QGIS Rasterize (Vector to Raster).png|thumb|Creating a Raster from a Vector Layer - QGIS Rasterize]]&lt;br /&gt;
Select the following options:&lt;br /&gt;
&lt;br /&gt;
* Input Layer - correct layer, check CRS&lt;br /&gt;
* Field to use for burn-in value - select the Landclass column you created above.&lt;br /&gt;
* Output raster size units.  This is going to set the resolution of your raster.  You can work out the resolution in two different ways:&lt;br /&gt;
** Select &amp;quot;Georeferenced units&amp;quot; and determine how many degrees each pixel is in latitude and longitude.&lt;br /&gt;
** Select &amp;quot;Pixels&amp;quot; and determine the size of raster you want in pixels.  [https://www.nhc.noaa.gov/gccalc.shtml This] is a good calculator to help.&lt;br /&gt;
* Width/Horizontal Resolution.  Enter the values you've calculated for the horizontal resolution (longitudinal), or the width of the raster&lt;br /&gt;
* Height/Vertical Resolution.    Enter the values you've calculated for the vertical resolution (latitude or the height of the raster&lt;br /&gt;
* Output extent - Select an option from the box on the right.    You can edit the text afterwards.&lt;br /&gt;
* Assign a specific nodata value to output bands - Select 0.0 for Ocean.  CORINE vector data in particular has a lot of nodata for Oceans&lt;br /&gt;
* Advanced Parameters - No Compression&lt;br /&gt;
* Output data type - Byte&lt;br /&gt;
* Rasterized - Select a new filename&lt;br /&gt;
&lt;br /&gt;
=== Simplifying a Raster Layer ===&lt;br /&gt;
Some Raster Landclass data (NLCD included) has too much noise - in particular large US highway systems are identified as Urban areas.&lt;br /&gt;
&lt;br /&gt;
To smooth it out we can use the GRASS &amp;lt;code&amp;gt;n.neighbors&amp;lt;/code&amp;gt; function from the Processing Toolbox in QGIS.&lt;br /&gt;
&lt;br /&gt;
Select the following options:&lt;br /&gt;
&lt;br /&gt;
* Input Layer - correct layer, check CRS&lt;br /&gt;
* Neighborhood operation - median.  (This is not a normal image, so using an average will result in weird values)&lt;br /&gt;
* Neighborhood size - 5.&lt;br /&gt;
* Neighbors - Select a new filename.&lt;br /&gt;
&lt;br /&gt;
=== Reclassifying a Raster Layer ===&lt;br /&gt;
WS3.0 uses CORINE landclass values.  If using data from other sources it needs to be reclassified to the correct values.  &lt;br /&gt;
&lt;br /&gt;
To do this select &amp;lt;code&amp;gt;GRASS-&amp;gt;Raster-&amp;gt;r.reclass&amp;lt;/code&amp;gt; from the Processing Toolbox.&lt;br /&gt;
&lt;br /&gt;
Select the following options:&lt;br /&gt;
&lt;br /&gt;
* Input Raster Layer - correct layer, check CRS&lt;br /&gt;
* Reclass rules text - copy in the contents of https://sourceforge.net/p/flightgear/fgmeta/ci/next/tree/ws30/mappings/nlcd2019.txt.  Or an appropriate mapping from your landclass data to CORINE.  Note that you can also reference a file using the &amp;quot;File containing reclass rules&amp;quot; option. Note a mapping of 22 24 = 1 is the same as 22 and 24 = 1. For a range of 22 to 24 use 22 23 24 = 1.&lt;br /&gt;
* Reclassified - Select a new filename.&lt;br /&gt;
&lt;br /&gt;
(If this doesn't work a similar function is available in the Processing Toolbox under &amp;lt;code&amp;gt;Raster analysis-&amp;gt;Reclassify by table&amp;lt;/code&amp;gt;.  However this doesn't save your table once you close the dialog, and entries have to be manually entered individually which takes a lot of effort)&lt;br /&gt;
&lt;br /&gt;
=== Step By Step Procedure for Processing NLCD for the USA using the Raster Calculator, Up sampling and GRASS r.neighbors===&lt;br /&gt;
&lt;br /&gt;
We will use a predetermined file naming convention throughout this procedure for simplicity. You can use a naming convention of your choice.&lt;br /&gt;
&lt;br /&gt;
* Step 1 - Re-class from NLCD values to FlightGear values and all man made data to &amp;quot;grasscover&amp;quot; for a clean land cover base.&lt;br /&gt;
# Open Raster Calculator&lt;br /&gt;
# Under &amp;quot;Output layer&amp;quot; choose a new filename to save the new raster to. We'll use Kansas_reclass-grass.tiff.&lt;br /&gt;
# Copy the following into the &amp;quot;Raster Calculator Expression&amp;quot; box. Where Kansas_4326-84@1 is the name of your raw, correct CRS NLCD.&lt;br /&gt;
&lt;br /&gt;
(&amp;quot;Kansas_4326-84@1&amp;quot; = 11) * 41 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 12) * 34 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 21) * 26 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 22) * 26 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 23) * 26 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 24) * 26 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 31) * 27 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 41) * 23 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 42) * 24 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 43) * 25 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 51) * 30 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 52) * 29 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 71) * 26 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 72) * 32 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 73) * 31 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 74) * 31 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 75) * 32 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 81) * 18 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 82) * 19 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 90) * 25 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 95) * 35&lt;br /&gt;
&lt;br /&gt;
    Click on &amp;quot;OK&amp;quot;. When finished you will have a new raster with all man made clutter removed and changed to &amp;quot;grasscover&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* Step 2 - Make a new Urban layer of all all man made clutter.&lt;br /&gt;
# Open Raster Calculator&lt;br /&gt;
# Under &amp;quot;Output layer&amp;quot; choose a new filename to save the new raster to. We'll use Kansas_urban.tiff.&lt;br /&gt;
# Copy the following into the &amp;quot;Raster Calculator Expression&amp;quot; box. Where Kansas_4326-84@1 is the name of your raw, correct CRS NLCD.&lt;br /&gt;
&lt;br /&gt;
(&amp;quot;Kansas_4326-84@1&amp;quot; = 21) * 10 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 22) * 10 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 23) * 1 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 24) * 1&lt;br /&gt;
&lt;br /&gt;
    Click on &amp;quot;Run&amp;quot;. When finished you will have a new raster with only all man made clutter.&lt;br /&gt;
&lt;br /&gt;
* Step 3 - Make a new raster of leaving only towns and larger man made structures.&lt;br /&gt;
# Click on the Kansas_urban-only layer so it is the active layer.&lt;br /&gt;
# Click on GRASS -&amp;gt; Raster (r.*) -&amp;gt; r.neighbors&lt;br /&gt;
# Change the &amp;quot;Neighbourhood operation&amp;quot; to &amp;quot;median&amp;quot; and the &amp;quot;Neighbourhood size&amp;quot; to &amp;quot;7&amp;quot;. You might have to adjust the size value to get your desired results.&lt;br /&gt;
# Under Neighbors choose a new filename to save the new raster to. We'll use Kansas_urban-only.tiff.&lt;br /&gt;
&lt;br /&gt;
    Click on &amp;quot;Run&amp;quot;. When finished you will have a new raster with only towns and larger man made structures.&lt;br /&gt;
&lt;br /&gt;
* Step 4 - Combine the clean, raw, reclassed base raster and the new town and larger structure raster into a new raster.&lt;br /&gt;
# Open Raster Calculator&lt;br /&gt;
# Under &amp;quot;Output layer&amp;quot; choose a new filename to save the new raster to. We'll use Kansas_adjusted-combined.tiff.&lt;br /&gt;
# Copy the following into the &amp;quot;Raster Calculator Expression&amp;quot; box. Where Kansas_urban-only@1 and Kansas_reclass-grass@1 are the names of previously processed step 1 and step 3 data.&lt;br /&gt;
&lt;br /&gt;
(&amp;quot;Kansas_urban-only@1&amp;quot; &amp;lt; 1) * &amp;quot;Kansas_reclass-grass@1&amp;quot; + (&amp;quot;Kansas_urban-only@1&amp;quot; != 0) * &amp;quot;Kansas_urban-only@1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    Click on &amp;quot;OK&amp;quot;. When finished you will have a new raster with only towns and larger man made structures, road easements of grasscover and other default unsmoothed land cover.&lt;br /&gt;
&lt;br /&gt;
* Step 5 - Upsample 4x to a new higher resolution raster that can then be smoothed.&lt;br /&gt;
# Click on the Kansas_adjusted-combined layer.&lt;br /&gt;
# Under Layer &amp;quot;File name&amp;quot; choose a new filename to save this new raster to. We'll use Kansas_final-prep-4x.tiff.&lt;br /&gt;
# Change the &amp;quot;Resolution (Current:layer) -&amp;gt; Horizontal and Vertical to a value that equals, current &amp;quot;Layer Resolution&amp;quot; / 4.&lt;br /&gt;
&lt;br /&gt;
    Click on &amp;quot;OK&amp;quot;. When finished you will have a new up-scaled higher resolution raster.&lt;br /&gt;
&lt;br /&gt;
* Step 6 - Smooth the Upsampled &amp;quot;final prep&amp;quot; layer.&lt;br /&gt;
# Click on the Kansas_final-prep-4x layer so it is the active layer.&lt;br /&gt;
# Click on GRASS -&amp;gt; Raster (r.*) -&amp;gt; r.neighbors&lt;br /&gt;
# Change the &amp;quot;Neighbourhood operation&amp;quot; to &amp;quot;median&amp;quot; and the &amp;quot;Neighbourhood size&amp;quot; to &amp;quot;7&amp;quot;. You might have to adjust the size value to get your desired results.&lt;br /&gt;
# Under &amp;quot;Neighbors&amp;quot; choose a new filename to save the new raster to. We'll use Kansas_4326-84-hd.tiff.&lt;br /&gt;
 &lt;br /&gt;
    Click on &amp;quot;Run&amp;quot;. When finished you will have the final smoothed, higher resolution raster to use for building your scenery.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;Optional HD Water Option&amp;lt;/big&amp;gt; &lt;br /&gt;
* Step 7 - Obtain and load hi resolution vector layer&lt;br /&gt;
Make sure that the vector layer and the raster layer you will eventually merge to have the same projection. ** Extent can be different if you use the option below.&lt;br /&gt;
# Use Top Menu: &amp;quot;Raster&amp;quot; -&amp;gt; &amp;quot;Conversion&amp;quot; -&amp;gt; &amp;quot;Rasterize (vector to raster)&amp;quot; or Processing Toolbax: GDAL -&amp;gt; &amp;quot;Vector conversion&amp;quot; -&amp;gt; &amp;quot;Rasterize (vector to raster)&amp;quot;&lt;br /&gt;
# Input layer = Kansas_water_4326-84&lt;br /&gt;
# Fixed value to burn = 41 (water)&lt;br /&gt;
# Output raster size units = &amp;quot;Georeferenced units&amp;quot;&lt;br /&gt;
# Width/Horizontal resolution = 0.00008309125 (4x the base NLCD resolution ) &lt;br /&gt;
# Height/Vertical resolution = 0.00008309125 (4x the base NLCD resolution)&lt;br /&gt;
# ** Output extent = Select the raster layer you will eventually merge with as the &amp;quot;Output extent&amp;quot;.&lt;br /&gt;
# Under &amp;quot;Rasterized&amp;quot; choose a new filename to save the new raster to. We'll use Kansas_4326-84-hd-water.tiff.&lt;br /&gt;
&lt;br /&gt;
    Click &amp;quot;Run&amp;quot; to generate the hi resolution raster layer.&lt;br /&gt;
&lt;br /&gt;
* Step 8 - Reclass hi res, smoothed water to grass&lt;br /&gt;
# Open Raster Calculator&lt;br /&gt;
# Under &amp;quot;Output layer&amp;quot; choose a new filename to save the new raster to. We'll use Kansas_4326-84-hd-nowater.tiff.&lt;br /&gt;
# Copy the following into the &amp;quot;Raster Calculator Expression&amp;quot; box. Where Kansas_4326-84-hd is the name of your hi resolution, smoothed NLCD that includes the water data. &lt;br /&gt;
&amp;quot;Kansas_4326-84-hd@1&amp;quot; * (&amp;quot;Kansas_4326-84-hd@1&amp;quot; != 41) + 26 * (&amp;quot;Kansas_4326-84-hd@1 = 41&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    Click on &amp;quot;OK&amp;quot;. When finished you will have a new raster with the water layer changed to grassland. Another choice would be to change it to sand. &lt;br /&gt;
&lt;br /&gt;
* Step 9 - Combine the hi resolution no water raster and the hi resolution water raster.&lt;br /&gt;
# Use Top Menu: &amp;quot;Raster&amp;quot; -&amp;gt; &amp;quot;Miscellaneous&amp;quot; -&amp;gt; &amp;quot;Merge&amp;quot; or Processing Toolbax: GDAL -&amp;gt; Raster Miscellaneous -&amp;gt; Merge&lt;br /&gt;
# Input layers = Select &amp;quot;Kansas_4326-84-hd-nowater@1&amp;quot; and Kansas_4326-84-hd-water.tiff&lt;br /&gt;
# Output data type = &amp;quot;byte&amp;quot;.&lt;br /&gt;
# Under &amp;quot;Merged&amp;quot; choose a new filename to save the new raster to. We'll use Kansas_4326-84-hdwater.tiff.&lt;br /&gt;
&lt;br /&gt;
    Click &amp;quot;Run&amp;quot; to generate the new merged hi resolution raster layer.&lt;br /&gt;
&lt;br /&gt;
== Setting up Virtual Planet Builder using docker ==&lt;br /&gt;
Generating the scenery uses an OSG tool called Virtual Planet Builder.  Fortunately, there is a docker image so you don't need to build this yourself.  Instead it will run as a container inside docker.&lt;br /&gt;
&lt;br /&gt;
To set this up:&lt;br /&gt;
&lt;br /&gt;
# Install [https://docs.docker.com/get-started/ Docker] on your platform.&lt;br /&gt;
# On your own machine, pull the docker image&lt;br /&gt;
 docker pull flightgear/ws30-vpb-generator:latest&lt;br /&gt;
&lt;br /&gt;
You now have a docker image on your own machine you can run.&lt;br /&gt;
&lt;br /&gt;
Optionally, if you are hitting rate limits:&lt;br /&gt;
# Create an account on https://hub.docker.com/.  (Note that you will need to click on an email verification link before you can log in for the first time)&lt;br /&gt;
# Run the following before the '''docker pull''' command above&lt;br /&gt;
 docker login&lt;br /&gt;
&lt;br /&gt;
== Running the Container ==&lt;br /&gt;
To generate terrain you need to run the Virtual Planet Builder tool within the container.&lt;br /&gt;
&lt;br /&gt;
Firstly, get the container running from the directory containing your &amp;lt;code&amp;gt;data&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;output&amp;lt;/code&amp;gt; directories:&lt;br /&gt;
 docker run --rm --mount &amp;quot;type=bind,source=`pwd`/data,target=/home/flightgear/data,readonly&amp;quot; --mount &amp;quot;type=bind,source=`pwd`/output,target=/home/flightgear/output&amp;quot; -it flightgear/ws30-vpb-generator:latest /bin/bash&lt;br /&gt;
You should now find yourself in a bash shell within your container.  You should see data and output directories with are linked to the directories you created earlier:&lt;br /&gt;
 flightgear@ddcac77f7d5e:~$ ls&lt;br /&gt;
 data  output&lt;br /&gt;
&lt;br /&gt;
== Generating the Terrain ==&lt;br /&gt;
Once the data is pre-processed, we can generate 1x1 tiles of terrain.  For example:&lt;br /&gt;
 osgdem --TERRAIN \&lt;br /&gt;
 --image-ext png \&lt;br /&gt;
 --no-interpolate-imagery \&lt;br /&gt;
 --disable-error-diffusion \&lt;br /&gt;
 --geocentric \&lt;br /&gt;
 --no-mip-mapping \&lt;br /&gt;
 -t /home/flightgear/data/corine/corine_WGS84.tif \&lt;br /&gt;
 -d /home/flightgear/data/SRTM90/srtm_34_02.tif \&lt;br /&gt;
 -d /home/flightgear/data/SRTM90/srtm_35_01.tif \&lt;br /&gt;
 -d /home/flightgear/data/SRTM90/srtm_35_02.tif \&lt;br /&gt;
 -d /home/flightgear/data/SRTM90/srtm_36_01.tif \&lt;br /&gt;
 -d /home/flightgear/data/SRTM90/srtm_36_02.tif \&lt;br /&gt;
 -b -4 55 -3 56 \&lt;br /&gt;
 --PagedLOD \&lt;br /&gt;
 -l 7 \&lt;br /&gt;
 --radius-to-max-visible-distance-ratio 3 \&lt;br /&gt;
 -o /home/flightgear/output/vpb/w010n50/w004n55/ws_w004n55.osgb&lt;br /&gt;
Running osgdem is in more detail here: [[Virtual Planet Builder#Running VPB]].&lt;br /&gt;
&lt;br /&gt;
After doing this you should have a file &amp;lt;code&amp;gt;output/vpb/w010n50/w004n50/ws_w004n50.osgb&amp;lt;/code&amp;gt;, plus a host of sub-directories. This is a 1x1 tile of terrain.  &lt;br /&gt;
&lt;br /&gt;
to leave the container simply type &amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Creating line features ==&lt;br /&gt;
Line features such as roads, railways and rivers are simply stored as a series of lat/lon points in an STG file using a specific STG verb.  We get the data of this from Openstreetmap, and we have some simple scripts to generate the files.&lt;br /&gt;
&lt;br /&gt;
The scripts are already included in the docker image at &amp;lt;code&amp;gt;/home/flightgear/scripts/&amp;lt;/code&amp;gt;.&lt;br /&gt;
=== Running the scripts ===&lt;br /&gt;
The genroads.py script generates all line features.  Simply set the output directory and the lat/lon box.  Note that the output directory should be a &amp;quot;Terrain&amp;quot; directory.  E.g.&lt;br /&gt;
 ./scripts/genroads.py ./output/Terrain -4 55 -3 56&lt;br /&gt;
&lt;br /&gt;
== Packaging the Scenery ==&lt;br /&gt;
Once you have the terrain and line features they should be packaged in a scenery directory in vpb and Terrain sub-directories respectively.  E.g.&lt;br /&gt;
 MyCoolScenery/Terrain&lt;br /&gt;
 MyCoolScenery/vpb&lt;br /&gt;
It is good practise to document the data sources used in scenery generation.  Some source licenses require attribution of the original data source for anything derived, published or distributed.   &lt;br /&gt;
&lt;br /&gt;
To assist in fulfilling these license obligations, you can create a source.xml file in the scenery directory which includes attribution information.  This will then be available from within the simulator under Help-&amp;gt;Scenery Sources, and &amp;lt;u&amp;gt;may&amp;lt;/u&amp;gt; fulfil the attribution requirements of your license.  '''Note that you are responsible for fulfilling any license requirements from the data, not FlightGear'''.  &lt;br /&gt;
&lt;br /&gt;
The format of the file is straightforward:&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;PropertyList&amp;gt;&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;&amp;lt;source&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
         &amp;lt;name&amp;gt;Corine Land Cover (CLC) 2018, Version 2020_20u1&amp;lt;/name&amp;gt;&lt;br /&gt;
         &amp;lt;nowiki&amp;gt;&amp;lt;link&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;nowiki&amp;gt;http://web.archive.org/web/20221112175615/https://land.copernicus.eu/pan-european/corine-land-cover/clc2018?tab=metadata%2A&amp;lt;/nowiki&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;/link&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
         &amp;lt;license&amp;gt;GMES Open License&amp;lt;/license&amp;gt;&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;&amp;lt;/source&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;&amp;lt;source&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
         &amp;lt;name&amp;gt;NASADEM Merged DEM Global 1 arc second V001&amp;lt;/name&amp;gt;&lt;br /&gt;
         &amp;lt;nowiki&amp;gt;&amp;lt;link&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;nowiki&amp;gt;https://www.earthdata.nasa.gov/&amp;lt;/nowiki&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;/link&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
         &amp;lt;license&amp;gt;Public Domain&amp;lt;/license&amp;gt;&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;&amp;lt;/source&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;&amp;lt;source&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
         &amp;lt;name&amp;gt;OpenStreetMap&amp;lt;/name&amp;gt;&lt;br /&gt;
         &amp;lt;nowiki&amp;gt;&amp;lt;link&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;nowiki&amp;gt;https://www.openstreetmap.org/copyright&amp;lt;/nowiki&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;/link&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
         &amp;lt;license&amp;gt;Open Data Commons Open Database License&amp;lt;/license&amp;gt;&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;&amp;lt;/source&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;/PropertyList&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Running FlightGear with the new WS3.0 Terrain ==&lt;br /&gt;
To test the new terrain, simply include the appropriate scenery directory (e.g. MyCoolScenery) in in your scenery path and run FlightGear with the &amp;lt;code&amp;gt;--prop:/scenery/use-vpb=true&amp;lt;/code&amp;gt; to enable WS3.0.&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Howto:Create_WS3.0_terrain&amp;diff=137561</id>
		<title>Howto:Create WS3.0 terrain</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Howto:Create_WS3.0_terrain&amp;diff=137561"/>
		<updated>2023-04-15T10:50:38Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: Fixes to command for scenery generation inside the docker container&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WS30 Navbar}}&lt;br /&gt;
This article provides instructions on how to generate base WS3.0 terrain.&lt;br /&gt;
&lt;br /&gt;
WS3.0 terrain consists of two parts:&lt;br /&gt;
&lt;br /&gt;
# A landclass texture draped over an elevation model.  This is the terrain mesh.&lt;br /&gt;
# Line features such as roads, railways and rivers.  This is draped over the terrain mesh at runtime.&lt;br /&gt;
&lt;br /&gt;
== Getting the base data ==&lt;br /&gt;
First, you need two pieces of data for the scenery area you are generating:&lt;br /&gt;
&lt;br /&gt;
# An elevation model (aka DEM).  Use of the &amp;quot;NASADEM&amp;quot; with 30m resolution is recommended, and is available from [https://lpdaac.usgs.gov/products/nasadem_hgtv001/ here], and with an interactive browser [https://search.earthdata.nasa.gov/search here].&lt;br /&gt;
# Landclass data showing what type of terrain is at each point of the surface.  This is often either a Raster Geotiff (effectively a texture), or vector data.  For Europe, use of [https://land.copernicus.eu/pan-european/corine-land-cover/clc2018 CORINE] is recommended.  For the USA NLCD is recommended&lt;br /&gt;
Put these files into a &amp;lt;code&amp;gt;data&amp;lt;/code&amp;gt; directory and create an &amp;lt;code&amp;gt;output&amp;lt;/code&amp;gt; directory next to it. This is where the scenery will be generated..&lt;br /&gt;
&lt;br /&gt;
== Pre-processing the Elevation Model ==&lt;br /&gt;
If you are using NASADEM, then the elevation model is already using WGS84 and is ready to use as-is.  &lt;br /&gt;
&lt;br /&gt;
If you are using another elevation model, then you may need to re-project it using QGIS/gdalwarp to the WGS84 CRS (aka EPSG:4326).&lt;br /&gt;
&lt;br /&gt;
== Pre-processing the Landclass Data ==&lt;br /&gt;
For any landclass data we need to ensure the data is in the correct format.  That means:&lt;br /&gt;
&lt;br /&gt;
# Uses the WGS84 Coordinate Reference System.  The ensures that the terrain generation step is efficient.&lt;br /&gt;
# Is a Raster (geotiff) rather than Vector data.  This raster will become the texture on the terrain that the terrain shaders do their magic on.&lt;br /&gt;
# Has the correct landclass values for each terrain type.  Different landclass systems use different values.  At present we use the CORINE values, defined in [https://sourceforge.net/p/flightgear/fgdata/ci/next/tree/Materials/base/landclass-mapping.xml Materials/base/landclass-mapping.xml].&lt;br /&gt;
&lt;br /&gt;
Below is a quick table showing what steps you need to take for common landclass data sources.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Landclass Data&lt;br /&gt;
!Warp to WGS84 required?&lt;br /&gt;
!Landclass re-classification Required?&lt;br /&gt;
!Raster Simplification Required?&lt;br /&gt;
!Conversion to Raster Required?&lt;br /&gt;
|-&lt;br /&gt;
|CORINE Raster&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|No&lt;br /&gt;
|-&lt;br /&gt;
|CORINE Vector&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|-&lt;br /&gt;
|NLCD&lt;br /&gt;
|No&lt;br /&gt;
|Yes&lt;br /&gt;
|Yes&lt;br /&gt;
|No&lt;br /&gt;
|}&lt;br /&gt;
The easiest way to do these operations is using QGIS, which is available for most platforms.  If you are scripting a toolchain, the QGIS tools include command-line equivalents for all commands.&lt;br /&gt;
&lt;br /&gt;
When using QGIS, set the Project CRS to WGS84 (aka EPSG:4326).  You can then add layers of Raster or Vector data from files from the &amp;lt;code&amp;gt;Layer-&amp;gt;Add Layer&amp;lt;/code&amp;gt; menu.  When performing any operations, &amp;lt;u&amp;gt;always&amp;lt;/u&amp;gt; write out the data to a real file so you can go back to it later. Disk space is cheap :).&lt;br /&gt;
&lt;br /&gt;
=== Warping Raster Layers to WGS84 ===&lt;br /&gt;
This is applicable to CORINE Raster data&lt;br /&gt;
&lt;br /&gt;
You can warp a raster layer to a different CRS using the Raster-&amp;gt;Projections-Warp (Reproject) tool.  &lt;br /&gt;
&lt;br /&gt;
Select the following options in the dialog:&lt;br /&gt;
&lt;br /&gt;
* Input Layer - Check you have selected the correct layer. The CRS is shown at the right.&lt;br /&gt;
* Target CRS -   set to &amp;lt;code&amp;gt;EPSG:4326 - WGS84&amp;lt;/code&amp;gt;, which should be your project CRS.&lt;br /&gt;
* Resampling Method to Use - Nearest Neighbour.  (Landclass data is not like normal images.  You don't want to interpolate between values.)&lt;br /&gt;
* Nodata value for output bands - 0.0  (This means that any data at the edges will be Ocean, usually a reasonable default)&lt;br /&gt;
* Advanced Parameters - No Compression&lt;br /&gt;
* Output data type - Byte&lt;br /&gt;
* Reprojected - Choose a target filename&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Alternatively you can do this step from the commandline.&lt;br /&gt;
 gdalwarp -t_srs EPSG:4326 -dstnodata 0.0 -r near -ot Byte -of GTiff -co COMPRESS=NONE -co BIGTIFF=IF_NEEDED /home/stuart/FlightGear/VPB/data/CORINE/u2018_clc2018_v2020_20u1_raster100m/DATA/U2018_CLC2018_V2020_20u1.tif /home/stuart/FlightGear/VPB/data/scratch/corine_WGS84.tif&lt;br /&gt;
&lt;br /&gt;
=== Warping Vector Layers to WGS84 ===&lt;br /&gt;
You can warp a vector layer using Vector-&amp;gt;Data Management Tools-&amp;gt;Reproject Layer.  &lt;br /&gt;
&lt;br /&gt;
Set the following options in the dialog:&lt;br /&gt;
&lt;br /&gt;
* Input Layer - Check you have selected the correct layer. The CRS is shown at the right.&lt;br /&gt;
* Target CRS -   set to &amp;lt;code&amp;gt;EPSG:4326 - WGS84&amp;lt;/code&amp;gt;, which should be your project CRS.&lt;br /&gt;
* Reprojected - Choose a target filename&lt;br /&gt;
&lt;br /&gt;
=== Reclassifying Vector Layers ===&lt;br /&gt;
For CORINE vector data in particular, the attributes used in the vector data are not the same as those used by the CORINE Raster data.  So we need to create a new attribute on the data.&lt;br /&gt;
[[File:Field Calculator.png|thumb|QGIS Field Calculator]]&lt;br /&gt;
To do this &lt;br /&gt;
&lt;br /&gt;
* Select &amp;lt;code&amp;gt;Layer-&amp;gt;Open Attribute Table&amp;lt;/code&amp;gt;.  You should see a table with multiple columns.  Each row represents a feature in the data.&lt;br /&gt;
* Click on &amp;lt;code&amp;gt;New Field&amp;lt;/code&amp;gt; (Ctrl+W) and create a new field called Landclass of type &amp;quot;Whole Number (Integer)&amp;quot;.  This will create a new column which we will populate with the correct landclass data&lt;br /&gt;
* Click on the &amp;lt;code&amp;gt;Open Field Calculator&amp;lt;/code&amp;gt; button (Ctrl + I).  (If you get an error about only being able to create Virtual fields, go back to the Layer menu, export it and open the exported file).&lt;br /&gt;
* Select the following options:&lt;br /&gt;
** Update Existing Field&lt;br /&gt;
** Select the Landclass field you just created.&lt;br /&gt;
** Copy the contents of https://sourceforge.net/p/flightgear/fgmeta/ci/next/tree/ws30/mappings/corine_vector.txt into the Expression box.  This is just some simple code to set the attribute correctly.  The code should be correct for CORINE vector data.  If your data is from other sources you will need to work out how you want to map your source data landclasses to the CORINE ones.  [https://sourceforge.net/p/flightgear/fgdata/ci/next/tree/Materials/base/landclass-mapping.xml Materials/base/landclass-mapping.xml] can be used as a guide.&lt;br /&gt;
* Select &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;.  You should see that your landclass column is now populated with the landclass data.&lt;br /&gt;
* Select &amp;lt;code&amp;gt;Layer-&amp;gt;Save Layer Edits&amp;lt;/code&amp;gt; to save you changes&lt;br /&gt;
&lt;br /&gt;
=== Creating a Raster from a Vector Layer ===&lt;br /&gt;
To create a Raster from a Vector Layer select &amp;lt;code&amp;gt;Raster-&amp;gt;Conversion-&amp;gt;Rasterize (Vector to Raster)&amp;lt;/code&amp;gt;.  &lt;br /&gt;
[[File:QGIS Rasterize (Vector to Raster).png|thumb|Creating a Raster from a Vector Layer - QGIS Rasterize]]&lt;br /&gt;
Select the following options:&lt;br /&gt;
&lt;br /&gt;
* Input Layer - correct layer, check CRS&lt;br /&gt;
* Field to use for burn-in value - select the Landclass column you created above.&lt;br /&gt;
* Output raster size units.  This is going to set the resolution of your raster.  You can work out the resolution in two different ways:&lt;br /&gt;
** Select &amp;quot;Georeferenced units&amp;quot; and determine how many degrees each pixel is in latitude and longitude.&lt;br /&gt;
** Select &amp;quot;Pixels&amp;quot; and determine the size of raster you want in pixels.  [https://www.nhc.noaa.gov/gccalc.shtml This] is a good calculator to help.&lt;br /&gt;
* Width/Horizontal Resolution.  Enter the values you've calculated for the horizontal resolution (longitudinal), or the width of the raster&lt;br /&gt;
* Height/Vertical Resolution.    Enter the values you've calculated for the vertical resolution (latitude or the height of the raster&lt;br /&gt;
* Output extent - Select an option from the box on the right.    You can edit the text afterwards.&lt;br /&gt;
* Assign a specific nodata value to output bands - Select 0.0 for Ocean.  CORINE vector data in particular has a lot of nodata for Oceans&lt;br /&gt;
* Advanced Parameters - No Compression&lt;br /&gt;
* Output data type - Byte&lt;br /&gt;
* Rasterized - Select a new filename&lt;br /&gt;
&lt;br /&gt;
=== Simplifying a Raster Layer ===&lt;br /&gt;
Some Raster Landclass data (NLCD included) has too much noise - in particular large US highway systems are identified as Urban areas.&lt;br /&gt;
&lt;br /&gt;
To smooth it out we can use the GRASS &amp;lt;code&amp;gt;n.neighbors&amp;lt;/code&amp;gt; function from the Processing Toolbox in QGIS.&lt;br /&gt;
&lt;br /&gt;
Select the following options:&lt;br /&gt;
&lt;br /&gt;
* Input Layer - correct layer, check CRS&lt;br /&gt;
* Neighborhood operation - median.  (This is not a normal image, so using an average will result in weird values)&lt;br /&gt;
* Neighborhood size - 5.&lt;br /&gt;
* Neighbors - Select a new filename.&lt;br /&gt;
&lt;br /&gt;
=== Reclassifying a Raster Layer ===&lt;br /&gt;
WS3.0 uses CORINE landclass values.  If using data from other sources it needs to be reclassified to the correct values.  &lt;br /&gt;
&lt;br /&gt;
To do this select &amp;lt;code&amp;gt;GRASS-&amp;gt;Raster-&amp;gt;r.reclass&amp;lt;/code&amp;gt; from the Processing Toolbox.&lt;br /&gt;
&lt;br /&gt;
Select the following options:&lt;br /&gt;
&lt;br /&gt;
* Input Raster Layer - correct layer, check CRS&lt;br /&gt;
* Reclass rules text - copy in the contents of https://sourceforge.net/p/flightgear/fgmeta/ci/next/tree/ws30/mappings/nlcd2019.txt.  Or an appropriate mapping from your landclass data to CORINE.  Note that you can also reference a file using the &amp;quot;File containing reclass rules&amp;quot; option. Note a mapping of 22 24 = 1 is the same as 22 and 24 = 1. For a range of 22 to 24 use 22 23 24 = 1.&lt;br /&gt;
* Reclassified - Select a new filename.&lt;br /&gt;
&lt;br /&gt;
(If this doesn't work a similar function is available in the Processing Toolbox under &amp;lt;code&amp;gt;Raster analysis-&amp;gt;Reclassify by table&amp;lt;/code&amp;gt;.  However this doesn't save your table once you close the dialog, and entries have to be manually entered individually which takes a lot of effort)&lt;br /&gt;
&lt;br /&gt;
=== Step By Step Procedure for Processing NLCD for the USA using the Raster Calculator, Up sampling and GRASS r.neighbors===&lt;br /&gt;
&lt;br /&gt;
We will use a predetermined file naming convention throughout this procedure for simplicity. You can use a naming convention of your choice.&lt;br /&gt;
&lt;br /&gt;
* Step 1 - Re-class from NLCD values to FlightGear values and all man made data to &amp;quot;grasscover&amp;quot; for a clean land cover base.&lt;br /&gt;
# Open Raster Calculator&lt;br /&gt;
# Under &amp;quot;Output layer&amp;quot; choose a new filename to save the new raster to. We'll use Kansas_reclass-grass.tiff.&lt;br /&gt;
# Copy the following into the &amp;quot;Raster Calculator Expression&amp;quot; box. Where Kansas_4326-84@1 is the name of your raw, correct CRS NLCD.&lt;br /&gt;
&lt;br /&gt;
(&amp;quot;Kansas_4326-84@1&amp;quot; = 11) * 41 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 12) * 34 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 21) * 26 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 22) * 26 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 23) * 26 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 24) * 26 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 31) * 27 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 41) * 23 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 42) * 24 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 43) * 25 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 51) * 30 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 52) * 29 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 71) * 26 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 72) * 32 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 73) * 31 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 74) * 31 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 75) * 32 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 81) * 18 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 82) * 19 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 90) * 25 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 95) * 35&lt;br /&gt;
&lt;br /&gt;
    Click on &amp;quot;OK&amp;quot;. When finished you will have a new raster with all man made clutter removed and changed to &amp;quot;grasscover&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* Step 2 - Make a new Urban layer of all all man made clutter.&lt;br /&gt;
# Open Raster Calculator&lt;br /&gt;
# Under &amp;quot;Output layer&amp;quot; choose a new filename to save the new raster to. We'll use Kansas_urban.tiff.&lt;br /&gt;
# Copy the following into the &amp;quot;Raster Calculator Expression&amp;quot; box. Where Kansas_4326-84@1 is the name of your raw, correct CRS NLCD.&lt;br /&gt;
&lt;br /&gt;
(&amp;quot;Kansas_4326-84@1&amp;quot; = 21) * 10 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 22) * 10 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 23) * 1 + (&amp;quot;Kansas_4326-84@1&amp;quot; = 24) * 1&lt;br /&gt;
&lt;br /&gt;
    Click on &amp;quot;Run&amp;quot;. When finished you will have a new raster with only all man made clutter.&lt;br /&gt;
&lt;br /&gt;
* Step 3 - Make a new raster of leaving only towns and larger man made structures.&lt;br /&gt;
# Click on the Kansas_urban-only layer so it is the active layer.&lt;br /&gt;
# Click on GRASS -&amp;gt; Raster (r.*) -&amp;gt; r.neighbors&lt;br /&gt;
# Change the &amp;quot;Neighbourhood operation&amp;quot; to &amp;quot;median&amp;quot; and the &amp;quot;Neighbourhood size&amp;quot; to &amp;quot;7&amp;quot;. You might have to adjust the size value to get your desired results.&lt;br /&gt;
# Under Neighbors choose a new filename to save the new raster to. We'll use Kansas_urban-only.tiff.&lt;br /&gt;
&lt;br /&gt;
    Click on &amp;quot;Run&amp;quot;. When finished you will have a new raster with only towns and larger man made structures.&lt;br /&gt;
&lt;br /&gt;
* Step 4 - Combine the clean, raw, reclassed base raster and the new town and larger structure raster into a new raster.&lt;br /&gt;
# Open Raster Calculator&lt;br /&gt;
# Under &amp;quot;Output layer&amp;quot; choose a new filename to save the new raster to. We'll use Kansas_adjusted-combined.tiff.&lt;br /&gt;
# Copy the following into the &amp;quot;Raster Calculator Expression&amp;quot; box. Where Kansas_urban-only@1 and Kansas_reclass-grass@1 are the names of previously processed step 1 and step 3 data.&lt;br /&gt;
&lt;br /&gt;
(&amp;quot;Kansas_urban-only@1&amp;quot; &amp;lt; 1) * &amp;quot;Kansas_reclass-grass@1&amp;quot; + (&amp;quot;Kansas_urban-only@1&amp;quot; != 0) * &amp;quot;Kansas_urban-only@1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    Click on &amp;quot;OK&amp;quot;. When finished you will have a new raster with only towns and larger man made structures, road easements of grasscover and other default unsmoothed land cover.&lt;br /&gt;
&lt;br /&gt;
* Step 5 - Upsample 4x to a new higher resolution raster that can then be smoothed.&lt;br /&gt;
# Click on the Kansas_adjusted-combined layer.&lt;br /&gt;
# Under Layer &amp;quot;File name&amp;quot; choose a new filename to save this new raster to. We'll use Kansas_final-prep-4x.tiff.&lt;br /&gt;
# Change the &amp;quot;Resolution (Current:layer) -&amp;gt; Horizontal and Vertical to a value that equals, current &amp;quot;Layer Resolution&amp;quot; / 4.&lt;br /&gt;
&lt;br /&gt;
    Click on &amp;quot;OK&amp;quot;. When finished you will have a new up-scaled higher resolution raster.&lt;br /&gt;
&lt;br /&gt;
* Step 6 - Smooth the Upsampled &amp;quot;final prep&amp;quot; layer.&lt;br /&gt;
# Click on the Kansas_final-prep-4x layer so it is the active layer.&lt;br /&gt;
# Click on GRASS -&amp;gt; Raster (r.*) -&amp;gt; r.neighbors&lt;br /&gt;
# Change the &amp;quot;Neighbourhood operation&amp;quot; to &amp;quot;median&amp;quot; and the &amp;quot;Neighbourhood size&amp;quot; to &amp;quot;7&amp;quot;. You might have to adjust the size value to get your desired results.&lt;br /&gt;
# Under &amp;quot;Neighbors&amp;quot; choose a new filename to save the new raster to. We'll use Kansas_4326-84-hd.tiff.&lt;br /&gt;
 &lt;br /&gt;
    Click on &amp;quot;Run&amp;quot;. When finished you will have the final smoothed, higher resolution raster to use for building your scenery.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;Optional HD Water Option&amp;lt;/big&amp;gt; &lt;br /&gt;
* Step 7 - Obtain and load hi resolution vector layer&lt;br /&gt;
Make sure that the vector layer and the raster layer you will eventually merge to have the same projection. ** Extent can be different if you use the option below.&lt;br /&gt;
# Use Top Menu: &amp;quot;Raster&amp;quot; -&amp;gt; &amp;quot;Conversion&amp;quot; -&amp;gt; &amp;quot;Rasterize (vector to raster)&amp;quot; or Processing Toolbax: GDAL -&amp;gt; &amp;quot;Vector conversion&amp;quot; -&amp;gt; &amp;quot;Rasterize (vector to raster)&amp;quot;&lt;br /&gt;
# Input layer = Kansas_water_4326-84&lt;br /&gt;
# Fixed value to burn = 41 (water)&lt;br /&gt;
# Output raster size units = &amp;quot;Georeferenced units&amp;quot;&lt;br /&gt;
# Width/Horizontal resolution = 0.00008309125 (4x the base NLCD resolution ) &lt;br /&gt;
# Height/Vertical resolution = 0.00008309125 (4x the base NLCD resolution)&lt;br /&gt;
# ** Output extent = Select the raster layer you will eventually merge with as the &amp;quot;Output extent&amp;quot;.&lt;br /&gt;
# Under &amp;quot;Rasterized&amp;quot; choose a new filename to save the new raster to. We'll use Kansas_4326-84-hd-water.tiff.&lt;br /&gt;
&lt;br /&gt;
    Click &amp;quot;Run&amp;quot; to generate the hi resolution raster layer.&lt;br /&gt;
&lt;br /&gt;
* Step 8 - Reclass hi res, smoothed water to grass&lt;br /&gt;
# Open Raster Calculator&lt;br /&gt;
# Under &amp;quot;Output layer&amp;quot; choose a new filename to save the new raster to. We'll use Kansas_4326-84-hd-nowater.tiff.&lt;br /&gt;
# Copy the following into the &amp;quot;Raster Calculator Expression&amp;quot; box. Where Kansas_4326-84-hd is the name of your hi resolution, smoothed NLCD that includes the water data. &lt;br /&gt;
&amp;quot;Kansas_4326-84-hd@1&amp;quot; * (&amp;quot;Kansas_4326-84-hd@1&amp;quot; != 41) + 26 * (&amp;quot;Kansas_4326-84-hd@1 = 41&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    Click on &amp;quot;OK&amp;quot;. When finished you will have a new raster with the water layer changed to grassland. Another choice would be to change it to sand. &lt;br /&gt;
&lt;br /&gt;
* Step 9 - Combine the hi resolution no water raster and the hi resolution water raster.&lt;br /&gt;
# Use Top Menu: &amp;quot;Raster&amp;quot; -&amp;gt; &amp;quot;Miscellaneous&amp;quot; -&amp;gt; &amp;quot;Merge&amp;quot; or Processing Toolbax: GDAL -&amp;gt; Raster Miscellaneous -&amp;gt; Merge&lt;br /&gt;
# Input layers = Select &amp;quot;Kansas_4326-84-hd-nowater@1&amp;quot; and Kansas_4326-84-hd-water.tiff&lt;br /&gt;
# Output data type = &amp;quot;byte&amp;quot;.&lt;br /&gt;
# Under &amp;quot;Merged&amp;quot; choose a new filename to save the new raster to. We'll use Kansas_4326-84-hdwater.tiff.&lt;br /&gt;
&lt;br /&gt;
    Click &amp;quot;Run&amp;quot; to generate the new merged hi resolution raster layer.&lt;br /&gt;
&lt;br /&gt;
== Setting up Virtual Planet Builder using docker ==&lt;br /&gt;
Generating the scenery uses an OSG tool called Virtual Planet Builder.  Fortunately, there is a docker image so you don't need to build this yourself.  Instead it will run as a container inside docker.&lt;br /&gt;
&lt;br /&gt;
To set this up:&lt;br /&gt;
&lt;br /&gt;
# Install [https://docs.docker.com/get-started/ Docker] on your platform.&lt;br /&gt;
# Create an account on https://hub.docker.com/.  (Note that you will need to click on an email verification link before you can log in for the first time)&lt;br /&gt;
# On your own machine, log into docker, and then pull the docker image&lt;br /&gt;
 docker login&lt;br /&gt;
&lt;br /&gt;
 docker pull flightgear/ws30-vbp-generator:latest&lt;br /&gt;
You now have a docker image on your own machine you can run.&lt;br /&gt;
&lt;br /&gt;
== Running the Container ==&lt;br /&gt;
To generate terrain you need to run the Virtual Planet Builder tool within the container.&lt;br /&gt;
&lt;br /&gt;
Firstly, get the container running from the directory containing your &amp;lt;code&amp;gt;data&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;output&amp;lt;/code&amp;gt; directories:&lt;br /&gt;
 docker run --rm --mount &amp;quot;type=bind,source=`pwd`/data,target=/home/flightgear/data,readonly&amp;quot; --mount &amp;quot;type=bind,source=`pwd`/output,target=/home/flightgear/output&amp;quot; -it flightgear/ws30-vbp-generator:latest /bin/bash&lt;br /&gt;
You should now find yourself in a bash shell within your container.  You should see data and output directories with are linked to the directories you created earlier:&lt;br /&gt;
 flightgear@ddcac77f7d5e:~$ ls&lt;br /&gt;
 data  output&lt;br /&gt;
&lt;br /&gt;
== Generating the Terrain ==&lt;br /&gt;
Once the data is pre-processed, we can generate 1x1 tiles of terrain.  For example:&lt;br /&gt;
 osgdem --TERRAIN \&lt;br /&gt;
 --image-ext png \&lt;br /&gt;
 --no-interpolate-imagery \&lt;br /&gt;
 --disable-error-diffusion \&lt;br /&gt;
 --geocentric \&lt;br /&gt;
 --no-mip-mapping \&lt;br /&gt;
 -t /home/flightgear/data/corine/corine_WGS84.tif \&lt;br /&gt;
 -d /home/flightgear/data/SRTM90/srtm_34_02.tif \&lt;br /&gt;
 -d /home/flightgear/data/SRTM90/srtm_35_01.tif \&lt;br /&gt;
 -d /home/flightgear/data/SRTM90/srtm_35_02.tif \&lt;br /&gt;
 -d /home/flightgear/data/SRTM90/srtm_36_01.tif \&lt;br /&gt;
 -d /home/flightgear/data/SRTM90/srtm_36_02.tif \&lt;br /&gt;
 -b -4 55 -3 56 \&lt;br /&gt;
 --PagedLOD \&lt;br /&gt;
 -l 7 \&lt;br /&gt;
 --radius-to-max-visible-distance-ratio 3 \&lt;br /&gt;
 -o /home/flightgear/output/vpb/w010n50/w004n55/ws_w004n55.osgb&lt;br /&gt;
Running osgdem is in more detail here: [[Virtual Planet Builder#Running VPB]].&lt;br /&gt;
&lt;br /&gt;
After doing this you should have a file &amp;lt;code&amp;gt;output/vpb/w010n50/w004n50/ws_w004n50.osgb&amp;lt;/code&amp;gt;, plus a host of sub-directories. This is a 1x1 tile of terrain.  &lt;br /&gt;
&lt;br /&gt;
to leave the container simply type &amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Creating line features ==&lt;br /&gt;
Line features such as roads, railways and rivers are simply stored as a series of lat/lon points in an STG file using a specific STG verb.  We get the data of this from Openstreetmap, and we have some simple scripts to generate the files.&lt;br /&gt;
&lt;br /&gt;
The scripts are already included in the docker image at &amp;lt;code&amp;gt;/home/flightgear/scripts/&amp;lt;/code&amp;gt;.&lt;br /&gt;
=== Running the scripts ===&lt;br /&gt;
The genroads.py script generates all line features.  Simply set the output directory and the lat/lon box.  Note that the output directory should be a &amp;quot;Terrain&amp;quot; directory.  E.g.&lt;br /&gt;
 ./scripts/genroads.py ./output/Terrain -4 55 -3 56&lt;br /&gt;
&lt;br /&gt;
== Packaging the Scenery ==&lt;br /&gt;
Once you have the terrain and line features they should be packaged in a scenery directory in vpb and Terrain sub-directories respectively.  E.g.&lt;br /&gt;
 MyCoolScenery/Terrain&lt;br /&gt;
 MyCoolScenery/vpb&lt;br /&gt;
It is good practise to document the data sources used in scenery generation.  Some source licenses require attribution of the original data source for anything derived, published or distributed.   &lt;br /&gt;
&lt;br /&gt;
To assist in fulfilling these license obligations, you can create a source.xml file in the scenery directory which includes attribution information.  This will then be available from within the simulator under Help-&amp;gt;Scenery Sources, and &amp;lt;u&amp;gt;may&amp;lt;/u&amp;gt; fulfil the attribution requirements of your license.  '''Note that you are responsible for fulfilling any license requirements from the data, not FlightGear'''.  &lt;br /&gt;
&lt;br /&gt;
The format of the file is straightforward:&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;PropertyList&amp;gt;&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;&amp;lt;source&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
         &amp;lt;name&amp;gt;Corine Land Cover (CLC) 2018, Version 2020_20u1&amp;lt;/name&amp;gt;&lt;br /&gt;
         &amp;lt;nowiki&amp;gt;&amp;lt;link&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;nowiki&amp;gt;http://web.archive.org/web/20221112175615/https://land.copernicus.eu/pan-european/corine-land-cover/clc2018?tab=metadata%2A&amp;lt;/nowiki&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;/link&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
         &amp;lt;license&amp;gt;GMES Open License&amp;lt;/license&amp;gt;&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;&amp;lt;/source&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;&amp;lt;source&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
         &amp;lt;name&amp;gt;NASADEM Merged DEM Global 1 arc second V001&amp;lt;/name&amp;gt;&lt;br /&gt;
         &amp;lt;nowiki&amp;gt;&amp;lt;link&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;nowiki&amp;gt;https://www.earthdata.nasa.gov/&amp;lt;/nowiki&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;/link&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
         &amp;lt;license&amp;gt;Public Domain&amp;lt;/license&amp;gt;&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;&amp;lt;/source&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;&amp;lt;source&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
         &amp;lt;name&amp;gt;OpenStreetMap&amp;lt;/name&amp;gt;&lt;br /&gt;
         &amp;lt;nowiki&amp;gt;&amp;lt;link&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;nowiki&amp;gt;https://www.openstreetmap.org/copyright&amp;lt;/nowiki&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;/link&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
         &amp;lt;license&amp;gt;Open Data Commons Open Database License&amp;lt;/license&amp;gt;&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;&amp;lt;/source&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;/PropertyList&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Running FlightGear with the new WS3.0 Terrain ==&lt;br /&gt;
To test the new terrain, simply include the appropriate scenery directory (e.g. MyCoolScenery) in in your scenery path and run FlightGear with the &amp;lt;code&amp;gt;--prop:/scenery/use-vpb=true&amp;lt;/code&amp;gt; to enable WS3.0.&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Howto:Create_WS3.0_terrain&amp;diff=134512</id>
		<title>Howto:Create WS3.0 terrain</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Howto:Create_WS3.0_terrain&amp;diff=134512"/>
		<updated>2022-01-23T11:56:16Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: Fix formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article provides instructions on how to generate base WS3.0 terrain.&lt;br /&gt;
&lt;br /&gt;
WS3.0 terrain consists of two parts:&lt;br /&gt;
&lt;br /&gt;
# A landclass texture draped over an elevation model.  This is the terrain mesh.&lt;br /&gt;
# Line features such as roads, railways and rivers.  This is draped over the terrain mesh at runtime.&lt;br /&gt;
&lt;br /&gt;
=== Creating the terrain mesh ===&lt;br /&gt;
&lt;br /&gt;
==== Getting the base data ====&lt;br /&gt;
First, you need two pieces of data for the scenery area you are generating:&lt;br /&gt;
&lt;br /&gt;
# An elevation model (aka DEM).  Use of the &amp;quot;NASADEM&amp;quot; with 30m resolution is recommended, and is available from [https://lpdaac.usgs.gov/products/nasadem_hgtv001/ here], and with an interactive browser [https://search.earthdata.nasa.gov/search here].&lt;br /&gt;
# A landclass geotiff.  For Europe, use of [https://land.copernicus.eu/pan-european/corine-land-cover/clc2018 CORINE] is recommended.  This needs to be RASTER data, and could be generated from vector data using QGIS.  Note that the landclass assignments much match your [https://sourceforge.net/p/flightgear/fgdata/ci/next/tree/Materials/base/landclass-mapping.xml Materials/base/landclass-mapping.xml] file.  This will be the case of CORINE data, but other data sources will need to be remapped in QGIS.&lt;br /&gt;
Put these files into a &amp;lt;code&amp;gt;data&amp;lt;/code&amp;gt; directory and create an &amp;lt;code&amp;gt;output&amp;lt;/code&amp;gt; directory next to it. This is where the scenery will be generated..&lt;br /&gt;
&lt;br /&gt;
==== Setting up Virtual Planet Builder using docker ====&lt;br /&gt;
Generating the scenery uses an OSG tool called Virtual Planet Builder.  Fortunately, there is a docker image so you don't need to build this yourself.  Instead it will run as a container inside docker.&lt;br /&gt;
&lt;br /&gt;
To set this up:&lt;br /&gt;
&lt;br /&gt;
# Install [https://docs.docker.com/get-started/ Docker] on your platform.&lt;br /&gt;
# Create an account on https://hub.docker.com/.  (Note that you will need to click on an email verification link before you can log in for the first time)&lt;br /&gt;
# On your own machine, log into docker, and then pull the docker image&lt;br /&gt;
 docker login&lt;br /&gt;
&lt;br /&gt;
 docker pull flightgear/ws30-vbp-generator:latest&lt;br /&gt;
You now have a docker image on your own machine you can run.&lt;br /&gt;
&lt;br /&gt;
==== Generating Terrain ====&lt;br /&gt;
To generate terrain you need to run the Virtual Planet Builder tool within the container.&lt;br /&gt;
&lt;br /&gt;
Firstly, get the container running from the directory containing your &amp;lt;code&amp;gt;data&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;output&amp;lt;/code&amp;gt; directories:&lt;br /&gt;
 docker run --rm --mount &amp;quot;type=bind,source=`pwd`/data,target=/home/flightgear/data,readonly&amp;quot; --mount &amp;quot;type=bind,source=`pwd`/output,target=/home/flightgear/output&amp;quot; -it flightgear/ws30-vbp-generator:latest /bin/bash&lt;br /&gt;
You should now find yourself in a bash shell within your container.  You should see data and output directories with are linked to the directories you created earlier:&lt;br /&gt;
 flightgear@ddcac77f7d5e:~$ ls&lt;br /&gt;
 data  output&lt;br /&gt;
From here you can run the osgdem process to build terrain:&lt;br /&gt;
 osgdem --TERRAIN \&lt;br /&gt;
 --compressor-nvtt \&lt;br /&gt;
 --compression-quality-highest \&lt;br /&gt;
 --no-interpolate-imagery \&lt;br /&gt;
 --disable-error-diffusion \&lt;br /&gt;
 --geocentric \&lt;br /&gt;
 -t /home/flightgear/data/CORINE/u2018_clc2018_v2020_20u1_raster100m/DATA/U2018_CLC2018_V2020_20u1.tif \&lt;br /&gt;
 -d /home/flightgear/data/SRTM90/srtm_34_02.tif \&lt;br /&gt;
 -d /home/flightgear/data/SRTM90/srtm_35_01.tif \&lt;br /&gt;
 -d /home/flightgear/data/SRTM90/srtm_35_02.tif \&lt;br /&gt;
 -d /home/flightgear/data/SRTM90/srtm_36_01.tif \&lt;br /&gt;
 -d /home/flightgear/data/SRTM90/srtm_36_02.tif \&lt;br /&gt;
 -b -4 55 -3 56 \&lt;br /&gt;
 --PagedLOD \&lt;br /&gt;
 -l 7 \&lt;br /&gt;
 --radius-to-max-visible-distance-ratio 3 \&lt;br /&gt;
 -o /home/flightgear/output/vpb/w010n50/w004n55/ws_w004n55.osgb&lt;br /&gt;
Running osgdem is in more detail here: [[Virtual Planet Builder#Running VPB]].&lt;br /&gt;
&lt;br /&gt;
After doing this you should have a file &amp;lt;code&amp;gt;output/vpb/w010n50/w004n50/ws_w004n50.osgb&amp;lt;/code&amp;gt;, plus a host of sub-directories. This is a 1x1 tile of terrain.  &lt;br /&gt;
&lt;br /&gt;
to leave the container simply type &amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Creating line features ===&lt;br /&gt;
Line features such as roads, railways and rivers are simply stored as a series of lat/lon points in an STG file using a specific STG verb.  We get the data of this from Openstreetmap, and we have some simple scripts to generate the files.&lt;br /&gt;
&lt;br /&gt;
The scripts are already included in the docker image at &amp;lt;code&amp;gt;/home/flightgear/scripts/&amp;lt;/code&amp;gt;.&lt;br /&gt;
==== Running the scripts ====&lt;br /&gt;
The genroads.py script generates all line features.  Simply set the output directory and the lat/lon box.  Note that the output directory should be a &amp;quot;Terrain&amp;quot; directory.  E.g.&lt;br /&gt;
 ./scripts/genroads.py ./output/Terrain -4 55 -3 56&lt;br /&gt;
&lt;br /&gt;
=== Running FlightGear with the new WS3.0 Terrain ===&lt;br /&gt;
To test the new terrain, simply include the output directory in in your scenery path and run FlightGear with the &amp;lt;code&amp;gt;--prop:/scenery/use-vpb=true&amp;lt;/code&amp;gt; to enable WS3.0.&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Howto:Create_WS3.0_terrain&amp;diff=134510</id>
		<title>Howto:Create WS3.0 terrain</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Howto:Create_WS3.0_terrain&amp;diff=134510"/>
		<updated>2022-01-22T14:15:25Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: Updated page to reflect changes in docker image and python scripts&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article provides instructions on how to generate base WS3.0 terrain.&lt;br /&gt;
&lt;br /&gt;
WS3.0 terrain consists of two parts:&lt;br /&gt;
&lt;br /&gt;
# A landclass texture draped over an elevation model.  This is the terrain mesh.&lt;br /&gt;
# Line features such as roads, railways and rivers.  This is draped over the terrain mesh at runtime.&lt;br /&gt;
&lt;br /&gt;
=== Creating the terrain mesh ===&lt;br /&gt;
&lt;br /&gt;
==== Getting the base data ====&lt;br /&gt;
First, you need two pieces of data for the scenery area you are generating:&lt;br /&gt;
&lt;br /&gt;
# An elevation model (aka DEM).  Use of the &amp;quot;NASADEM&amp;quot; with 30m resolution is recommended, and is available from [https://lpdaac.usgs.gov/products/nasadem_hgtv001/ here], and with an interactive browser [https://search.earthdata.nasa.gov/search here].&lt;br /&gt;
# A landclass geotiff.  For Europe, use of [https://land.copernicus.eu/pan-european/corine-land-cover/clc2018 CORINE] is recommended.  This needs to be RASTER data, and could be generated from vector data using QGIS.  Note that the landclass assignments much match your [https://sourceforge.net/p/flightgear/fgdata/ci/next/tree/Materials/base/landclass-mapping.xml Materials/base/landclass-mapping.xml] file.  This will be the case of CORINE data, but other data sources will need to be remapped in QGIS.&lt;br /&gt;
Put these files into a &amp;lt;code&amp;gt;data&amp;lt;/code&amp;gt; directory and create an &amp;lt;code&amp;gt;output&amp;lt;/code&amp;gt; directory next to it. This is where the scenery will be generated..&lt;br /&gt;
&lt;br /&gt;
==== Setting up Virtual Planet Builder using docker ====&lt;br /&gt;
Generating the scenery uses an OSG tool called Virtual Planet Builder.  Fortunately, there is a docker image so you don't need to build this yourself.  Instead it will run as a container inside docker.&lt;br /&gt;
&lt;br /&gt;
To set this up:&lt;br /&gt;
&lt;br /&gt;
# Install [https://docs.docker.com/get-started/ Docker] on your platform.&lt;br /&gt;
# Create an account on https://hub.docker.com/.  (Note that you will need to click on an email verification link before you can log in for the first time)&lt;br /&gt;
# On your own machine, log into docker, and then pull the docker image&lt;br /&gt;
 docker login&lt;br /&gt;
&lt;br /&gt;
 docker pull flightgear/ws30-vbp-generator:latest&lt;br /&gt;
You now have a docker image on your own machine you can run.&lt;br /&gt;
&lt;br /&gt;
==== Generating Terrain ====&lt;br /&gt;
To generate terrain you need to run the Virtual Planet Builder tool within the container.&lt;br /&gt;
&lt;br /&gt;
Firstly, get the container running from the directory containing your &amp;lt;code&amp;gt;data&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;output&amp;lt;/code&amp;gt; directories:&lt;br /&gt;
 docker run --rm --mount &amp;quot;type=bind,source=`pwd`/data,target=/home/flightgear/data,readonly&amp;quot; --mount &amp;quot;type=bind,source=`pwd`/output,target=/home/flightgear/output&amp;quot; -it flightgear/ws30-vbp-generator:latest /bin/bash&lt;br /&gt;
You should now find yourself in a bash shell within your container.  You should see data and output directories with are linked to the directories you created earlier:&lt;br /&gt;
 flightgear@ddcac77f7d5e:~$ ls&lt;br /&gt;
 data  output&lt;br /&gt;
From here you can run the osgdem process to build terrain:&lt;br /&gt;
 osgdem --TERRAIN \&lt;br /&gt;
 --compressor-nvtt \&lt;br /&gt;
 --compression-quality-highest \&lt;br /&gt;
 --no-interpolate-imagery \&lt;br /&gt;
 --disable-error-diffusion \&lt;br /&gt;
 --geocentric \&lt;br /&gt;
 -t /home/flightgear/data/CORINE/u2018_clc2018_v2020_20u1_raster100m/DATA/U2018_CLC2018_V2020_20u1.tif \&lt;br /&gt;
 -d /home/flightgear/data/SRTM90/srtm_34_02.tif \&lt;br /&gt;
 -d /home/flightgear/data/SRTM90/srtm_35_01.tif \&lt;br /&gt;
 -d /home/flightgear/data/SRTM90/srtm_35_02.tif \&lt;br /&gt;
 -d /home/flightgear/data/SRTM90/srtm_36_01.tif \&lt;br /&gt;
 -d /home/flightgear/data/SRTM90/srtm_36_02.tif \&lt;br /&gt;
 -b -4 55 -3 56 \&lt;br /&gt;
 --PagedLOD \&lt;br /&gt;
 -l 7 \&lt;br /&gt;
 --radius-to-max-visible-distance-ratio 3 \&lt;br /&gt;
 -o /home/flightgear/output/vpb/w010n50/w004n55/ws_w004n55.osgb&lt;br /&gt;
Running osgdem is in more detail here: [[Virtual Planet Builder#Running VPB]].&lt;br /&gt;
&lt;br /&gt;
After doing this you should have a file &amp;lt;code&amp;gt;output/vpb/w010n50/w004n50/ws_w004n50.osgb&amp;lt;/code&amp;gt;, plus a host of sub-directories. This is a 1x1 tile of terrain.  &lt;br /&gt;
&lt;br /&gt;
to leave the container simply type &amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Creating line features ===&lt;br /&gt;
Line features such as roads, railways and rivers are simply stored as a series of lat/lon points in an STG file using a specific STG verb.  We get the data of this from Openstreetmap, and we have some simple scripts to generate the files.&lt;br /&gt;
&lt;br /&gt;
The scripts are already included in the docker image at `/home/flightgear/scripts/`.&lt;br /&gt;
==== Running the scripts ====&lt;br /&gt;
The genroads.py script generates all line features.  Simply set the output directory and the lat/lon box.  Note that the output directory should be a &amp;quot;Terrain&amp;quot; directory.  E.g.&lt;br /&gt;
 ./scripts/genroads.py ./output/Terrain 55 -4 56 -3&lt;br /&gt;
Note that the lat/lon order is reversed from osgdem.&lt;br /&gt;
&lt;br /&gt;
=== Running FlightGear with the new WS3.0 Terrain ===&lt;br /&gt;
To test the new terrain, simply include the output directory in in your scenery path and run FlightGear with the &amp;lt;code&amp;gt;--prop:/scenery/use-vpb=true&amp;lt;/code&amp;gt; to enable WS3.0.&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User:Fahim_Dalvi/Howto:_Complete_TerraGear_example_using_Docker&amp;diff=130357</id>
		<title>User:Fahim Dalvi/Howto: Complete TerraGear example using Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User:Fahim_Dalvi/Howto:_Complete_TerraGear_example_using_Docker&amp;diff=130357"/>
		<updated>2021-02-18T07:30:27Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: Fahim Dalvi moved page User:Fahim Dalvi/Howto: Complete TerraGear example using Docker to FlightGear wiki:Howto:Complete TerraGear example using docker: A few people have indicated that this is useful in its current state, so moving to the main wiki will make it more accessible.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[FlightGear wiki:Howto:Complete TerraGear example using docker]]&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Howto:Complete_TerraGear_example_using_docker&amp;diff=130356</id>
		<title>Howto:Complete TerraGear example using docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Howto:Complete_TerraGear_example_using_docker&amp;diff=130356"/>
		<updated>2021-02-18T07:30:27Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: Fahim Dalvi moved page User:Fahim Dalvi/Howto: Complete TerraGear example using Docker to FlightGear wiki:Howto:Complete TerraGear example using docker: A few people have indicated that this is useful in its current state, so moving to the main wiki will make it more accessible.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article aims to serve as a quick starting point for people wanting to build scenery using the dockerized version of the TerraGear scenery toolchain. This will allow users to build scenery on all popular operating systems including Windows, macOS and Linux without the hassle of building the terragear toolchain themselves. This is in no way a comprehensive introduction, but should be enough to get one used to the scenery generation process.&lt;br /&gt;
&lt;br /&gt;
[[File:Saint Helena Island generated using dockerized TerraGear.jpg|thumb|Saint Helena island generated using the docker image for the TerraGear toolchain]]&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
TerraGear requires three pieces of data for scenery generation:&lt;br /&gt;
&lt;br /&gt;
# Elevation data: This data defines how high each point in the scenery or land is. One source for such data is http://viewfinderpanoramas.org/Coverage%20map%20viewfinderpanoramas_org3.htm.&lt;br /&gt;
# Landclass data: This data defines what kind of &amp;quot;land&amp;quot; is under each point in the scenery or land is. For example, some point might be &amp;quot;urban&amp;quot; class, or &amp;quot;forest&amp;quot; class. One source for such data is http://download.geofabrik.de/, which is derived from OSM. &lt;br /&gt;
# Airport data: This data defines the position of runways, taxiways and other assorted airport information. One source for such data is the XPlane gateway.&lt;br /&gt;
&lt;br /&gt;
TerraGear consists of five tools:&lt;br /&gt;
&lt;br /&gt;
# hgtchop - Processing elevation data&lt;br /&gt;
# terrafit - Processing elevation data&lt;br /&gt;
# genapts - Processing airport data&lt;br /&gt;
# ogr-decode - Processing landclass data&lt;br /&gt;
# tg-construct - Generating the final scenery.&lt;br /&gt;
&lt;br /&gt;
== Scenery location ==&lt;br /&gt;
We will build Saint Helena Island, an island in the Atlantic Ocean. Specifically, we will be building the island around [https://en.wikipedia.org/wiki/Saint_Helena_Airport Saint Helena Airport] (ICAO: '''FHSH''').&lt;br /&gt;
&lt;br /&gt;
Its location is: DMS 15° 57′ 33″ S, 5° 38′ 45″ W, Decimal -5.645833 -15.959167&lt;br /&gt;
&lt;br /&gt;
A good vantage point to see progress is to start FG with the following options:&lt;br /&gt;
&lt;br /&gt;
 --lon=-5.62000000 --lat=-16.00000000 --altitude=4000 --heading=310&lt;br /&gt;
&lt;br /&gt;
The bounds for our build will be:&lt;br /&gt;
* Latitude: -6 to -5&lt;br /&gt;
* Longitude: -17 to -15&lt;br /&gt;
&lt;br /&gt;
Let &amp;lt;code&amp;gt;$SCENERY_BUILD_DIR&amp;lt;/code&amp;gt; be the directory containing all of our working files for this project.&lt;br /&gt;
&lt;br /&gt;
== Getting docker running ==&lt;br /&gt;
The first step is to have docker installed and accessible through the command line. Run the following command to fetch the terragear toolchain:&lt;br /&gt;
 docker pull flightgear/terragear:ws20&lt;br /&gt;
&lt;br /&gt;
Next, start a docker container to access the terragear tools:&lt;br /&gt;
&lt;br /&gt;
 docker run -i -v $SCENERY_BUILD_DIR:/terragear-work/ -t flightgear/terragear:ws20 /bin/bash&lt;br /&gt;
&lt;br /&gt;
Once this command runs successfully, the command line will now be a &amp;quot;window&amp;quot; into the docker container, allowing you to run the entire terragear toolchain. Because of the &amp;lt;code&amp;gt;-v&amp;lt;/code&amp;gt; argument (bind mount), the container can see the contents of &amp;lt;code&amp;gt;$SCENERY_BUILD_DIR&amp;lt;/code&amp;gt; will be visible at &amp;lt;code&amp;gt;/terragear-work/&amp;lt;/code&amp;gt; inside the container.&lt;br /&gt;
&lt;br /&gt;
== Process Elevation Data ==&lt;br /&gt;
The elevation data can be obtained from [http://viewfinderpanoramas.org/Coverage%20map%20viewfinderpanoramas_org3.htm ViewFinderPanoramas], specifically, the [http://viewfinderpanoramas.org/dem3/SD30.zip SD30] and [SE30 http://viewfinderpanoramas.org/dem3/SE30.zip] tiles cover this island.&lt;br /&gt;
&lt;br /&gt;
Extract and add to &amp;lt;code&amp;gt;$SCENERY_BUILD_DIR/data/SRTM-3/*.hgt&amp;lt;/code&amp;gt;. Run the following commands in the docker container:&lt;br /&gt;
&lt;br /&gt;
 cd  /terragear-work/&lt;br /&gt;
 for f in data/SRTM-3/*.hgt; do hgtchop 3 &amp;quot;${f}&amp;quot; &amp;quot; work/SRTM-3&amp;quot;; done&lt;br /&gt;
 terrafit work/SRTM-3&lt;br /&gt;
&lt;br /&gt;
== Process Airport Data ==&lt;br /&gt;
'''FHSH'''  is not available in FlightGear's &amp;lt;code&amp;gt;apt.dat&amp;lt;/code&amp;gt;, so the airport information has to be fetched from elsewhere. The XPlane gateway is one possible source. For this sample project, we can use the following data from https://github.com/accek/fg-nav-fixups:&lt;br /&gt;
&lt;br /&gt;
 1   1023 1 0 FHSH St Helena&lt;br /&gt;
 100 45.00 2 0 0.00 1 2 1 02 -15.96694276 -005.64575428  100    0 2 9 0 2 20 -15.94934298 -005.64615237  300    0 2 9 0 2&lt;br /&gt;
 110 1 0.00 358.7100 New Taxiway 4&lt;br /&gt;
 111 -15.96166211 -005.64927678&lt;br /&gt;
 111 -15.96340503 -005.64926307&lt;br /&gt;
 111 -15.96340434 -005.64836151&lt;br /&gt;
 111 -15.96290056 -005.64836043&lt;br /&gt;
 111 -15.96284142 -005.64854134&lt;br /&gt;
 111 -15.96265507 -005.64854103&lt;br /&gt;
 113 -15.96155909 -005.64854086&lt;br /&gt;
 110 2 0.00 358.7100 New Taxiway 3&lt;br /&gt;
 111 -15.94934844 -005.64635879 3 102&lt;br /&gt;
 111 -15.94935248 -005.64663563 3 102&lt;br /&gt;
 111 -15.94995561 -005.64662024 3 102&lt;br /&gt;
 113 -15.95019415 -005.64634336&lt;br /&gt;
 110 2 0.00 358.7100 New Taxiway 2&lt;br /&gt;
 111 -15.96693818 -005.64554618 3 102&lt;br /&gt;
 111 -15.96693596 -005.64524600 3 102&lt;br /&gt;
 111 -15.96628657 -005.64526997 3 102&lt;br /&gt;
 113 -15.96603006 -005.64556883&lt;br /&gt;
 110 2 0.00 358.7100 New Taxiway 1&lt;br /&gt;
 111 -15.96305635 -005.64765837 3 102&lt;br /&gt;
 111 -15.96240410 -005.64767341 3 102&lt;br /&gt;
 112 -15.96226078 -005.64761762 -15.96220044 -005.64756860 3 102&lt;br /&gt;
 111 -15.96219925 -005.64745814 3 102&lt;br /&gt;
 111 -15.96219005 -005.64624609 3 102&lt;br /&gt;
 112 -15.96223439 -005.64613746 -15.96227201 -005.64609544 3 102&lt;br /&gt;
 111 -15.96236947 -005.64606567&lt;br /&gt;
 111 -15.96184016 -005.64607709 3 102&lt;br /&gt;
 112 -15.96195708 -005.64616687 -15.96199469 -005.64621034 3 102&lt;br /&gt;
 111 -15.96199881 -005.64627387 3 102&lt;br /&gt;
 111 -15.96200448 -005.64744540 3 102&lt;br /&gt;
 112 -15.96197248 -005.64759953 -15.96193665 -005.64765444 3 102&lt;br /&gt;
 111 -15.96183543 -005.64768917 3 102&lt;br /&gt;
 111 -15.96154350 -005.64769949 3 102&lt;br /&gt;
 111 -15.96155909 -005.64854086&lt;br /&gt;
 111 -15.96265507 -005.64854103&lt;br /&gt;
 111 -15.96265481 -005.64818499&lt;br /&gt;
 113 -15.96306600 -005.64818480 3 102&lt;br /&gt;
 130 Airport Boundary&lt;br /&gt;
 111 -15.95876878 -005.64712051&lt;br /&gt;
 111 -15.96005216 -005.64729370&lt;br /&gt;
 111 -15.96043831 -005.64731000&lt;br /&gt;
 111 -15.96048880 -005.64864132&lt;br /&gt;
 111 -15.96154716 -005.64921198&lt;br /&gt;
 111 -15.96159626 -005.65014384&lt;br /&gt;
 111 -15.96388391 -005.64953797&lt;br /&gt;
 111 -15.96430513 -005.64699927&lt;br /&gt;
 111 -15.96882642 -005.64692255&lt;br /&gt;
 111 -15.96885682 -005.64412109&lt;br /&gt;
 111 -15.94564642 -005.64456651&lt;br /&gt;
 113 -15.94563863 -005.64716916&lt;br /&gt;
 120 Hold&lt;br /&gt;
 111 -15.96200516 -005.64660225 4 103&lt;br /&gt;
 115 -15.96218383 -005.64660129&lt;br /&gt;
 120 Linear Feature 5&lt;br /&gt;
 111 -15.96210864 -005.64767019 1 101&lt;br /&gt;
 112 -15.96206007 -005.64782922 -15.96201482 -005.64792776 1 101&lt;br /&gt;
 115 -15.96188449 -005.64810582&lt;br /&gt;
 120 Linear Feature 4&lt;br /&gt;
 111 -15.96210864 -005.64767019 1 101&lt;br /&gt;
 112 -15.96213878 -005.64782592 -15.96215760 -005.64789051 1 101&lt;br /&gt;
 115 -15.96229199 -005.64808544&lt;br /&gt;
 120 Linear Feature 3&lt;br /&gt;
 111 -15.96156820 -005.64813668 20&lt;br /&gt;
 111 -15.96263721 -005.64810368 20&lt;br /&gt;
 111 -15.96263233 -005.64792345 20&lt;br /&gt;
 115 -15.96304480 -005.64791075&lt;br /&gt;
 120 Linear Feature 2&lt;br /&gt;
 111 -15.96210864 -005.64767019 1 101&lt;br /&gt;
 111 -15.96210128 -005.64660525 1 105&lt;br /&gt;
 115 -15.96209919 -005.64630388&lt;br /&gt;
 120 Linear Feature 1&lt;br /&gt;
 111 -15.96154408 -005.64588717 1 105&lt;br /&gt;
 111 -15.96184445 -005.64588139 1 105&lt;br /&gt;
 112 -15.96204503 -005.64596036 -15.96210198 -005.64604073 1 105&lt;br /&gt;
 111 -15.96209919 -005.64630388 1 105&lt;br /&gt;
 112 -15.96217524 -005.64595582 -15.96225060 -005.64588070 1 105&lt;br /&gt;
 111 -15.96236918 -005.64587174 1 105&lt;br /&gt;
 115 -15.96269552 -005.64586403&lt;br /&gt;
 21 -15.95361317 -005.64657631 3 180.0000 3.0 Papi&lt;br /&gt;
 21 -15.95359638 -005.64551140 2 180.0000 3.0 Papi&lt;br /&gt;
 21 -15.96347774 -005.64645343 2 -1.2600 3.0 Papi&lt;br /&gt;
 20 -15.96192491 -005.64660719 90.0000 0 3 {@R}20-02{@@}{@Y}APRON&lt;br /&gt;
 20 -15.96225995 -005.64660719 90.0000 0 3 {@R}20-02{@@}{@Y}APRON&lt;br /&gt;
 14 -15.96312208 -005.64867411  82.02 0 Tower Viewpoint&lt;br /&gt;
 15 -15.96179344 -005.64822577 -50.36 Ramp Start 1&lt;br /&gt;
 1300 -15.96238032 -005.64819725 -129.45 gate jets Ramp Start 2&lt;br /&gt;
 15 -15.96285880 -005.64779046 -181.04 Ramp Start 3&lt;br /&gt;
 19 -15.95196179 -005.64670036 0 New Windsock 2&lt;br /&gt;
 19 -15.96603475 -005.64630065 0 New Windsock 1&lt;br /&gt;
&lt;br /&gt;
Copy and paste the above into &amp;lt;code&amp;gt;$SCENERY_BUILD_DIR/data/airports/FHSH.dat&amp;lt;/code&amp;gt;. We can now run &amp;lt;code&amp;gt;genapts&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 genapts850 --input=data/airports/FHSH --work=./work --dem-path=SRTM-3 --min-lon=-6 --max-lon=-5 --min-lat=-17 --max-lat=-15&lt;br /&gt;
 genapts850 --input=data/airports/FHSH.dat --work=./work --dem-path=SRTM-3 --airport=FHSH&lt;br /&gt;
&lt;br /&gt;
== Process Landclass Data ==&lt;br /&gt;
We can download landclass data from GeoFabrik, specifically from http://download.geofabrik.de/africa/saint-helena-ascension-and-tristan-da-cunha.html. Download the *.shp files and extract them into &amp;lt;code&amp;gt;$SCENERY_BUILD_DATA/data/shapefiles&amp;lt;/code&amp;gt;. Each type of file should go into its own folder. For example, copy all &amp;lt;code&amp;gt;gis_osm_places_a_free_1.*&amp;lt;/code&amp;gt; files into &amp;lt;code&amp;gt;$SCENERY_BUILD_DATA/data/shapefiles/gis_osm_places_a_free_1/*&amp;lt;/code&amp;gt;, as this is the format that TerraGear expects the files to be in. Usually, we would use a landmass (See Notes below) shapefile as our Default, but to simplify things for this tutorial, we can use the &amp;lt;code&amp;gt;gis_osm_places_a_free_1.shp&amp;lt;/code&amp;gt; file, as the landmass file and this file are identical for this particular island. We are now ready to run &amp;lt;code&amp;gt;ogr-decode&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 ogr-decode --max-segment 500 --area-type Default work/Default data/shapefiles/gis_osm_places_a_free_1/&lt;br /&gt;
&lt;br /&gt;
We have to run &amp;lt;code&amp;gt;ogr-decode&amp;lt;/code&amp;gt; for every land class (so urban, forest, lakes, roads etc). At each time, we need to specify the shapefile (the last argument in the above command) and the corresponding area material type that FlightGear recognizes (&amp;quot;Default&amp;quot;) in the above command. For this tutorial, we will run the command just once to get the construct the entire island as a &amp;quot;Default&amp;quot; landclass.&lt;br /&gt;
&lt;br /&gt;
== Bringing it all together ==&lt;br /&gt;
We can finally run &amp;lt;code&amp;gt;tg-construct&amp;lt;/code&amp;gt; to bring everything together&lt;br /&gt;
 tg-construct --priorities=/usr/local/share/TerraGear/default_priorities.txt --work-dir=./work --output-dir=./output/Terrain --min-lon=-6 --max-lon=-5 --min-lat=-17 --max-lat=-15 AirportArea AirportObj Default SRTM-3&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;$SCENERY_BUILD_DIR/output&amp;lt;/code&amp;gt; will now contain the built scenery. Point your FG instance to this path using &amp;lt;code&amp;gt;--fg-scenery&amp;lt;/code&amp;gt; and take a look at the built scenery!&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
* There are two docker images, &amp;lt;code&amp;gt;flightgear/terragear:ws20&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;flightgear/terragear:latest&amp;lt;/code&amp;gt;. The former corresponds to the 2.0 world scenery build, while the later points to the latest code. The latest container has several improvements and GDAL tools which can be used to manipulate shapefiles, but also unfortunately has bugs in the hgtchop and terrafit tools for SRTM-3 data. The best way is to use &amp;lt;code&amp;gt;flightgear/terragear:ws20&amp;lt;/code&amp;gt; for elevation data processing, and &amp;lt;code&amp;gt;flightgear/terragear:latest&amp;lt;/code&amp;gt; for everything else.&lt;br /&gt;
* The [https://osmdata.openstreetmap.de/data/land-polygons.html OSM coastlines data] is a good source for the landmass (&amp;quot;Default&amp;quot;) terrain, but is a single file for the entire world. &lt;br /&gt;
* You can use the following command (found in the latest terragear docker image) to &amp;quot;crop&amp;quot; the shapefile to an area of interest:&lt;br /&gt;
 ogr2ogr -clipsrc -6 -17 -5 -15 cut_landmass.shp land_polygons.shp&lt;br /&gt;
* As mentioned in the introduction, this tutorial is just a starting point. Have a look at the other TerraGear wiki articles. A good resource is also provided [https://forum.flightgear.org/viewtopic.php?t=35618 on the forum], which uses TerraGear GUI. You can use the concepts learned from there and run the commands in the docker image.&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Howto:Complete_TerraGear_example_using_docker&amp;diff=129849</id>
		<title>Howto:Complete TerraGear example using docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Howto:Complete_TerraGear_example_using_docker&amp;diff=129849"/>
		<updated>2021-01-06T18:04:49Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article aims to serve as a quick starting point for people wanting to build scenery using the dockerized version of the TerraGear scenery toolchain. This will allow users to build scenery on all popular operating systems including Windows, macOS and Linux without the hassle of building the terragear toolchain themselves. This is in no way a comprehensive introduction, but should be enough to get one used to the scenery generation process.&lt;br /&gt;
&lt;br /&gt;
[[File:Saint Helena Island generated using dockerized TerraGear.jpg|thumb|Saint Helena island generated using the docker image for the TerraGear toolchain]]&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
TerraGear requires three pieces of data for scenery generation:&lt;br /&gt;
&lt;br /&gt;
# Elevation data: This data defines how high each point in the scenery or land is. One source for such data is http://viewfinderpanoramas.org/Coverage%20map%20viewfinderpanoramas_org3.htm.&lt;br /&gt;
# Landclass data: This data defines what kind of &amp;quot;land&amp;quot; is under each point in the scenery or land is. For example, some point might be &amp;quot;urban&amp;quot; class, or &amp;quot;forest&amp;quot; class. One source for such data is http://download.geofabrik.de/, which is derived from OSM. &lt;br /&gt;
# Airport data: This data defines the position of runways, taxiways and other assorted airport information. One source for such data is the XPlane gateway.&lt;br /&gt;
&lt;br /&gt;
TerraGear consists of five tools:&lt;br /&gt;
&lt;br /&gt;
# hgtchop - Processing elevation data&lt;br /&gt;
# terrafit - Processing elevation data&lt;br /&gt;
# genapts - Processing airport data&lt;br /&gt;
# ogr-decode - Processing landclass data&lt;br /&gt;
# tg-construct - Generating the final scenery.&lt;br /&gt;
&lt;br /&gt;
== Scenery location ==&lt;br /&gt;
We will build Saint Helena Island, an island in the Atlantic Ocean. Specifically, we will be building the island around [https://en.wikipedia.org/wiki/Saint_Helena_Airport Saint Helena Airport] (ICAO: '''FHSH''').&lt;br /&gt;
&lt;br /&gt;
Its location is: DMS 15° 57′ 33″ S, 5° 38′ 45″ W, Decimal -5.645833 -15.959167&lt;br /&gt;
&lt;br /&gt;
A good vantage point to see progress is to start FG with the following options:&lt;br /&gt;
&lt;br /&gt;
 --lon=-5.62000000 --lat=-16.00000000 --altitude=4000 --heading=310&lt;br /&gt;
&lt;br /&gt;
The bounds for our build will be:&lt;br /&gt;
* Latitude: -6 to -5&lt;br /&gt;
* Longitude: -17 to -15&lt;br /&gt;
&lt;br /&gt;
Let &amp;lt;code&amp;gt;$SCENERY_BUILD_DIR&amp;lt;/code&amp;gt; be the directory containing all of our working files for this project.&lt;br /&gt;
&lt;br /&gt;
== Getting docker running ==&lt;br /&gt;
The first step is to have docker installed and accessible through the command line. Run the following command to fetch the terragear toolchain:&lt;br /&gt;
 docker pull flightgear/terragear:ws20&lt;br /&gt;
&lt;br /&gt;
Next, start a docker container to access the terragear tools:&lt;br /&gt;
&lt;br /&gt;
 docker run -i -v $SCENERY_BUILD_DIR:/terragear-work/ -t flightgear/terragear:ws20 /bin/bash&lt;br /&gt;
&lt;br /&gt;
Once this command runs successfully, the command line will now be a &amp;quot;window&amp;quot; into the docker container, allowing you to run the entire terragear toolchain. Because of the &amp;lt;code&amp;gt;-v&amp;lt;/code&amp;gt; argument (bind mount), the container can see the contents of &amp;lt;code&amp;gt;$SCENERY_BUILD_DIR&amp;lt;/code&amp;gt; will be visible at &amp;lt;code&amp;gt;/terragear-work/&amp;lt;/code&amp;gt; inside the container.&lt;br /&gt;
&lt;br /&gt;
== Process Elevation Data ==&lt;br /&gt;
The elevation data can be obtained from [http://viewfinderpanoramas.org/Coverage%20map%20viewfinderpanoramas_org3.htm ViewFinderPanoramas], specifically, the [http://viewfinderpanoramas.org/dem3/SD30.zip SD30] and [SE30 http://viewfinderpanoramas.org/dem3/SE30.zip] tiles cover this island.&lt;br /&gt;
&lt;br /&gt;
Extract and add to &amp;lt;code&amp;gt;$SCENERY_BUILD_DIR/data/SRTM-3/*.hgt&amp;lt;/code&amp;gt;. Run the following commands in the docker container:&lt;br /&gt;
&lt;br /&gt;
 cd  /terragear-work/&lt;br /&gt;
 for f in data/SRTM-3/*.hgt; do hgtchop 3 &amp;quot;${f}&amp;quot; &amp;quot; work/SRTM-3&amp;quot;; done&lt;br /&gt;
 terrafit work/SRTM-3&lt;br /&gt;
&lt;br /&gt;
== Process Airport Data ==&lt;br /&gt;
'''FHSH'''  is not available in FlightGear's &amp;lt;code&amp;gt;apt.dat&amp;lt;/code&amp;gt;, so the airport information has to be fetched from elsewhere. The XPlane gateway is one possible source. For this sample project, we can use the following data from https://github.com/accek/fg-nav-fixups:&lt;br /&gt;
&lt;br /&gt;
 1   1023 1 0 FHSH St Helena&lt;br /&gt;
 100 45.00 2 0 0.00 1 2 1 02 -15.96694276 -005.64575428  100    0 2 9 0 2 20 -15.94934298 -005.64615237  300    0 2 9 0 2&lt;br /&gt;
 110 1 0.00 358.7100 New Taxiway 4&lt;br /&gt;
 111 -15.96166211 -005.64927678&lt;br /&gt;
 111 -15.96340503 -005.64926307&lt;br /&gt;
 111 -15.96340434 -005.64836151&lt;br /&gt;
 111 -15.96290056 -005.64836043&lt;br /&gt;
 111 -15.96284142 -005.64854134&lt;br /&gt;
 111 -15.96265507 -005.64854103&lt;br /&gt;
 113 -15.96155909 -005.64854086&lt;br /&gt;
 110 2 0.00 358.7100 New Taxiway 3&lt;br /&gt;
 111 -15.94934844 -005.64635879 3 102&lt;br /&gt;
 111 -15.94935248 -005.64663563 3 102&lt;br /&gt;
 111 -15.94995561 -005.64662024 3 102&lt;br /&gt;
 113 -15.95019415 -005.64634336&lt;br /&gt;
 110 2 0.00 358.7100 New Taxiway 2&lt;br /&gt;
 111 -15.96693818 -005.64554618 3 102&lt;br /&gt;
 111 -15.96693596 -005.64524600 3 102&lt;br /&gt;
 111 -15.96628657 -005.64526997 3 102&lt;br /&gt;
 113 -15.96603006 -005.64556883&lt;br /&gt;
 110 2 0.00 358.7100 New Taxiway 1&lt;br /&gt;
 111 -15.96305635 -005.64765837 3 102&lt;br /&gt;
 111 -15.96240410 -005.64767341 3 102&lt;br /&gt;
 112 -15.96226078 -005.64761762 -15.96220044 -005.64756860 3 102&lt;br /&gt;
 111 -15.96219925 -005.64745814 3 102&lt;br /&gt;
 111 -15.96219005 -005.64624609 3 102&lt;br /&gt;
 112 -15.96223439 -005.64613746 -15.96227201 -005.64609544 3 102&lt;br /&gt;
 111 -15.96236947 -005.64606567&lt;br /&gt;
 111 -15.96184016 -005.64607709 3 102&lt;br /&gt;
 112 -15.96195708 -005.64616687 -15.96199469 -005.64621034 3 102&lt;br /&gt;
 111 -15.96199881 -005.64627387 3 102&lt;br /&gt;
 111 -15.96200448 -005.64744540 3 102&lt;br /&gt;
 112 -15.96197248 -005.64759953 -15.96193665 -005.64765444 3 102&lt;br /&gt;
 111 -15.96183543 -005.64768917 3 102&lt;br /&gt;
 111 -15.96154350 -005.64769949 3 102&lt;br /&gt;
 111 -15.96155909 -005.64854086&lt;br /&gt;
 111 -15.96265507 -005.64854103&lt;br /&gt;
 111 -15.96265481 -005.64818499&lt;br /&gt;
 113 -15.96306600 -005.64818480 3 102&lt;br /&gt;
 130 Airport Boundary&lt;br /&gt;
 111 -15.95876878 -005.64712051&lt;br /&gt;
 111 -15.96005216 -005.64729370&lt;br /&gt;
 111 -15.96043831 -005.64731000&lt;br /&gt;
 111 -15.96048880 -005.64864132&lt;br /&gt;
 111 -15.96154716 -005.64921198&lt;br /&gt;
 111 -15.96159626 -005.65014384&lt;br /&gt;
 111 -15.96388391 -005.64953797&lt;br /&gt;
 111 -15.96430513 -005.64699927&lt;br /&gt;
 111 -15.96882642 -005.64692255&lt;br /&gt;
 111 -15.96885682 -005.64412109&lt;br /&gt;
 111 -15.94564642 -005.64456651&lt;br /&gt;
 113 -15.94563863 -005.64716916&lt;br /&gt;
 120 Hold&lt;br /&gt;
 111 -15.96200516 -005.64660225 4 103&lt;br /&gt;
 115 -15.96218383 -005.64660129&lt;br /&gt;
 120 Linear Feature 5&lt;br /&gt;
 111 -15.96210864 -005.64767019 1 101&lt;br /&gt;
 112 -15.96206007 -005.64782922 -15.96201482 -005.64792776 1 101&lt;br /&gt;
 115 -15.96188449 -005.64810582&lt;br /&gt;
 120 Linear Feature 4&lt;br /&gt;
 111 -15.96210864 -005.64767019 1 101&lt;br /&gt;
 112 -15.96213878 -005.64782592 -15.96215760 -005.64789051 1 101&lt;br /&gt;
 115 -15.96229199 -005.64808544&lt;br /&gt;
 120 Linear Feature 3&lt;br /&gt;
 111 -15.96156820 -005.64813668 20&lt;br /&gt;
 111 -15.96263721 -005.64810368 20&lt;br /&gt;
 111 -15.96263233 -005.64792345 20&lt;br /&gt;
 115 -15.96304480 -005.64791075&lt;br /&gt;
 120 Linear Feature 2&lt;br /&gt;
 111 -15.96210864 -005.64767019 1 101&lt;br /&gt;
 111 -15.96210128 -005.64660525 1 105&lt;br /&gt;
 115 -15.96209919 -005.64630388&lt;br /&gt;
 120 Linear Feature 1&lt;br /&gt;
 111 -15.96154408 -005.64588717 1 105&lt;br /&gt;
 111 -15.96184445 -005.64588139 1 105&lt;br /&gt;
 112 -15.96204503 -005.64596036 -15.96210198 -005.64604073 1 105&lt;br /&gt;
 111 -15.96209919 -005.64630388 1 105&lt;br /&gt;
 112 -15.96217524 -005.64595582 -15.96225060 -005.64588070 1 105&lt;br /&gt;
 111 -15.96236918 -005.64587174 1 105&lt;br /&gt;
 115 -15.96269552 -005.64586403&lt;br /&gt;
 21 -15.95361317 -005.64657631 3 180.0000 3.0 Papi&lt;br /&gt;
 21 -15.95359638 -005.64551140 2 180.0000 3.0 Papi&lt;br /&gt;
 21 -15.96347774 -005.64645343 2 -1.2600 3.0 Papi&lt;br /&gt;
 20 -15.96192491 -005.64660719 90.0000 0 3 {@R}20-02{@@}{@Y}APRON&lt;br /&gt;
 20 -15.96225995 -005.64660719 90.0000 0 3 {@R}20-02{@@}{@Y}APRON&lt;br /&gt;
 14 -15.96312208 -005.64867411  82.02 0 Tower Viewpoint&lt;br /&gt;
 15 -15.96179344 -005.64822577 -50.36 Ramp Start 1&lt;br /&gt;
 1300 -15.96238032 -005.64819725 -129.45 gate jets Ramp Start 2&lt;br /&gt;
 15 -15.96285880 -005.64779046 -181.04 Ramp Start 3&lt;br /&gt;
 19 -15.95196179 -005.64670036 0 New Windsock 2&lt;br /&gt;
 19 -15.96603475 -005.64630065 0 New Windsock 1&lt;br /&gt;
&lt;br /&gt;
Copy and paste the above into &amp;lt;code&amp;gt;$SCENERY_BUILD_DIR/data/airports/FHSH.dat&amp;lt;/code&amp;gt;. We can now run &amp;lt;code&amp;gt;genapts&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 genapts850 --input=data/airports/FHSH --work=./work --dem-path=SRTM-3 --min-lon=-6 --max-lon=-5 --min-lat=-17 --max-lat=-15&lt;br /&gt;
 genapts850 --input=data/airports/FHSH.dat --work=./work --dem-path=SRTM-3 --airport=FHSH&lt;br /&gt;
&lt;br /&gt;
== Process Landclass Data ==&lt;br /&gt;
We can download landclass data from GeoFabrik, specifically from http://download.geofabrik.de/africa/saint-helena-ascension-and-tristan-da-cunha.html. Download the *.shp files and extract them into &amp;lt;code&amp;gt;$SCENERY_BUILD_DATA/data/shapefiles&amp;lt;/code&amp;gt;. Each type of file should go into its own folder. For example, copy all &amp;lt;code&amp;gt;gis_osm_places_a_free_1.*&amp;lt;/code&amp;gt; files into &amp;lt;code&amp;gt;$SCENERY_BUILD_DATA/data/shapefiles/gis_osm_places_a_free_1/*&amp;lt;/code&amp;gt;, as this is the format that TerraGear expects the files to be in. Usually, we would use a landmass (See Notes below) shapefile as our Default, but to simplify things for this tutorial, we can use the &amp;lt;code&amp;gt;gis_osm_places_a_free_1.shp&amp;lt;/code&amp;gt; file, as the landmass file and this file are identical for this particular island. We are now ready to run &amp;lt;code&amp;gt;ogr-decode&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 ogr-decode --max-segment 500 --area-type Default work/Default data/shapefiles/gis_osm_places_a_free_1/&lt;br /&gt;
&lt;br /&gt;
We have to run &amp;lt;code&amp;gt;ogr-decode&amp;lt;/code&amp;gt; for every land class (so urban, forest, lakes, roads etc). At each time, we need to specify the shapefile (the last argument in the above command) and the corresponding area material type that FlightGear recognizes (&amp;quot;Default&amp;quot;) in the above command. For this tutorial, we will run the command just once to get the construct the entire island as a &amp;quot;Default&amp;quot; landclass.&lt;br /&gt;
&lt;br /&gt;
== Bringing it all together ==&lt;br /&gt;
We can finally run &amp;lt;code&amp;gt;tg-construct&amp;lt;/code&amp;gt; to bring everything together&lt;br /&gt;
 tg-construct --priorities=/usr/local/share/TerraGear/default_priorities.txt --work-dir=./work --output-dir=./output/Terrain --min-lon=-6 --max-lon=-5 --min-lat=-17 --max-lat=-15 AirportArea AirportObj Default SRTM-3&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;$SCENERY_BUILD_DIR/output&amp;lt;/code&amp;gt; will now contain the built scenery. Point your FG instance to this path using &amp;lt;code&amp;gt;--fg-scenery&amp;lt;/code&amp;gt; and take a look at the built scenery!&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
* There are two docker images, &amp;lt;code&amp;gt;flightgear/terragear:ws20&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;flightgear/terragear:latest&amp;lt;/code&amp;gt;. The former corresponds to the 2.0 world scenery build, while the later points to the latest code. The latest container has several improvements and GDAL tools which can be used to manipulate shapefiles, but also unfortunately has bugs in the hgtchop and terrafit tools for SRTM-3 data. The best way is to use &amp;lt;code&amp;gt;flightgear/terragear:ws20&amp;lt;/code&amp;gt; for elevation data processing, and &amp;lt;code&amp;gt;flightgear/terragear:latest&amp;lt;/code&amp;gt; for everything else.&lt;br /&gt;
* The [https://osmdata.openstreetmap.de/data/land-polygons.html OSM coastlines data] is a good source for the landmass (&amp;quot;Default&amp;quot;) terrain, but is a single file for the entire world. &lt;br /&gt;
* You can use the following command (found in the latest terragear docker image) to &amp;quot;crop&amp;quot; the shapefile to an area of interest:&lt;br /&gt;
 ogr2ogr -clipsrc -6 -17 -5 -15 cut_landmass.shp land_polygons.shp&lt;br /&gt;
* As mentioned in the introduction, this tutorial is just a starting point. Have a look at the other TerraGear wiki articles. A good resource is also provided [https://forum.flightgear.org/viewtopic.php?t=35618 on the forum], which uses TerraGear GUI. You can use the concepts learned from there and run the commands in the docker image.&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Howto:Complete_TerraGear_example_using_docker&amp;diff=129848</id>
		<title>Howto:Complete TerraGear example using docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Howto:Complete_TerraGear_example_using_docker&amp;diff=129848"/>
		<updated>2021-01-06T09:56:40Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article aims to serve as a quick starting point for people wanting to build scenery using the dockerized version of the TerraGear scenery toolchain. This will allow users to build scenery on all popular operating systems including Windows, macOS and Linux without the hassle of building the terragear toolchain themselves. This is in no way a comprehensive introduction, but should be enough to get one used to the scenery generation process.&lt;br /&gt;
&lt;br /&gt;
[[File:Saint Helena Island generated using dockerized TerraGear.jpg|thumb|Saint Helena island generated using the docker image for the TerraGear toolchain]]&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
TerraGear requires three pieces of data for scenery generation:&lt;br /&gt;
&lt;br /&gt;
# Elevation data: This data defines how high each point in the scenery or land is. One source for such data is http://viewfinderpanoramas.org/Coverage%20map%20viewfinderpanoramas_org3.htm.&lt;br /&gt;
# Landclass data: This data defines what kind of &amp;quot;land&amp;quot; is under each point in the scenery or land is. For example, some point might be &amp;quot;urban&amp;quot; class, or &amp;quot;forest&amp;quot; class. One source for such data is http://download.geofabrik.de/, which is derived from OSM. &lt;br /&gt;
# Airport data: This data defines the position of runways, taxiways and other assorted airport information. One source for such data is the XPlane gateway.&lt;br /&gt;
&lt;br /&gt;
TerraGear consists of five tools:&lt;br /&gt;
&lt;br /&gt;
# hgtchop - Processing elevation data&lt;br /&gt;
# terrafit - Processing elevation data&lt;br /&gt;
# genapts - Processing airport data&lt;br /&gt;
# ogr-decode - Processing landclass data&lt;br /&gt;
# tg-construct - Generating the final scenery.&lt;br /&gt;
&lt;br /&gt;
== Scenery location ==&lt;br /&gt;
We will build Saint Helena Island, an island in the Atlantic Ocean. Specifically, we will be building the island around [https://en.wikipedia.org/wiki/Saint_Helena_Airport Saint Helena Airport] (ICAO: '''FHSH''').&lt;br /&gt;
&lt;br /&gt;
Its location is: DMS 15° 57′ 33″ S, 5° 38′ 45″ W, Decimal -5.645833 -15.959167&lt;br /&gt;
&lt;br /&gt;
A good vantage point to see progress is to start FG with the following options:&lt;br /&gt;
&lt;br /&gt;
 --lon=-5.62000000 --lat=-16.00000000 --altitude=4000 --heading=310&lt;br /&gt;
&lt;br /&gt;
The bounds for our build will be:&lt;br /&gt;
* Latitude: -6 to -5&lt;br /&gt;
* Longitude: -17 to -15&lt;br /&gt;
&lt;br /&gt;
Let &amp;lt;code&amp;gt;$SCENERY_BUILD_DIR&amp;lt;/code&amp;gt; be the directory containing all of our working files for this project.&lt;br /&gt;
&lt;br /&gt;
== Getting docker running ==&lt;br /&gt;
The first step is to have docker installed and accessible through the command line. Run the following command to fetch the terragear toolchain:&lt;br /&gt;
 docker pull flightgear/terragear:ws20&lt;br /&gt;
&lt;br /&gt;
Next, start a docker container to access the terragear tools:&lt;br /&gt;
&lt;br /&gt;
 docker run -i -v $SCENERY_BUILD_DIR:/terragear-work/ -t flightgear/terragear:ws20 /bin/bash&lt;br /&gt;
&lt;br /&gt;
Once this command runs successfully, the command line will now be a &amp;quot;window&amp;quot; into the docker container, allowing you to run the entire terragear toolchain. Because of the &amp;lt;code&amp;gt;-v&amp;lt;/code&amp;gt; argument (bind mount), the container can see the contents of &amp;lt;code&amp;gt;$SCENERY_BUILD_DIR&amp;lt;/code&amp;gt; will be visible at &amp;lt;code&amp;gt;/terragear-work/&amp;lt;/code&amp;gt; inside the container.&lt;br /&gt;
&lt;br /&gt;
== Process Elevation Data ==&lt;br /&gt;
The elevation data can be obtained from [http://viewfinderpanoramas.org/Coverage%20map%20viewfinderpanoramas_org3.htm ViewFinderPanoramas], specifically, the [http://viewfinderpanoramas.org/dem3/SD30.zip SD30] and [SE30 http://viewfinderpanoramas.org/dem3/SE30.zip] tiles cover this island.&lt;br /&gt;
&lt;br /&gt;
Extract and add to &amp;lt;code&amp;gt;$SCENERY_BUILD_DIR/data/SRTM-3/*.hgt&amp;lt;/code&amp;gt;. Run the following commands in the docker container:&lt;br /&gt;
&lt;br /&gt;
 cd  /terragear-work/&lt;br /&gt;
 for f in data/SRTM-3/*.hgt; do hgtchop 3 &amp;quot;${f}&amp;quot; &amp;quot; work/SRTM-3&amp;quot;; done&lt;br /&gt;
 terrafit work/SRTM-3&lt;br /&gt;
&lt;br /&gt;
== Process Airport Data ==&lt;br /&gt;
'''FHSH'''  is not available in FlightGear's &amp;lt;code&amp;gt;apt.dat&amp;lt;/code&amp;gt;, so the airport information has to be fetched from elsewhere. The XPlane gateway is one possible source. For this sample project, we can use the following data from https://github.com/accek/fg-nav-fixups:&lt;br /&gt;
&lt;br /&gt;
 1   1023 1 0 FHSH St Helena&lt;br /&gt;
 100 45.00 2 0 0.00 1 2 1 02 -15.96694276 -005.64575428  100    0 2 9 0 2 20 -15.94934298 -005.64615237  300    0 2 9 0 2&lt;br /&gt;
 110 1 0.00 358.7100 New Taxiway 4&lt;br /&gt;
 111 -15.96166211 -005.64927678&lt;br /&gt;
 111 -15.96340503 -005.64926307&lt;br /&gt;
 111 -15.96340434 -005.64836151&lt;br /&gt;
 111 -15.96290056 -005.64836043&lt;br /&gt;
 111 -15.96284142 -005.64854134&lt;br /&gt;
 111 -15.96265507 -005.64854103&lt;br /&gt;
 113 -15.96155909 -005.64854086&lt;br /&gt;
 110 2 0.00 358.7100 New Taxiway 3&lt;br /&gt;
 111 -15.94934844 -005.64635879 3 102&lt;br /&gt;
 111 -15.94935248 -005.64663563 3 102&lt;br /&gt;
 111 -15.94995561 -005.64662024 3 102&lt;br /&gt;
 113 -15.95019415 -005.64634336&lt;br /&gt;
 110 2 0.00 358.7100 New Taxiway 2&lt;br /&gt;
 111 -15.96693818 -005.64554618 3 102&lt;br /&gt;
 111 -15.96693596 -005.64524600 3 102&lt;br /&gt;
 111 -15.96628657 -005.64526997 3 102&lt;br /&gt;
 113 -15.96603006 -005.64556883&lt;br /&gt;
 110 2 0.00 358.7100 New Taxiway 1&lt;br /&gt;
 111 -15.96305635 -005.64765837 3 102&lt;br /&gt;
 111 -15.96240410 -005.64767341 3 102&lt;br /&gt;
 112 -15.96226078 -005.64761762 -15.96220044 -005.64756860 3 102&lt;br /&gt;
 111 -15.96219925 -005.64745814 3 102&lt;br /&gt;
 111 -15.96219005 -005.64624609 3 102&lt;br /&gt;
 112 -15.96223439 -005.64613746 -15.96227201 -005.64609544 3 102&lt;br /&gt;
 111 -15.96236947 -005.64606567&lt;br /&gt;
 111 -15.96184016 -005.64607709 3 102&lt;br /&gt;
 112 -15.96195708 -005.64616687 -15.96199469 -005.64621034 3 102&lt;br /&gt;
 111 -15.96199881 -005.64627387 3 102&lt;br /&gt;
 111 -15.96200448 -005.64744540 3 102&lt;br /&gt;
 112 -15.96197248 -005.64759953 -15.96193665 -005.64765444 3 102&lt;br /&gt;
 111 -15.96183543 -005.64768917 3 102&lt;br /&gt;
 111 -15.96154350 -005.64769949 3 102&lt;br /&gt;
 111 -15.96155909 -005.64854086&lt;br /&gt;
 111 -15.96265507 -005.64854103&lt;br /&gt;
 111 -15.96265481 -005.64818499&lt;br /&gt;
 113 -15.96306600 -005.64818480 3 102&lt;br /&gt;
 130 Airport Boundary&lt;br /&gt;
 111 -15.95876878 -005.64712051&lt;br /&gt;
 111 -15.96005216 -005.64729370&lt;br /&gt;
 111 -15.96043831 -005.64731000&lt;br /&gt;
 111 -15.96048880 -005.64864132&lt;br /&gt;
 111 -15.96154716 -005.64921198&lt;br /&gt;
 111 -15.96159626 -005.65014384&lt;br /&gt;
 111 -15.96388391 -005.64953797&lt;br /&gt;
 111 -15.96430513 -005.64699927&lt;br /&gt;
 111 -15.96882642 -005.64692255&lt;br /&gt;
 111 -15.96885682 -005.64412109&lt;br /&gt;
 111 -15.94564642 -005.64456651&lt;br /&gt;
 113 -15.94563863 -005.64716916&lt;br /&gt;
 120 Hold&lt;br /&gt;
 111 -15.96200516 -005.64660225 4 103&lt;br /&gt;
 115 -15.96218383 -005.64660129&lt;br /&gt;
 120 Linear Feature 5&lt;br /&gt;
 111 -15.96210864 -005.64767019 1 101&lt;br /&gt;
 112 -15.96206007 -005.64782922 -15.96201482 -005.64792776 1 101&lt;br /&gt;
 115 -15.96188449 -005.64810582&lt;br /&gt;
 120 Linear Feature 4&lt;br /&gt;
 111 -15.96210864 -005.64767019 1 101&lt;br /&gt;
 112 -15.96213878 -005.64782592 -15.96215760 -005.64789051 1 101&lt;br /&gt;
 115 -15.96229199 -005.64808544&lt;br /&gt;
 120 Linear Feature 3&lt;br /&gt;
 111 -15.96156820 -005.64813668 20&lt;br /&gt;
 111 -15.96263721 -005.64810368 20&lt;br /&gt;
 111 -15.96263233 -005.64792345 20&lt;br /&gt;
 115 -15.96304480 -005.64791075&lt;br /&gt;
 120 Linear Feature 2&lt;br /&gt;
 111 -15.96210864 -005.64767019 1 101&lt;br /&gt;
 111 -15.96210128 -005.64660525 1 105&lt;br /&gt;
 115 -15.96209919 -005.64630388&lt;br /&gt;
 120 Linear Feature 1&lt;br /&gt;
 111 -15.96154408 -005.64588717 1 105&lt;br /&gt;
 111 -15.96184445 -005.64588139 1 105&lt;br /&gt;
 112 -15.96204503 -005.64596036 -15.96210198 -005.64604073 1 105&lt;br /&gt;
 111 -15.96209919 -005.64630388 1 105&lt;br /&gt;
 112 -15.96217524 -005.64595582 -15.96225060 -005.64588070 1 105&lt;br /&gt;
 111 -15.96236918 -005.64587174 1 105&lt;br /&gt;
 115 -15.96269552 -005.64586403&lt;br /&gt;
 21 -15.95361317 -005.64657631 3 180.0000 3.0 Papi&lt;br /&gt;
 21 -15.95359638 -005.64551140 2 180.0000 3.0 Papi&lt;br /&gt;
 21 -15.96347774 -005.64645343 2 -1.2600 3.0 Papi&lt;br /&gt;
 20 -15.96192491 -005.64660719 90.0000 0 3 {@R}20-02{@@}{@Y}APRON&lt;br /&gt;
 20 -15.96225995 -005.64660719 90.0000 0 3 {@R}20-02{@@}{@Y}APRON&lt;br /&gt;
 14 -15.96312208 -005.64867411  82.02 0 Tower Viewpoint&lt;br /&gt;
 15 -15.96179344 -005.64822577 -50.36 Ramp Start 1&lt;br /&gt;
 1300 -15.96238032 -005.64819725 -129.45 gate jets Ramp Start 2&lt;br /&gt;
 15 -15.96285880 -005.64779046 -181.04 Ramp Start 3&lt;br /&gt;
 19 -15.95196179 -005.64670036 0 New Windsock 2&lt;br /&gt;
 19 -15.96603475 -005.64630065 0 New Windsock 1&lt;br /&gt;
&lt;br /&gt;
Copy and paste the above into &amp;lt;code&amp;gt;$SCENERY_BUILD_DIR/data/airports/FHSH.dat&amp;lt;/code&amp;gt;. We can now run &amp;lt;code&amp;gt;genapts&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 genapts850 --input=data/airports/FHSH --work=./work --dem-path=SRTM-3 --min-lon=-6 --max-lon=-5 --min-lat=-17 --max-lat=-15&lt;br /&gt;
 genapts850 --input=data/airports/FHSH.dat --work=./work --dem-path=SRTM-3 --airport=FHSH&lt;br /&gt;
&lt;br /&gt;
== Process Landclass Data ==&lt;br /&gt;
We can download landclass data from GeoFabrik, specifically from http://download.geofabrik.de/africa/saint-helena-ascension-and-tristan-da-cunha.html. Download the *.shp files and extract them into &amp;lt;code&amp;gt;$SCENERY_BUILD_DATA/data/shapefiles&amp;lt;/code&amp;gt;. Each type of file should go into its own folder. For example, copy all &amp;lt;code&amp;gt;gis_osm_landuse_a_free_1.*&amp;lt;/code&amp;gt; files into &amp;lt;code&amp;gt;$SCENERY_BUILD_DATA/data/shapefiles/gis_osm_landuse_a_free_1/*&amp;lt;/code&amp;gt;, as this is the format that TerraGear expects the files to be in. Usually, we would use a landmass (See Notes below) shapefile as our Default, but to simplify things for this tutorial, we can use the &amp;lt;code&amp;gt;gis_osm_landuse_a_free_1.shp&amp;lt;/code&amp;gt; file, as the landmass file and this file are identical for this particular island. We are now ready to run &amp;lt;code&amp;gt;ogr-decode&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 ogr-decode --max-segment 500 --area-type Default work/Default data/shapefiles/gis_osm_landuse_a_free_1/&lt;br /&gt;
&lt;br /&gt;
We have to run &amp;lt;code&amp;gt;ogr-decode&amp;lt;/code&amp;gt; for every land class (so urban, forest, lakes, roads etc). At each time, we need to specify the shapefile (the last argument in the above command) and the corresponding area material type that FlightGear recognizes (&amp;quot;Default&amp;quot;) in the above command. For this tutorial, we will run the command just once to get the construct the entire island as a &amp;quot;Default&amp;quot; landclass.&lt;br /&gt;
&lt;br /&gt;
== Bringing it all together ==&lt;br /&gt;
We can finally run &amp;lt;code&amp;gt;tg-construct&amp;lt;/code&amp;gt; to bring everything together&lt;br /&gt;
 tg-construct --priorities=/usr/local/share/TerraGear/default_priorities.txt --work-dir=./work --output-dir=./output/Terrain --min-lon=-6 --max-lon=-5 --min-lat=-17 --max-lat=-15 AirportArea AirportObj Default SRTM-3&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;$SCENERY_BUILD_DIR/output&amp;lt;/code&amp;gt; will now contain the built scenery. Point your FG instance to this path using &amp;lt;code&amp;gt;--fg-scenery&amp;lt;/code&amp;gt; and take a look at the built scenery!&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
* There are two docker images, &amp;lt;code&amp;gt;flightgear/terragear:ws20&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;flightgear/terragear:latest&amp;lt;/code&amp;gt;. The former corresponds to the 2.0 world scenery build, while the later points to the latest code. The latest container has several improvements and GDAL tools which can be used to manipulate shapefiles, but also unfortunately has bugs in the hgtchop and terrafit tools for SRTM-3 data. The best way is to use &amp;lt;code&amp;gt;flightgear/terragear:ws20&amp;lt;/code&amp;gt; for elevation data processing, and &amp;lt;code&amp;gt;flightgear/terragear:latest&amp;lt;/code&amp;gt; for everything else.&lt;br /&gt;
* The [https://osmdata.openstreetmap.de/data/land-polygons.html OSM coastlines data] is a good source for the landmass (&amp;quot;Default&amp;quot;) terrain, but is a single file for the entire world. &lt;br /&gt;
* You can use the following command (found in the latest terragear docker image) to &amp;quot;crop&amp;quot; the shapefile to an area of interest:&lt;br /&gt;
 ogr2ogr -clipsrc -6 -17 -5 -15 cut_landmass.shp land_polygons.shp&lt;br /&gt;
* As mentioned in the introduction, this tutorial is just a starting point. Have a look at the other TerraGear wiki articles. A good resource is also provided [https://forum.flightgear.org/viewtopic.php?t=35618 on the forum], which uses TerraGear GUI. You can use the concepts learned from there and run the commands in the docker image.&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Howto:Complete_TerraGear_example_using_docker&amp;diff=129847</id>
		<title>Howto:Complete TerraGear example using docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Howto:Complete_TerraGear_example_using_docker&amp;diff=129847"/>
		<updated>2021-01-06T09:56:22Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article aims to serve as a quick starting point for people wanting to build scenery using the dockerized version of the TerraGear scenery toolchain. This will allow users to build scenery on all popular operating systems including Windows, macOS and Linux without the hassle of building the terragear toolchain themselves. This is in no way a comprehensive introduction, but should be enough to get one used to the scenery generation process.&lt;br /&gt;
&lt;br /&gt;
[[File:Saint Helena Island generated using dockerized TerraGear.jpg|thumb|An island generated using the docker image for the TerraGear toolchain]]&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
TerraGear requires three pieces of data for scenery generation:&lt;br /&gt;
&lt;br /&gt;
# Elevation data: This data defines how high each point in the scenery or land is. One source for such data is http://viewfinderpanoramas.org/Coverage%20map%20viewfinderpanoramas_org3.htm.&lt;br /&gt;
# Landclass data: This data defines what kind of &amp;quot;land&amp;quot; is under each point in the scenery or land is. For example, some point might be &amp;quot;urban&amp;quot; class, or &amp;quot;forest&amp;quot; class. One source for such data is http://download.geofabrik.de/, which is derived from OSM. &lt;br /&gt;
# Airport data: This data defines the position of runways, taxiways and other assorted airport information. One source for such data is the XPlane gateway.&lt;br /&gt;
&lt;br /&gt;
TerraGear consists of five tools:&lt;br /&gt;
&lt;br /&gt;
# hgtchop - Processing elevation data&lt;br /&gt;
# terrafit - Processing elevation data&lt;br /&gt;
# genapts - Processing airport data&lt;br /&gt;
# ogr-decode - Processing landclass data&lt;br /&gt;
# tg-construct - Generating the final scenery.&lt;br /&gt;
&lt;br /&gt;
== Scenery location ==&lt;br /&gt;
We will build Saint Helena Island, an island in the Atlantic Ocean. Specifically, we will be building the island around [https://en.wikipedia.org/wiki/Saint_Helena_Airport Saint Helena Airport] (ICAO: '''FHSH''').&lt;br /&gt;
&lt;br /&gt;
Its location is: DMS 15° 57′ 33″ S, 5° 38′ 45″ W, Decimal -5.645833 -15.959167&lt;br /&gt;
&lt;br /&gt;
A good vantage point to see progress is to start FG with the following options:&lt;br /&gt;
&lt;br /&gt;
 --lon=-5.62000000 --lat=-16.00000000 --altitude=4000 --heading=310&lt;br /&gt;
&lt;br /&gt;
The bounds for our build will be:&lt;br /&gt;
* Latitude: -6 to -5&lt;br /&gt;
* Longitude: -17 to -15&lt;br /&gt;
&lt;br /&gt;
Let &amp;lt;code&amp;gt;$SCENERY_BUILD_DIR&amp;lt;/code&amp;gt; be the directory containing all of our working files for this project.&lt;br /&gt;
&lt;br /&gt;
== Getting docker running ==&lt;br /&gt;
The first step is to have docker installed and accessible through the command line. Run the following command to fetch the terragear toolchain:&lt;br /&gt;
 docker pull flightgear/terragear:ws20&lt;br /&gt;
&lt;br /&gt;
Next, start a docker container to access the terragear tools:&lt;br /&gt;
&lt;br /&gt;
 docker run -i -v $SCENERY_BUILD_DIR:/terragear-work/ -t flightgear/terragear:ws20 /bin/bash&lt;br /&gt;
&lt;br /&gt;
Once this command runs successfully, the command line will now be a &amp;quot;window&amp;quot; into the docker container, allowing you to run the entire terragear toolchain. Because of the &amp;lt;code&amp;gt;-v&amp;lt;/code&amp;gt; argument (bind mount), the container can see the contents of &amp;lt;code&amp;gt;$SCENERY_BUILD_DIR&amp;lt;/code&amp;gt; will be visible at &amp;lt;code&amp;gt;/terragear-work/&amp;lt;/code&amp;gt; inside the container.&lt;br /&gt;
&lt;br /&gt;
== Process Elevation Data ==&lt;br /&gt;
The elevation data can be obtained from [http://viewfinderpanoramas.org/Coverage%20map%20viewfinderpanoramas_org3.htm ViewFinderPanoramas], specifically, the [http://viewfinderpanoramas.org/dem3/SD30.zip SD30] and [SE30 http://viewfinderpanoramas.org/dem3/SE30.zip] tiles cover this island.&lt;br /&gt;
&lt;br /&gt;
Extract and add to &amp;lt;code&amp;gt;$SCENERY_BUILD_DIR/data/SRTM-3/*.hgt&amp;lt;/code&amp;gt;. Run the following commands in the docker container:&lt;br /&gt;
&lt;br /&gt;
 cd  /terragear-work/&lt;br /&gt;
 for f in data/SRTM-3/*.hgt; do hgtchop 3 &amp;quot;${f}&amp;quot; &amp;quot; work/SRTM-3&amp;quot;; done&lt;br /&gt;
 terrafit work/SRTM-3&lt;br /&gt;
&lt;br /&gt;
== Process Airport Data ==&lt;br /&gt;
'''FHSH'''  is not available in FlightGear's &amp;lt;code&amp;gt;apt.dat&amp;lt;/code&amp;gt;, so the airport information has to be fetched from elsewhere. The XPlane gateway is one possible source. For this sample project, we can use the following data from https://github.com/accek/fg-nav-fixups:&lt;br /&gt;
&lt;br /&gt;
 1   1023 1 0 FHSH St Helena&lt;br /&gt;
 100 45.00 2 0 0.00 1 2 1 02 -15.96694276 -005.64575428  100    0 2 9 0 2 20 -15.94934298 -005.64615237  300    0 2 9 0 2&lt;br /&gt;
 110 1 0.00 358.7100 New Taxiway 4&lt;br /&gt;
 111 -15.96166211 -005.64927678&lt;br /&gt;
 111 -15.96340503 -005.64926307&lt;br /&gt;
 111 -15.96340434 -005.64836151&lt;br /&gt;
 111 -15.96290056 -005.64836043&lt;br /&gt;
 111 -15.96284142 -005.64854134&lt;br /&gt;
 111 -15.96265507 -005.64854103&lt;br /&gt;
 113 -15.96155909 -005.64854086&lt;br /&gt;
 110 2 0.00 358.7100 New Taxiway 3&lt;br /&gt;
 111 -15.94934844 -005.64635879 3 102&lt;br /&gt;
 111 -15.94935248 -005.64663563 3 102&lt;br /&gt;
 111 -15.94995561 -005.64662024 3 102&lt;br /&gt;
 113 -15.95019415 -005.64634336&lt;br /&gt;
 110 2 0.00 358.7100 New Taxiway 2&lt;br /&gt;
 111 -15.96693818 -005.64554618 3 102&lt;br /&gt;
 111 -15.96693596 -005.64524600 3 102&lt;br /&gt;
 111 -15.96628657 -005.64526997 3 102&lt;br /&gt;
 113 -15.96603006 -005.64556883&lt;br /&gt;
 110 2 0.00 358.7100 New Taxiway 1&lt;br /&gt;
 111 -15.96305635 -005.64765837 3 102&lt;br /&gt;
 111 -15.96240410 -005.64767341 3 102&lt;br /&gt;
 112 -15.96226078 -005.64761762 -15.96220044 -005.64756860 3 102&lt;br /&gt;
 111 -15.96219925 -005.64745814 3 102&lt;br /&gt;
 111 -15.96219005 -005.64624609 3 102&lt;br /&gt;
 112 -15.96223439 -005.64613746 -15.96227201 -005.64609544 3 102&lt;br /&gt;
 111 -15.96236947 -005.64606567&lt;br /&gt;
 111 -15.96184016 -005.64607709 3 102&lt;br /&gt;
 112 -15.96195708 -005.64616687 -15.96199469 -005.64621034 3 102&lt;br /&gt;
 111 -15.96199881 -005.64627387 3 102&lt;br /&gt;
 111 -15.96200448 -005.64744540 3 102&lt;br /&gt;
 112 -15.96197248 -005.64759953 -15.96193665 -005.64765444 3 102&lt;br /&gt;
 111 -15.96183543 -005.64768917 3 102&lt;br /&gt;
 111 -15.96154350 -005.64769949 3 102&lt;br /&gt;
 111 -15.96155909 -005.64854086&lt;br /&gt;
 111 -15.96265507 -005.64854103&lt;br /&gt;
 111 -15.96265481 -005.64818499&lt;br /&gt;
 113 -15.96306600 -005.64818480 3 102&lt;br /&gt;
 130 Airport Boundary&lt;br /&gt;
 111 -15.95876878 -005.64712051&lt;br /&gt;
 111 -15.96005216 -005.64729370&lt;br /&gt;
 111 -15.96043831 -005.64731000&lt;br /&gt;
 111 -15.96048880 -005.64864132&lt;br /&gt;
 111 -15.96154716 -005.64921198&lt;br /&gt;
 111 -15.96159626 -005.65014384&lt;br /&gt;
 111 -15.96388391 -005.64953797&lt;br /&gt;
 111 -15.96430513 -005.64699927&lt;br /&gt;
 111 -15.96882642 -005.64692255&lt;br /&gt;
 111 -15.96885682 -005.64412109&lt;br /&gt;
 111 -15.94564642 -005.64456651&lt;br /&gt;
 113 -15.94563863 -005.64716916&lt;br /&gt;
 120 Hold&lt;br /&gt;
 111 -15.96200516 -005.64660225 4 103&lt;br /&gt;
 115 -15.96218383 -005.64660129&lt;br /&gt;
 120 Linear Feature 5&lt;br /&gt;
 111 -15.96210864 -005.64767019 1 101&lt;br /&gt;
 112 -15.96206007 -005.64782922 -15.96201482 -005.64792776 1 101&lt;br /&gt;
 115 -15.96188449 -005.64810582&lt;br /&gt;
 120 Linear Feature 4&lt;br /&gt;
 111 -15.96210864 -005.64767019 1 101&lt;br /&gt;
 112 -15.96213878 -005.64782592 -15.96215760 -005.64789051 1 101&lt;br /&gt;
 115 -15.96229199 -005.64808544&lt;br /&gt;
 120 Linear Feature 3&lt;br /&gt;
 111 -15.96156820 -005.64813668 20&lt;br /&gt;
 111 -15.96263721 -005.64810368 20&lt;br /&gt;
 111 -15.96263233 -005.64792345 20&lt;br /&gt;
 115 -15.96304480 -005.64791075&lt;br /&gt;
 120 Linear Feature 2&lt;br /&gt;
 111 -15.96210864 -005.64767019 1 101&lt;br /&gt;
 111 -15.96210128 -005.64660525 1 105&lt;br /&gt;
 115 -15.96209919 -005.64630388&lt;br /&gt;
 120 Linear Feature 1&lt;br /&gt;
 111 -15.96154408 -005.64588717 1 105&lt;br /&gt;
 111 -15.96184445 -005.64588139 1 105&lt;br /&gt;
 112 -15.96204503 -005.64596036 -15.96210198 -005.64604073 1 105&lt;br /&gt;
 111 -15.96209919 -005.64630388 1 105&lt;br /&gt;
 112 -15.96217524 -005.64595582 -15.96225060 -005.64588070 1 105&lt;br /&gt;
 111 -15.96236918 -005.64587174 1 105&lt;br /&gt;
 115 -15.96269552 -005.64586403&lt;br /&gt;
 21 -15.95361317 -005.64657631 3 180.0000 3.0 Papi&lt;br /&gt;
 21 -15.95359638 -005.64551140 2 180.0000 3.0 Papi&lt;br /&gt;
 21 -15.96347774 -005.64645343 2 -1.2600 3.0 Papi&lt;br /&gt;
 20 -15.96192491 -005.64660719 90.0000 0 3 {@R}20-02{@@}{@Y}APRON&lt;br /&gt;
 20 -15.96225995 -005.64660719 90.0000 0 3 {@R}20-02{@@}{@Y}APRON&lt;br /&gt;
 14 -15.96312208 -005.64867411  82.02 0 Tower Viewpoint&lt;br /&gt;
 15 -15.96179344 -005.64822577 -50.36 Ramp Start 1&lt;br /&gt;
 1300 -15.96238032 -005.64819725 -129.45 gate jets Ramp Start 2&lt;br /&gt;
 15 -15.96285880 -005.64779046 -181.04 Ramp Start 3&lt;br /&gt;
 19 -15.95196179 -005.64670036 0 New Windsock 2&lt;br /&gt;
 19 -15.96603475 -005.64630065 0 New Windsock 1&lt;br /&gt;
&lt;br /&gt;
Copy and paste the above into &amp;lt;code&amp;gt;$SCENERY_BUILD_DIR/data/airports/FHSH.dat&amp;lt;/code&amp;gt;. We can now run &amp;lt;code&amp;gt;genapts&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 genapts850 --input=data/airports/FHSH --work=./work --dem-path=SRTM-3 --min-lon=-6 --max-lon=-5 --min-lat=-17 --max-lat=-15&lt;br /&gt;
 genapts850 --input=data/airports/FHSH.dat --work=./work --dem-path=SRTM-3 --airport=FHSH&lt;br /&gt;
&lt;br /&gt;
== Process Landclass Data ==&lt;br /&gt;
We can download landclass data from GeoFabrik, specifically from http://download.geofabrik.de/africa/saint-helena-ascension-and-tristan-da-cunha.html. Download the *.shp files and extract them into &amp;lt;code&amp;gt;$SCENERY_BUILD_DATA/data/shapefiles&amp;lt;/code&amp;gt;. Each type of file should go into its own folder. For example, copy all &amp;lt;code&amp;gt;gis_osm_landuse_a_free_1.*&amp;lt;/code&amp;gt; files into &amp;lt;code&amp;gt;$SCENERY_BUILD_DATA/data/shapefiles/gis_osm_landuse_a_free_1/*&amp;lt;/code&amp;gt;, as this is the format that TerraGear expects the files to be in. Usually, we would use a landmass (See Notes below) shapefile as our Default, but to simplify things for this tutorial, we can use the &amp;lt;code&amp;gt;gis_osm_landuse_a_free_1.shp&amp;lt;/code&amp;gt; file, as the landmass file and this file are identical for this particular island. We are now ready to run &amp;lt;code&amp;gt;ogr-decode&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 ogr-decode --max-segment 500 --area-type Default work/Default data/shapefiles/gis_osm_landuse_a_free_1/&lt;br /&gt;
&lt;br /&gt;
We have to run &amp;lt;code&amp;gt;ogr-decode&amp;lt;/code&amp;gt; for every land class (so urban, forest, lakes, roads etc). At each time, we need to specify the shapefile (the last argument in the above command) and the corresponding area material type that FlightGear recognizes (&amp;quot;Default&amp;quot;) in the above command. For this tutorial, we will run the command just once to get the construct the entire island as a &amp;quot;Default&amp;quot; landclass.&lt;br /&gt;
&lt;br /&gt;
== Bringing it all together ==&lt;br /&gt;
We can finally run &amp;lt;code&amp;gt;tg-construct&amp;lt;/code&amp;gt; to bring everything together&lt;br /&gt;
 tg-construct --priorities=/usr/local/share/TerraGear/default_priorities.txt --work-dir=./work --output-dir=./output/Terrain --min-lon=-6 --max-lon=-5 --min-lat=-17 --max-lat=-15 AirportArea AirportObj Default SRTM-3&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;$SCENERY_BUILD_DIR/output&amp;lt;/code&amp;gt; will now contain the built scenery. Point your FG instance to this path using &amp;lt;code&amp;gt;--fg-scenery&amp;lt;/code&amp;gt; and take a look at the built scenery!&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
* There are two docker images, &amp;lt;code&amp;gt;flightgear/terragear:ws20&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;flightgear/terragear:latest&amp;lt;/code&amp;gt;. The former corresponds to the 2.0 world scenery build, while the later points to the latest code. The latest container has several improvements and GDAL tools which can be used to manipulate shapefiles, but also unfortunately has bugs in the hgtchop and terrafit tools for SRTM-3 data. The best way is to use &amp;lt;code&amp;gt;flightgear/terragear:ws20&amp;lt;/code&amp;gt; for elevation data processing, and &amp;lt;code&amp;gt;flightgear/terragear:latest&amp;lt;/code&amp;gt; for everything else.&lt;br /&gt;
* The [https://osmdata.openstreetmap.de/data/land-polygons.html OSM coastlines data] is a good source for the landmass (&amp;quot;Default&amp;quot;) terrain, but is a single file for the entire world. &lt;br /&gt;
* You can use the following command (found in the latest terragear docker image) to &amp;quot;crop&amp;quot; the shapefile to an area of interest:&lt;br /&gt;
 ogr2ogr -clipsrc -6 -17 -5 -15 cut_landmass.shp land_polygons.shp&lt;br /&gt;
* As mentioned in the introduction, this tutorial is just a starting point. Have a look at the other TerraGear wiki articles. A good resource is also provided [https://forum.flightgear.org/viewtopic.php?t=35618 on the forum], which uses TerraGear GUI. You can use the concepts learned from there and run the commands in the docker image.&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=File:Saint_Helena_Island_generated_using_dockerized_TerraGear.jpg&amp;diff=129846</id>
		<title>File:Saint Helena Island generated using dockerized TerraGear.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=File:Saint_Helena_Island_generated_using_dockerized_TerraGear.jpg&amp;diff=129846"/>
		<updated>2021-01-06T09:56:18Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: /* {{int:filedesc}} */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=Saint Helena island generated using the docker image for the TerraGear toolchain}}&lt;br /&gt;
|date=2021-01-06&lt;br /&gt;
|source={{own}}&lt;br /&gt;
|author=[[User:Fahim Dalvi|Fahim Dalvi]]&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{self|cc-by-sa-4.0}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:TerraGear]]&lt;br /&gt;
[[Category:Docker]]&lt;br /&gt;
[[Category:Scenery]]&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=File:Saint_Helena_Island_generated_using_dockerized_TerraGear.jpg&amp;diff=129845</id>
		<title>File:Saint Helena Island generated using dockerized TerraGear.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=File:Saint_Helena_Island_generated_using_dockerized_TerraGear.jpg&amp;diff=129845"/>
		<updated>2021-01-06T09:55:14Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: User created page with UploadWizard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=An island generated using the docker image for the TerraGear toolchain}}&lt;br /&gt;
|date=2021-01-06&lt;br /&gt;
|source={{own}}&lt;br /&gt;
|author=[[User:Fahim Dalvi|Fahim Dalvi]]&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{self|cc-by-sa-4.0}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:TerraGear]]&lt;br /&gt;
[[Category:Docker]]&lt;br /&gt;
[[Category:Scenery]]&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Howto:Complete_TerraGear_example_using_docker&amp;diff=129844</id>
		<title>Howto:Complete TerraGear example using docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Howto:Complete_TerraGear_example_using_docker&amp;diff=129844"/>
		<updated>2021-01-06T09:50:13Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: Created page with &amp;quot;This article aims to serve as a quick starting point for people wanting to build scenery using the dockerized version of the TerraGear scenery toolchain. This will allow users...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article aims to serve as a quick starting point for people wanting to build scenery using the dockerized version of the TerraGear scenery toolchain. This will allow users to build scenery on all popular operating systems including Windows, macOS and Linux without the hassle of building the terragear toolchain themselves. This is in no way a comprehensive introduction, but should be enough to get one used to the scenery generation process.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
TerraGear requires three pieces of data for scenery generation:&lt;br /&gt;
&lt;br /&gt;
# Elevation data: This data defines how high each point in the scenery or land is. One source for such data is http://viewfinderpanoramas.org/Coverage%20map%20viewfinderpanoramas_org3.htm.&lt;br /&gt;
# Landclass data: This data defines what kind of &amp;quot;land&amp;quot; is under each point in the scenery or land is. For example, some point might be &amp;quot;urban&amp;quot; class, or &amp;quot;forest&amp;quot; class. One source for such data is http://download.geofabrik.de/, which is derived from OSM. &lt;br /&gt;
# Airport data: This data defines the position of runways, taxiways and other assorted airport information. One source for such data is the XPlane gateway.&lt;br /&gt;
&lt;br /&gt;
TerraGear consists of five tools:&lt;br /&gt;
&lt;br /&gt;
# hgtchop - Processing elevation data&lt;br /&gt;
# terrafit - Processing elevation data&lt;br /&gt;
# genapts - Processing airport data&lt;br /&gt;
# ogr-decode - Processing landclass data&lt;br /&gt;
# tg-construct - Generating the final scenery.&lt;br /&gt;
&lt;br /&gt;
== Scenery location ==&lt;br /&gt;
We will build Saint Helena Island, an island in the Atlantic Ocean. Specifically, we will be building the island around [https://en.wikipedia.org/wiki/Saint_Helena_Airport Saint Helena Airport] (ICAO: '''FHSH''').&lt;br /&gt;
&lt;br /&gt;
Its location is: DMS 15° 57′ 33″ S, 5° 38′ 45″ W, Decimal -5.645833 -15.959167&lt;br /&gt;
&lt;br /&gt;
A good vantage point to see progress is to start FG with the following options:&lt;br /&gt;
&lt;br /&gt;
 --lon=-5.62000000 --lat=-16.00000000 --altitude=4000 --heading=310&lt;br /&gt;
&lt;br /&gt;
The bounds for our build will be:&lt;br /&gt;
* Latitude: -6 to -5&lt;br /&gt;
* Longitude: -17 to -15&lt;br /&gt;
&lt;br /&gt;
Let &amp;lt;code&amp;gt;$SCENERY_BUILD_DIR&amp;lt;/code&amp;gt; be the directory containing all of our working files for this project.&lt;br /&gt;
&lt;br /&gt;
== Getting docker running ==&lt;br /&gt;
The first step is to have docker installed and accessible through the command line. Run the following command to fetch the terragear toolchain:&lt;br /&gt;
 docker pull flightgear/terragear:ws20&lt;br /&gt;
&lt;br /&gt;
Next, start a docker container to access the terragear tools:&lt;br /&gt;
&lt;br /&gt;
 docker run -i -v $SCENERY_BUILD_DIR:/terragear-work/ -t flightgear/terragear:ws20 /bin/bash&lt;br /&gt;
&lt;br /&gt;
Once this command runs successfully, the command line will now be a &amp;quot;window&amp;quot; into the docker container, allowing you to run the entire terragear toolchain. Because of the &amp;lt;code&amp;gt;-v&amp;lt;/code&amp;gt; argument (bind mount), the container can see the contents of &amp;lt;code&amp;gt;$SCENERY_BUILD_DIR&amp;lt;/code&amp;gt; will be visible at &amp;lt;code&amp;gt;/terragear-work/&amp;lt;/code&amp;gt; inside the container.&lt;br /&gt;
&lt;br /&gt;
== Process Elevation Data ==&lt;br /&gt;
The elevation data can be obtained from [http://viewfinderpanoramas.org/Coverage%20map%20viewfinderpanoramas_org3.htm ViewFinderPanoramas], specifically, the [http://viewfinderpanoramas.org/dem3/SD30.zip SD30] and [SE30 http://viewfinderpanoramas.org/dem3/SE30.zip] tiles cover this island.&lt;br /&gt;
&lt;br /&gt;
Extract and add to &amp;lt;code&amp;gt;$SCENERY_BUILD_DIR/data/SRTM-3/*.hgt&amp;lt;/code&amp;gt;. Run the following commands in the docker container:&lt;br /&gt;
&lt;br /&gt;
 cd  /terragear-work/&lt;br /&gt;
 for f in data/SRTM-3/*.hgt; do hgtchop 3 &amp;quot;${f}&amp;quot; &amp;quot; work/SRTM-3&amp;quot;; done&lt;br /&gt;
 terrafit work/SRTM-3&lt;br /&gt;
&lt;br /&gt;
== Process Airport Data ==&lt;br /&gt;
'''FHSH'''  is not available in FlightGear's &amp;lt;code&amp;gt;apt.dat&amp;lt;/code&amp;gt;, so the airport information has to be fetched from elsewhere. The XPlane gateway is one possible source. For this sample project, we can use the following data from https://github.com/accek/fg-nav-fixups:&lt;br /&gt;
&lt;br /&gt;
 1   1023 1 0 FHSH St Helena&lt;br /&gt;
 100 45.00 2 0 0.00 1 2 1 02 -15.96694276 -005.64575428  100    0 2 9 0 2 20 -15.94934298 -005.64615237  300    0 2 9 0 2&lt;br /&gt;
 110 1 0.00 358.7100 New Taxiway 4&lt;br /&gt;
 111 -15.96166211 -005.64927678&lt;br /&gt;
 111 -15.96340503 -005.64926307&lt;br /&gt;
 111 -15.96340434 -005.64836151&lt;br /&gt;
 111 -15.96290056 -005.64836043&lt;br /&gt;
 111 -15.96284142 -005.64854134&lt;br /&gt;
 111 -15.96265507 -005.64854103&lt;br /&gt;
 113 -15.96155909 -005.64854086&lt;br /&gt;
 110 2 0.00 358.7100 New Taxiway 3&lt;br /&gt;
 111 -15.94934844 -005.64635879 3 102&lt;br /&gt;
 111 -15.94935248 -005.64663563 3 102&lt;br /&gt;
 111 -15.94995561 -005.64662024 3 102&lt;br /&gt;
 113 -15.95019415 -005.64634336&lt;br /&gt;
 110 2 0.00 358.7100 New Taxiway 2&lt;br /&gt;
 111 -15.96693818 -005.64554618 3 102&lt;br /&gt;
 111 -15.96693596 -005.64524600 3 102&lt;br /&gt;
 111 -15.96628657 -005.64526997 3 102&lt;br /&gt;
 113 -15.96603006 -005.64556883&lt;br /&gt;
 110 2 0.00 358.7100 New Taxiway 1&lt;br /&gt;
 111 -15.96305635 -005.64765837 3 102&lt;br /&gt;
 111 -15.96240410 -005.64767341 3 102&lt;br /&gt;
 112 -15.96226078 -005.64761762 -15.96220044 -005.64756860 3 102&lt;br /&gt;
 111 -15.96219925 -005.64745814 3 102&lt;br /&gt;
 111 -15.96219005 -005.64624609 3 102&lt;br /&gt;
 112 -15.96223439 -005.64613746 -15.96227201 -005.64609544 3 102&lt;br /&gt;
 111 -15.96236947 -005.64606567&lt;br /&gt;
 111 -15.96184016 -005.64607709 3 102&lt;br /&gt;
 112 -15.96195708 -005.64616687 -15.96199469 -005.64621034 3 102&lt;br /&gt;
 111 -15.96199881 -005.64627387 3 102&lt;br /&gt;
 111 -15.96200448 -005.64744540 3 102&lt;br /&gt;
 112 -15.96197248 -005.64759953 -15.96193665 -005.64765444 3 102&lt;br /&gt;
 111 -15.96183543 -005.64768917 3 102&lt;br /&gt;
 111 -15.96154350 -005.64769949 3 102&lt;br /&gt;
 111 -15.96155909 -005.64854086&lt;br /&gt;
 111 -15.96265507 -005.64854103&lt;br /&gt;
 111 -15.96265481 -005.64818499&lt;br /&gt;
 113 -15.96306600 -005.64818480 3 102&lt;br /&gt;
 130 Airport Boundary&lt;br /&gt;
 111 -15.95876878 -005.64712051&lt;br /&gt;
 111 -15.96005216 -005.64729370&lt;br /&gt;
 111 -15.96043831 -005.64731000&lt;br /&gt;
 111 -15.96048880 -005.64864132&lt;br /&gt;
 111 -15.96154716 -005.64921198&lt;br /&gt;
 111 -15.96159626 -005.65014384&lt;br /&gt;
 111 -15.96388391 -005.64953797&lt;br /&gt;
 111 -15.96430513 -005.64699927&lt;br /&gt;
 111 -15.96882642 -005.64692255&lt;br /&gt;
 111 -15.96885682 -005.64412109&lt;br /&gt;
 111 -15.94564642 -005.64456651&lt;br /&gt;
 113 -15.94563863 -005.64716916&lt;br /&gt;
 120 Hold&lt;br /&gt;
 111 -15.96200516 -005.64660225 4 103&lt;br /&gt;
 115 -15.96218383 -005.64660129&lt;br /&gt;
 120 Linear Feature 5&lt;br /&gt;
 111 -15.96210864 -005.64767019 1 101&lt;br /&gt;
 112 -15.96206007 -005.64782922 -15.96201482 -005.64792776 1 101&lt;br /&gt;
 115 -15.96188449 -005.64810582&lt;br /&gt;
 120 Linear Feature 4&lt;br /&gt;
 111 -15.96210864 -005.64767019 1 101&lt;br /&gt;
 112 -15.96213878 -005.64782592 -15.96215760 -005.64789051 1 101&lt;br /&gt;
 115 -15.96229199 -005.64808544&lt;br /&gt;
 120 Linear Feature 3&lt;br /&gt;
 111 -15.96156820 -005.64813668 20&lt;br /&gt;
 111 -15.96263721 -005.64810368 20&lt;br /&gt;
 111 -15.96263233 -005.64792345 20&lt;br /&gt;
 115 -15.96304480 -005.64791075&lt;br /&gt;
 120 Linear Feature 2&lt;br /&gt;
 111 -15.96210864 -005.64767019 1 101&lt;br /&gt;
 111 -15.96210128 -005.64660525 1 105&lt;br /&gt;
 115 -15.96209919 -005.64630388&lt;br /&gt;
 120 Linear Feature 1&lt;br /&gt;
 111 -15.96154408 -005.64588717 1 105&lt;br /&gt;
 111 -15.96184445 -005.64588139 1 105&lt;br /&gt;
 112 -15.96204503 -005.64596036 -15.96210198 -005.64604073 1 105&lt;br /&gt;
 111 -15.96209919 -005.64630388 1 105&lt;br /&gt;
 112 -15.96217524 -005.64595582 -15.96225060 -005.64588070 1 105&lt;br /&gt;
 111 -15.96236918 -005.64587174 1 105&lt;br /&gt;
 115 -15.96269552 -005.64586403&lt;br /&gt;
 21 -15.95361317 -005.64657631 3 180.0000 3.0 Papi&lt;br /&gt;
 21 -15.95359638 -005.64551140 2 180.0000 3.0 Papi&lt;br /&gt;
 21 -15.96347774 -005.64645343 2 -1.2600 3.0 Papi&lt;br /&gt;
 20 -15.96192491 -005.64660719 90.0000 0 3 {@R}20-02{@@}{@Y}APRON&lt;br /&gt;
 20 -15.96225995 -005.64660719 90.0000 0 3 {@R}20-02{@@}{@Y}APRON&lt;br /&gt;
 14 -15.96312208 -005.64867411  82.02 0 Tower Viewpoint&lt;br /&gt;
 15 -15.96179344 -005.64822577 -50.36 Ramp Start 1&lt;br /&gt;
 1300 -15.96238032 -005.64819725 -129.45 gate jets Ramp Start 2&lt;br /&gt;
 15 -15.96285880 -005.64779046 -181.04 Ramp Start 3&lt;br /&gt;
 19 -15.95196179 -005.64670036 0 New Windsock 2&lt;br /&gt;
 19 -15.96603475 -005.64630065 0 New Windsock 1&lt;br /&gt;
&lt;br /&gt;
Copy and paste the above into &amp;lt;code&amp;gt;$SCENERY_BUILD_DIR/data/airports/FHSH.dat&amp;lt;/code&amp;gt;. We can now run &amp;lt;code&amp;gt;genapts&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 genapts850 --input=data/airports/FHSH --work=./work --dem-path=SRTM-3 --min-lon=-6 --max-lon=-5 --min-lat=-17 --max-lat=-15&lt;br /&gt;
 genapts850 --input=data/airports/FHSH.dat --work=./work --dem-path=SRTM-3 --airport=FHSH&lt;br /&gt;
&lt;br /&gt;
== Process Landclass Data ==&lt;br /&gt;
We can download landclass data from GeoFabrik, specifically from http://download.geofabrik.de/africa/saint-helena-ascension-and-tristan-da-cunha.html. Download the *.shp files and extract them into &amp;lt;code&amp;gt;$SCENERY_BUILD_DATA/data/shapefiles&amp;lt;/code&amp;gt;. Each type of file should go into its own folder. For example, copy all &amp;lt;code&amp;gt;gis_osm_landuse_a_free_1.*&amp;lt;/code&amp;gt; files into &amp;lt;code&amp;gt;$SCENERY_BUILD_DATA/data/shapefiles/gis_osm_landuse_a_free_1/*&amp;lt;/code&amp;gt;, as this is the format that TerraGear expects the files to be in. Usually, we would use a landmass (See Notes below) shapefile as our Default, but to simplify things for this tutorial, we can use the &amp;lt;code&amp;gt;gis_osm_landuse_a_free_1.shp&amp;lt;/code&amp;gt; file, as the landmass file and this file are identical for this particular island. We are now ready to run &amp;lt;code&amp;gt;ogr-decode&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 ogr-decode --max-segment 500 --area-type Default work/Default data/shapefiles/gis_osm_landuse_a_free_1/&lt;br /&gt;
&lt;br /&gt;
We have to run &amp;lt;code&amp;gt;ogr-decode&amp;lt;/code&amp;gt; for every land class (so urban, forest, lakes, roads etc). At each time, we need to specify the shapefile (the last argument in the above command) and the corresponding area material type that FlightGear recognizes (&amp;quot;Default&amp;quot;) in the above command. For this tutorial, we will run the command just once to get the construct the entire island as a &amp;quot;Default&amp;quot; landclass.&lt;br /&gt;
&lt;br /&gt;
== Bringing it all together ==&lt;br /&gt;
We can finally run &amp;lt;code&amp;gt;tg-construct&amp;lt;/code&amp;gt; to bring everything together&lt;br /&gt;
 tg-construct --priorities=/usr/local/share/TerraGear/default_priorities.txt --work-dir=./work --output-dir=./output/Terrain --min-lon=-6 --max-lon=-5 --min-lat=-17 --max-lat=-15 AirportArea AirportObj Default SRTM-3&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;$SCENERY_BUILD_DIR/output&amp;lt;/code&amp;gt; will now contain the built scenery. Point your FG instance to this path using &amp;lt;code&amp;gt;--fg-scenery&amp;lt;/code&amp;gt; and take a look at the built scenery!&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
* There are two docker images, &amp;lt;code&amp;gt;flightgear/terragear:ws20&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;flightgear/terragear:latest&amp;lt;/code&amp;gt;. The former corresponds to the 2.0 world scenery build, while the later points to the latest code. The latest container has several improvements and GDAL tools which can be used to manipulate shapefiles, but also unfortunately has bugs in the hgtchop and terrafit tools for SRTM-3 data. The best way is to use &amp;lt;code&amp;gt;flightgear/terragear:ws20&amp;lt;/code&amp;gt; for elevation data processing, and &amp;lt;code&amp;gt;flightgear/terragear:latest&amp;lt;/code&amp;gt; for everything else.&lt;br /&gt;
* The [https://osmdata.openstreetmap.de/data/land-polygons.html OSM coastlines data] is a good source for the landmass (&amp;quot;Default&amp;quot;) terrain, but is a single file for the entire world. &lt;br /&gt;
* You can use the following command (found in the latest terragear docker image) to &amp;quot;crop&amp;quot; the shapefile to an area of interest:&lt;br /&gt;
 ogr2ogr -clipsrc -6 -17 -5 -15 cut_landmass.shp land_polygons.shp&lt;br /&gt;
* As mentioned in the introduction, this tutorial is just a starting point. Have a look at the other TerraGear wiki articles. A good resource is also provided [https://forum.flightgear.org/viewtopic.php?t=35618 on the forum], which uses TerraGear GUI. You can use the concepts learned from there and run the commands in the docker image.&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Howto:Work_with_AC3D_files_in_Blender&amp;diff=128807</id>
		<title>Howto:Work with AC3D files in Blender</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Howto:Work_with_AC3D_files_in_Blender&amp;diff=128807"/>
		<updated>2020-11-07T13:26:37Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: Added latest blender version (2.9) to explicitly show support of importer&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Many [[FlightGear]] [[aircraft]] modellers prefer [[Blender]] as their 3D-modelling editor. Blender is a powerful, robust and open-source 3D modelling suite. FlightGear primarily uses the [[AC3D_file_format|AC3D file format]] (&amp;lt;code&amp;gt;.ac&amp;lt;/code&amp;gt;) to model aircraft, [[scenery]] models, and many other things. With the AC3D file format first released in 1996&amp;lt;ref&amp;gt;http://fileformats.archiveteam.org/wiki/AC3D_Model&amp;lt;/ref&amp;gt;, modern versions of Blender do not bother maintaining support for the format. However, add-ons exist to extend Blender's functionality in order to allow the import and export of these files.&lt;br /&gt;
&lt;br /&gt;
{{TOC limit|3}}&lt;br /&gt;
&lt;br /&gt;
== Importing and exporting AC3D files ==&lt;br /&gt;
{{note| Modern versions of Blender (2.5+) require an add-on to work with AC3D (&amp;lt;code&amp;gt;.ac&amp;lt;/code&amp;gt;) files.}}&lt;br /&gt;
=== Addons ===&lt;br /&gt;
&lt;br /&gt;
The prominent add-on for using AC3D files in Blender is called ''Blender-AC3D''. It has been forked from its original to provide support for Blender 2.8.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Blender version !! Addon !! Remarks&lt;br /&gt;
|-&lt;br /&gt;
| 2.80 - 2.90 || {{github source|user=NikolaiVChr|repo=Blender-AC3D|branch=2.80|text=NikolaiVChr/Blender-AC3D (GitHub)}}. || NikolaiVChr's fork of majic79's add-on, with a special branch for Blender 2.80&lt;br /&gt;
|-&lt;br /&gt;
| 2.63 - 2.7a || {{github source|user=NikolaiVChr|repo=Blender-AC3D|branch=master|text=NikolaiVChr/Blender-AC3D (GitHub)}} || NikolaiVChr's fork of majic79's add-on. For more information read {{forum link|t=13442|title=Blender 2.6 AC3D Importer &amp;amp; Exporter}} &lt;br /&gt;
|-&lt;br /&gt;
| 2.62 || {{github source|proj=majic79|repo=Blender-AC3D|branch=BL2.62|text=majic79/Blender-AC3D (GitHub)}} || Branch of majic79's plugin targeting Blender 2.62 (Abandoned)&lt;br /&gt;
|-&lt;br /&gt;
| 2.60 || {{github source|proj=majic79|repo=Blender-AC3D|branch=BL2.60|text=majic79/Blender-AC3D (GitHub)}} || Branch of majic79's plugin targeting Blender 2.60 (Abandoned)&lt;br /&gt;
|-&lt;br /&gt;
| 2.59 || {{github source|proj=majic79|repo=Blender-AC3D|branch=BL2.59|text=majic79/Blender-AC3D (GitHub)}} || Branch of majic79's plugin targeting Blender 2.59 (Abandoned)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;2.5 || N/A || Versions of Blender below 2.5 include out of the box support for the AC3D file format, simply enable the add-on in &amp;lt;code&amp;gt;Preferences &amp;gt; Addons&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Notes ====&lt;br /&gt;
* Before you export a model with this addon, make sure that you set the UV map and texture inside the material, not just inside the UV editor.  See the video tutorial [https://www.youtube.com/watch?v=URMjoFSm5pk here].&lt;br /&gt;
* Before you export make sure to exit ''Edit Mode'' or some of your last changes won't be exported.&lt;br /&gt;
* Inside Blender when you want to see the textures, be sure to set the shader to GLSL (or for 2.7+ just set view mode to materials). Alternatively set textured solid in solid view.&lt;br /&gt;
* To see textured surfaces as they will be shown in FlightGear, go into the material texture and set the blend type to ''Multiply'' instead of the default ''Mix'' (the importer will also do this automatically). An example plane that will look very different if this is not done is the FGAddon aircraft {{fgaddon source|path=Aircraft/ASK13|commit=1363|text=ASK-13}}, notice the wingtips.&lt;br /&gt;
* The final model might display color mismatches (Texture color vs Material color) when viewed in Flightgear. Hand editing the [[AC files: Basic changes to textures and colors#Materials|materials]] section of the exported AC3D file might fix this.&lt;br /&gt;
* If you wonder where to put the scripts you could open blender's user preferences ({{Key press|Ctrl|Alt|U}}, or ''File &amp;gt; User Preferences'') tick for example Import/Export and extent the information concerning an existing script. Usually this throws the path. For for example Ubuntu 14.04LTS/Blender 2.79b it is: &amp;lt;code&amp;gt;/usr/share/blender/scripts/addons/&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Be aware that Blender only has greyscale for emission and ambient colors. If you want to export/import a color for those, import/export options gives you capability to choose to use Blenders mirror color for that.&lt;br /&gt;
* The importer will not fail if it does not locate a texture, instead it will issue warnings. Pull down the top bar to see if there was any, they will be orange lines.&lt;br /&gt;
* The exporter will not fail if it tries to save a texture without data, instead it will issue warnings. Pull down the top bar to see if there was any, they will be orange lines. Notice that since AC3D only support 1 texture per object, if multiple textures are attached to an object in Blender the last of the textures that has any data, if any, will be the one that get exported, but it will still warn about the missing data in the others, so take care.&lt;br /&gt;
* Orientation: The default settings in the plugin correspond to the FlightGear coordinate system (-X forward and Z up, also see: [[Howto:3D_Aircraft_Models]]). The default settings are: Forward -Z and Up Y.&lt;br /&gt;
&lt;br /&gt;
You can report bugs with the addon [https://github.com/NikolaiVChr/Blender-AC3D/issues here], but please include problematic &amp;lt;code&amp;gt;.ac&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;.blend&amp;lt;/code&amp;gt; files and their textures.&lt;br /&gt;
&lt;br /&gt;
=== Importing ===&lt;br /&gt;
&lt;br /&gt;
{{main article|Working with FlightGear models in Blender}}&lt;br /&gt;
{{note|If you do not see the option for &amp;lt;code&amp;gt;AC3D (.ac)&amp;lt;/code&amp;gt; under &amp;lt;code&amp;gt;File &amp;gt; Import&amp;lt;/code&amp;gt;, your add-on is either not installed, or not working correctly.}}&lt;br /&gt;
Once the add-on is installed, AC3D models can be imported in the same manner as any other model foramat into Blender by using the &amp;lt;code&amp;gt; File &amp;gt; Import &amp;gt; AC3D (.ac)&amp;lt;/code&amp;gt; dialog. &lt;br /&gt;
[[File:Blender AC3D import dialog.png|thumb|This figure demonstrates how to import an AC3D model in Blender using a third-party addon.]]&lt;br /&gt;
&lt;br /&gt;
{{Appendix}}&lt;br /&gt;
{{3d}}&lt;br /&gt;
[[Category:Modeling]]&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Areas_populated_with_osm2city_scenery&amp;diff=115512</id>
		<title>Areas populated with osm2city scenery</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Areas_populated_with_osm2city_scenery&amp;diff=115512"/>
		<updated>2018-06-25T18:07:34Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: Fixed incorrect link for California scenery&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of areas having [[osm2city.py|osm2city]] generated scenery available for download. The [http://osm2city.readthedocs.io/en/latest/using.html manual] describes how to use the sceneries in FlightGear.&lt;br /&gt;
&lt;br /&gt;
== FlightGear Versions ==&lt;br /&gt;
The FlightGear version mentioned in the table below means:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Version !! Compatibile FG versions !! Effects !! Choose which objects to show !! Remarks&lt;br /&gt;
|-&lt;br /&gt;
| (not given → most probably before 2017.1) || &amp;quot;all&amp;quot; || limited || all or nothing || large number of files and size&lt;br /&gt;
|-&lt;br /&gt;
| 2017.1 || 2017.x || limited || yes || (ditto)&lt;br /&gt;
|-&lt;br /&gt;
| 2017.2 || 2017.2 || traffic, regionalization || yes || For use with FG version 2017.2.1 you need the copy the following two files (texture atlas and corresponding light-map) into [[FGData]]/Textures/osm2city: [https://my.pcloud.com/publink/show?code=XZlBqaZeLq96OJd84Sidom3mWmEbhjIlJbk atlas_facades.png] and [https://my.pcloud.com/publink/show?code=XZqBqaZPWznrMcsdLJQ8zmtM60NRLJLXQBX atlas_facades_LM.png]&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
== Available areas ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Download link !! Area !! In [[TerraSync]] !! Forum thread !! Min. FG version !! Created Date !! Created By !! [[Project3000]]&amp;lt;ref&amp;gt;Meaning that the scenery was generated respecting objects placed by Project3000, but does not contain it&amp;lt;/ref&amp;gt; !! Remarks&lt;br /&gt;
|-&lt;br /&gt;
| [https://1drv.ms/u/s!AuIh-169bDZ9tlKlP3GQ1Ez1r64p w060n10]&lt;br /&gt;
| bottom=10 left=-60 top=20 right=-50 (Barbados) || || || 2017.2 || 2017-11-04 || dutchguy || ||&lt;br /&gt;
|-&lt;br /&gt;
| [https://1drv.ms/u/s!AuIh-169bDZ9tlPnC1UGd7CjdgMf w070n10]&lt;br /&gt;
| bottom=10 left=-70 top=20 right=-60 (Eastern Caribbean) || || || 2017.2 || 2017-11-04 || dutchguy || ||&lt;br /&gt;
|-&lt;br /&gt;
| [https://my.pcloud.com/publink/show?code=XZa8Nk7Z5jaeflLeCvS9VpyVWS3k28jKEASV LKPR]&lt;br /&gt;
| Area around LKPR Prague airport 14-14.75 East, 49.875-50.25  North || || || 2017.2 || 2017-10-08 || vanosten || March 2017 || Used parameter BUILDING_FORCE_EUROPEAN_INNER_CITY_STYLE=True. Contains a folder Roads_red, which when renamed to Roads shows in red where roads would not be lit (for testing)&lt;br /&gt;
|-&lt;br /&gt;
| [https://my.pcloud.com/publink/show?code=XZrMy3Ze3rXYVgAurYFp96YIHMj9X9ptLoy Switzerland]&lt;br /&gt;
| Swiss national boundaries || || || 2017.2 || 2017-05-23 || vanosten || March 2017 ||&lt;br /&gt;
|-&lt;br /&gt;
| [https://my.pcloud.com/publink/show?code=XZqjqaZtxBUwA5KJr5CeuqTYzk9Yk9KXbDk KBOS]&lt;br /&gt;
| bottom=59 left=4.5 top=62 right=6 || || || 2017.2 || 2017-05-20 || vanosten || March 2017 ||&lt;br /&gt;
|-&lt;br /&gt;
| [https://my.pcloud.com/publink/show?code=XZaSqaZsbS9ltAfHozgY335PnEIE4sPwutV ENBR]&lt;br /&gt;
| bottom=42.125 left=-72 top=42.625 right=-70.5 || || || 2017.2 || 2017-05-20 || vanosten || March 2017 ||&lt;br /&gt;
|-&lt;br /&gt;
| [https://onedrive.live.com/redir?resid=7d366cbd5efb21e2!1642&amp;amp;authkey=!APsD2Zn-Jq3m5OA&amp;amp;ithint=folder%2czip The Netherlands]&lt;br /&gt;
| [[File:EHoutline.png|thumb|150px]] || || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [https://onedrive.live.com/redir?resid=7d366cbd5efb21e2!1645&amp;amp;authkey=!AAx41T78jYrL4KI&amp;amp;ithint=file%2czip Southern UK]&lt;br /&gt;
| [[File:EGOutline.png|thumb|150px]] || || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [https://onedrive.live.com/redir?resid=7d366cbd5efb21e2!1646&amp;amp;authkey=!AFAFUx-rFpUiRPk&amp;amp;ithint=file%2czip Ireland]&lt;br /&gt;
| [[File:EIOutline.png|thumb|150px]] || || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [https://onedrive.live.com/redir?resid=7D366CBD5EFB21E2!1651&amp;amp;authkey=!APsD2Zn-Jq3m5OA&amp;amp;ithint=file%2czip Switzerland]&lt;br /&gt;
| [[File:LSOutline.png|thumb|150px]] || || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [https://drive.google.com/open?id=0B2CN49kDuXHgZ3U0LUFnU2ZJREE Phuket]&lt;br /&gt;
| || || https://forum.flightgear.org/viewtopic.php?f=5&amp;amp;t=30113 || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [https://dl.dropboxusercontent.com/u/24846517/fg/osm2city/LOWI_OSM_buildings_20140928.tgz LOWI]&lt;br /&gt;
| || || https://forum.flightgear.org/viewtopic.php?f=5&amp;amp;t=19625 || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| [https://drive.google.com/file/d/1aR1jF0AbeLkKk21SZc-Tg-0f3-GSg5nc/view?usp=sharing Europe/Spain]&lt;br /&gt;
| || || https://forum.flightgear.org/viewtopic.php?f=5&amp;amp;t=32062&amp;amp;start=15 || 2017.2 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| [https://drive.google.com/open?id=0B5TeZxXfefn3NUp4NkM2b1hPVDQ African/Canary islands]&lt;br /&gt;
| || || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| [https://drive.google.com/open?id=0B5TeZxXfefn3Vll5cGVEcndZMTg Europe/Portugal]&lt;br /&gt;
| || || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [http://zorba-osm2city.s3-website.eu-central-1.amazonaws.com/ Europe/Poland]&lt;br /&gt;
| || || https://forum.flightgear.org/viewtopic.php?f=5&amp;amp;t=32172 || 2017.1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [http://zorba-osm2city.s3-website.eu-central-1.amazonaws.com/ Europe/Slovakia]&lt;br /&gt;
| || || https://forum.flightgear.org/viewtopic.php?f=5&amp;amp;t=32172 || 2017.1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [http://zorba-osm2city.s3-website.eu-central-1.amazonaws.com/ Europe/Lithuania]&lt;br /&gt;
| || || https://forum.flightgear.org/viewtopic.php?f=5&amp;amp;t=32172 || 2017.1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [http://zorba-osm2city.s3-website.eu-central-1.amazonaws.com/ Europe/Latvia]&lt;br /&gt;
| || || https://forum.flightgear.org/viewtopic.php?f=5&amp;amp;t=32172 || 2017.1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [http://zorba-osm2city.s3-website.eu-central-1.amazonaws.com/ Europe/Estonia]&lt;br /&gt;
| || || https://forum.flightgear.org/viewtopic.php?f=5&amp;amp;t=32172 || 2017.1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [http://zorba-osm2city.s3-website.eu-central-1.amazonaws.com/ Europe/Bulgaria]&lt;br /&gt;
| || || https://forum.flightgear.org/viewtopic.php?f=5&amp;amp;t=32172 || 2017.1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [http://zorba-osm2city.s3-website.eu-central-1.amazonaws.com/ Europe/Hungary]&lt;br /&gt;
| || || https://forum.flightgear.org/viewtopic.php?f=5&amp;amp;t=32172 || 2017.1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [http://zorba-osm2city.s3-website.eu-central-1.amazonaws.com/ Europe/Romania]&lt;br /&gt;
| || || https://forum.flightgear.org/viewtopic.php?f=5&amp;amp;t=32172 || 2017.1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [https://drive.google.com/open?id=0B5TeZxXfefn3VkViMDlCMXlrQUU Us/California]&lt;br /&gt;
| || || https://forum.flightgear.org/viewtopic.php?f=5&amp;amp;t=32187 || 2017.1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| [https://sites.google.com/site/ecuadorflightgear/ Ecuador]&lt;br /&gt;
| || || https://forum.flightgear.org/viewtopic.php?f=5&amp;amp;t=32254  || 2017.2 || 2017-11-20 || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Scenery]]&lt;br /&gt;
[[Category:Lists]]&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Shader_requests&amp;diff=31887</id>
		<title>Shader requests</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Shader_requests&amp;diff=31887"/>
		<updated>2011-05-24T06:16:36Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Please post your shader requests here, so that other people can more easily track what's going on, hopefully avoiding duplicate efforts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Currently work in progress =&lt;br /&gt;
== Water shader by gral (11/2010) ==&lt;br /&gt;
Please see: http://flightgear.org/forums/viewtopic.php?f=47&amp;amp;t=9386&lt;br /&gt;
&lt;br /&gt;
= Open shader requests =&lt;br /&gt;
&lt;br /&gt;
== Flags ==&lt;br /&gt;
is it possible to simulate the fluttering of flags in the wind using a shader?&lt;br /&gt;
I'd like to place some flags in the scenery for our FSWeekend presentation showing the logo of our sponsor. But attaching a flat surface to a a flagpole looks just to cheap.&lt;br /&gt;
&lt;br /&gt;
See: http://flightgear.org/forums/viewtopic.php?f=47&amp;amp;t=9789&lt;br /&gt;
&lt;br /&gt;
== Contaminated runways and taxiways (10/2010) ==&lt;br /&gt;
Ok I have no idea if this is possible, but this idea just came up in my mind: wouldn't it be very cool to apply this shader (actually a similar version of it) to runways and taxiways when it's raining? I know there's not much sunshine when it's raining, but I mean just the light-reflecting idea. &lt;br /&gt;
&lt;br /&gt;
And you could get the visual effect of a wet runway or snow based on weather settings. (http://flightgear.org/forums/viewtopic.php?f=6&amp;amp;t=7383&amp;amp;p=70239#p70254)&lt;br /&gt;
&lt;br /&gt;
 To clearify the aspect/feature override part mentioned above here's a different use case I have in mind. &lt;br /&gt;
 In a scene where it is raining you typically would want to show all material as being wet. &lt;br /&gt;
 This can be implemented at several levels of realism. For a quick start I would increase specular reflection &lt;br /&gt;
 and maybe darken diffuse in the top level StateSet. The darkening of materials could be made different for &lt;br /&gt;
 several materials in the scene simply by setting a different uniform darkening value. Some objects in the scene &lt;br /&gt;
 might implement wetness with a specular cubemap. In case of a road it might even contain puddles and use a planar&lt;br /&gt;
 reflection of the scene. All these shader pieces implement the aspect &amp;quot;wetness&amp;quot; in different ways, where higher &lt;br /&gt;
 fidelity implementations lower in the scene tree override the default implementation in the top level stateset. &lt;br /&gt;
 And in case you want to disable &amp;quot;wetness&amp;quot; for the whole scene it should be possible to do so at the top level &lt;br /&gt;
 stateset similar to how we are used to disable texturing, lighting etc. [http://flightgear.org/forums/viewtopic.php?f=47&amp;amp;t=10088&amp;amp;p=102583#p102583]&lt;br /&gt;
&lt;br /&gt;
See: http://flightgear.org/forums/viewtopic.php?f=47&amp;amp;t=9386&amp;amp;start=120#p1005044&lt;br /&gt;
&lt;br /&gt;
== Runway skid marks ==&lt;br /&gt;
It would be interesting to see if and how this mechanism could possibly be used to dynamically place skid marks on runways at runtime, so that landing aircraft can cause their own, new skid marks during touchdown. &lt;br /&gt;
&lt;br /&gt;
See: &lt;br /&gt;
* http://flightgear.org/forums/viewtopic.php?f=5&amp;amp;t=2258&amp;amp;hilit=skid+marks&amp;amp;start=15#p30741 &lt;br /&gt;
* http://flightgear.org/forums/viewtopic.php?f=6&amp;amp;t=7383&amp;amp;p=70239&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Precipitation effects for cockpit windows ==&lt;br /&gt;
Something like this could be very useful for my idea to get a decent rain / snow / ice effect to the cockpit glass with working wipers by simply changing the textures of an overlaying model.&lt;br /&gt;
&lt;br /&gt;
See: http://flightgear.org/forums/viewtopic.php?f=6&amp;amp;t=7383&amp;amp;p=70239&lt;br /&gt;
&lt;br /&gt;
= Ideas =&lt;br /&gt;
&lt;br /&gt;
== Engine wake ==&lt;br /&gt;
Used to be available for a very alpha version of the 777-200 back in 2008, Although it was no longer supported by the sim. Perhaps someone who created it could enlighten us on what was the basis behind it and how we can create a new shader for engine wake.&lt;br /&gt;
&lt;br /&gt;
== sky / atmosphere scattering ==&lt;br /&gt;
has implication on other shaders, and as far as I know, the sky dome can't have effects for the moment [http://flightgear.org/forums/viewtopic.php?f=47&amp;amp;t=10088&amp;amp;p=102583#p102583]&lt;br /&gt;
Ralf Stokholm Nielsen has implemented something similar in his thesis: [http://www2.imm.dtu.dk/pubdb/views/edoc_download.php/2554/pdf/imm2554.pdf]&lt;br /&gt;
&lt;br /&gt;
== other material types ==&lt;br /&gt;
not all the world should have the &amp;quot;plastic&amp;quot; look of the OpenGL default shading equation ). Crops should have a fur-like lighting response. A first step has already occurred in the reflection shader that should have a metallic look. Research Cook-Torrance (should tell something to blender users) and Fresnel if you want references. First step here : http://wiki.gamedev.net/index.php/D3DBook:Lighting . Oren-Nayar should be perfect for seat fabric. [http://flightgear.org/forums/viewtopic.php?f=47&amp;amp;t=10088&amp;amp;p=102583#p102583]&lt;br /&gt;
&lt;br /&gt;
== geometry shader for transforming to billboarded trees ==&lt;br /&gt;
geometry shader to transform points into huge number of billboarded trees (a la Outerra). The code should be modified to generate the set of points following the terrain in the first place, but something similar already exists to create night point lights. [http://flightgear.org/forums/viewtopic.php?f=47&amp;amp;t=10088&amp;amp;p=102583#p102583]&lt;br /&gt;
&lt;br /&gt;
== procedural runway markings ==&lt;br /&gt;
set on top a dumb concrete/asphalt/whatever texture/material&lt;br /&gt;
&lt;br /&gt;
== post-processing effects ==&lt;br /&gt;
(glow, motion blur, depth of field ) We already have redout/blackout, but could be enhanced by having a circular fading shape (you know when your field of view begins to shrink and you are not able to see on your sides) instead of a constant one [http://flightgear.org/forums/viewtopic.php?f=47&amp;amp;t=10088&amp;amp;p=102583#p102583]&lt;br /&gt;
&lt;br /&gt;
== animation of roads ==&lt;br /&gt;
Especially during night, cars on roads and motorways can usually be seen very well. Wouldn't it be a great feature if cars could be simulated with shaders? That means, that during days, differently colored cars move on streets, and during night some lights are visible? Is that doable with shaders?&lt;br /&gt;
[[User:Stanisak|Stanisak]] 21:43, 4 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== motion blur, bloom &amp;amp; HDR ==&lt;br /&gt;
&lt;br /&gt;
See forum post:&lt;br /&gt;
&lt;br /&gt;
http://www.flightgear.org/forums/viewtopic.php?f=47&amp;amp;t=11229&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Building_FlightGear_-_Debian&amp;diff=23278</id>
		<title>Building FlightGear - Debian</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Building_FlightGear_-_Debian&amp;diff=23278"/>
		<updated>2010-08-08T12:02:24Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: /* FlightGear data */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= HowTo build on Debian =&lt;br /&gt;
&lt;br /&gt;
HowTo build FlightGear 2.0.0 or GIT on GNU/Linux Debian '''Stable''' 5.x (Lenny).&lt;br /&gt;
&lt;br /&gt;
This HowTo may also work with '''Testing'''/'''Unstable''' except that some things are easier because of more up to date packages. So, before fetching something check the version of the available -dev package for it.&lt;br /&gt;
&lt;br /&gt;
It even *should* work with '''Etch''', but I am not certain about some dependencies. [http://wiki.flightgear.org/index.php?title=Talk:Building_Flightgear_-_Debian&amp;amp;action=edit Reports] are welcome.&lt;br /&gt;
&lt;br /&gt;
If you don't want to make your hands dirty, have a look at [[Scripted_Compilation_on_Linux_Debian/Ubuntu]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Requirements and Preparations ==&lt;br /&gt;
You need an OpenGL capable graphics including a proper installed driver.&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also a bunch of packages (and some of their dependencies) are required:&lt;br /&gt;
*gcc, g++, make, automake1.9, pkg-config&lt;br /&gt;
*mawk (or gawk)&lt;br /&gt;
*cmake   (min. version 2.6.0-5,  for Etch available on backports.org!)&lt;br /&gt;
*git, subversion, wget&lt;br /&gt;
&amp;lt;!--*libsvn-dev, for [[Terrasync]]s proper operation.--&amp;gt;&lt;br /&gt;
*freeglut3-dev, libgl1-mesa-dev, libxrandr-dev&lt;br /&gt;
*libxi-dev, libxmu-dev, libxext-dev&lt;br /&gt;
*libopenal-dev (see [[#libopenal|libopenal]]), libalut-dev&lt;br /&gt;
*libjpeg62-dev, libtiff4-dev, libpng12-dev&lt;br /&gt;
*libboost1.37-dev  (Not available for Lenny atm, see [[#Boost Library|Boost Library]] below.)&lt;br /&gt;
&lt;br /&gt;
During installation packages ''simgear-dev'' and ''openscenegraph-dev'' *must not* be installed. They can safely be re-installed after compilation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Build and install ==&lt;br /&gt;
Because we are going to install versions different to the ones in the repositries it is recommended to install FG-2.0.0 and/or GIT in a place independent to the base system such as /usr/local/FG-2.0.0, /opt/FG-2.0.0 or in a subdirectory of your $HOME. I suggest to make it writeable by the user that there is no need to become root for the &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt; commands. I'll use &amp;lt;code&amp;gt;$prefix&amp;lt;/code&amp;gt; as a placeholder for this directory. &amp;lt;BR&amp;gt;&lt;br /&gt;
Another one will be &amp;lt;code&amp;gt;$srcdir&amp;lt;/code&amp;gt;, it stands for the absolute path to the directory which contains the folders of the various source codes. So in the following instructions you have to replace these with the local paths or even &amp;lt;code&amp;gt;export&amp;lt;/code&amp;gt; them during the process.&lt;br /&gt;
&lt;br /&gt;
Follow the instructions to fetch the sources and the data needed by FlightGear and the commands to build/install each source.&lt;br /&gt;
&lt;br /&gt;
Have in mind that the data is relatively large (GIT about 3.5 GB and 2.0.0 300 MB) so, to save some time, it is a good idea to fetch it while building the sources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== libopenal ===&lt;br /&gt;
The libopenal-dev package in Lenny/Etch is too old for [[fgcom]]. For FlightGear it does work but not all features (like Doppler) are available, so installing an up to date version is recommended anyway.&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 wget http://kcat.strangesoft.net/openal-releases/openal-soft-1.11.753.tar.bz2&lt;br /&gt;
 tar xjf openal-soft-1.11.753.tar.bz2&lt;br /&gt;
 cd openal-soft-1.11.753/build&lt;br /&gt;
 cmake  -D CMAKE_INSTALL_PREFIX:PATH=&amp;quot;$prefix&amp;quot; ..&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
=== plib ===&lt;br /&gt;
Latest SVN is [http://www.mail-archive.com/flightgear-devel@lists.sourceforge.net/msg20793.html recommended], yet package plib1.8.5-dev for Testing/Unstable does work as well.&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 svn co https://plib.svn.sourceforge.net/svnroot/plib/trunk plib&lt;br /&gt;
 cd plib&lt;br /&gt;
 sed s/PLIB_TINY_VERSION\ \ 5/PLIB_TINY_VERSION\ \ 6/ -i src/util/ul.h&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
 ./configure --prefix=$prefix&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Boost Library ===&lt;br /&gt;
Version 1.37 is needed. At least for Lenny/Etch this means getting the sources because this is not available atm on backports.org. Testing/Unstable users may have more luck and a package is available, libboost-1.37-dev or newer.&lt;br /&gt;
&lt;br /&gt;
To build SimGear, FlightGear, fgrun and fgcom some boostlib header files are required, no need to compile and install it. If you have installed a libboost1.37-dev (or higher) package on your system you don't have to bother at all with it. If not, you have to tell each ./configure where the header files are. To do so, add the option &amp;lt;code&amp;gt;CPPFLAGS=-I$prefix/include&amp;lt;/code&amp;gt; to the SimGear, FlightGear and fgrun &amp;lt;code&amp;gt;./configure&amp;lt;/code&amp;gt; commands. We copy the header files to $prefix/include because fgcom will need them there.&lt;br /&gt;
&lt;br /&gt;
Get the newest version tar ball from http://sourceforge.net/projects/boost/files/boost/, extract it into &amp;lt;code&amp;gt;$srcdir&amp;lt;/code&amp;gt; then:&lt;br /&gt;
 cp -R $srcdir/boost-[version]/boost/ $prefix/include/&lt;br /&gt;
&lt;br /&gt;
=== OpenSceneGraph ===&lt;br /&gt;
For FlightGear 2.0.0 one may use the latest (or at least 2.9.6) developer release from http://www.openscenegraph.org/projects/osg/wiki/Downloads/DeveloperReleases and extract it into &amp;lt;code&amp;gt;$srcdir&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Mostly this is ok for FlightGear GIT as well as it is stable. However, sometimes the release is not fresh enough and one have to get the latest developments via SVN:&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 svn co http://www.openscenegraph.org/svn/osg/OpenSceneGraph/trunk OpenSceneGraph&lt;br /&gt;
&lt;br /&gt;
cmake demands a build directory separate to its source directory. So &amp;lt;code&amp;gt;mkdir&amp;lt;/code&amp;gt; one and &amp;lt;code&amp;gt;cd&amp;lt;/code&amp;gt; into it.&lt;br /&gt;
 cmake -D CMAKE_BUILD_TYPE=&amp;quot;Release&amp;quot; -D CMAKE_CXX_FLAGS=&amp;quot;-O3&amp;quot; -D CMAKE_C_FLAGS=&amp;quot;-O3&amp;quot; \&lt;br /&gt;
    -D CMAKE_INSTALL_PREFIX:PATH=&amp;quot;$prefix&amp;quot; $srcdir/OpenSceneGraph[-version]&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SimGear ===&lt;br /&gt;
2.0.0:&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 wget http://mirrors.ibiblio.org/pub/mirrors/simgear/ftp/Source/SimGear-2.0.0.tar.gz&lt;br /&gt;
 tar xzf SimGear-2.0.0.tar.gz&lt;br /&gt;
 cd SimGear-2.0.0&lt;br /&gt;
&lt;br /&gt;
GIT:&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 git clone git://gitorious.org/fg/simgear.git simgear&lt;br /&gt;
 cd simgear&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
&lt;br /&gt;
2.0.0 and GIT:&lt;br /&gt;
 ./configure --prefix=$prefix [CPPFLAGS=-I$prefix/include LDFLAGS=&amp;quot;-L$prefix/lib -L$prefix/lib64&amp;quot;]&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
=== FlightGear source ===&lt;br /&gt;
2.0.0:&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 wget http://mirrors.ibiblio.org/pub/mirrors/flightgear/ftp/Source/FlightGear-2.0.0.tar.gz&lt;br /&gt;
 tar xzf FlightGear-2.0.0.tar.gz&lt;br /&gt;
 cd FlightGear-2.0.0&lt;br /&gt;
&lt;br /&gt;
GIT:&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 git clone git://gitorious.org/fg/flightgear.git flightgear&lt;br /&gt;
 cd flightgear&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
&lt;br /&gt;
2.0.0 and GIT:&lt;br /&gt;
 ./configure --prefix=$prefix [CPPFLAGS=-I$prefix/include/ LDFLAGS=&amp;quot;-L$prefix/lib -L$prefix/lib64&amp;quot;]&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
=== FlightGear data ===&lt;br /&gt;
2.0.0:&lt;br /&gt;
 cd $prefix&lt;br /&gt;
 wget http://mirrors.ibiblio.org/pub/mirrors/flightgear/ftp/Shared/FlightGear-data-2.0.0.tar.bz2&lt;br /&gt;
 tar xjf FlightGear-data-2.0.0.tar.bz2&lt;br /&gt;
&lt;br /&gt;
GIT:&lt;br /&gt;
 cd $prefix&lt;br /&gt;
 git clone git://gitorious.org/fg/fgdata.git data&lt;br /&gt;
&lt;br /&gt;
Or to Fetch A bundle that can be Downloaded in parts :&lt;br /&gt;
 cd $prefix&lt;br /&gt;
 wget http://flightgear.mxchange.org/pub/fgfs/fgdata.bundle&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
 cd $prefix&lt;br /&gt;
 wget http://flightgear.mxchange.org/pub/fgfs/fgdata.bundle&lt;br /&gt;
&lt;br /&gt;
the MD5 checksum is &lt;br /&gt;
 2996221BD2B8AB7740F332F49396CF56&lt;br /&gt;
&lt;br /&gt;
=== Trial run ===&lt;br /&gt;
When all the builds are done and the data download has finished it is time for a test run:&lt;br /&gt;
 export LD_LIBRARY_PATH=$prefix/lib/:$LD_LIBRARY_PATH&lt;br /&gt;
 $prefix/bin/fgfs --fg-root=$prefix/data&lt;br /&gt;
&lt;br /&gt;
For the future, if you want to start FlightGear from command line have a look at [[fgfsrc]], if you prefer a graphical user interface continue with [[#fgrun|compiling fgrun]]. Have in mind that fgfs need to find our self compiled libraries and therefore we have to tell the linker (ld) where to find them. That is what the first line here does.&lt;br /&gt;
&lt;br /&gt;
== Optional Software ==&lt;br /&gt;
&lt;br /&gt;
=== fgrun ===&lt;br /&gt;
To build [[fgrun]] two more package is required:&lt;br /&gt;
*libfltk1.1-dev fluid&lt;br /&gt;
&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 svn co http://fgrun.svn.sourceforge.net/svnroot/fgrun/trunk fgrun&lt;br /&gt;
 cd fgrun/fgrun/&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
 ./configure --prefix=$prefix  [CPPFLAGS=-I$prefix/include/]&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
=== fgcom ===&lt;br /&gt;
For [[fgcom]] unfortunately there is one more dependency which cannot be solved with packages on Lenny/Etch, see [[#libopenal|libopenal]].&lt;br /&gt;
&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 svn co https://appfgcom.svn.sourceforge.net/svnroot/fgcom/trunk fgcom&lt;br /&gt;
 cd fgcom/src&lt;br /&gt;
 make INSTALL_BIN=$prefix/bin INSTALL_DIR=$prefix/fgcom \&lt;br /&gt;
    PLIB_PREFIX=$prefix OPENAL_PREFIX=$prefix install&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--== Keeping the GIT version up to date ==&lt;br /&gt;
&lt;br /&gt;
...to be continued. ;-)&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Building}}&lt;br /&gt;
&lt;br /&gt;
[[de:FlightGear_bauen_-_Debian]]&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Building_FlightGear_-_Debian&amp;diff=23268</id>
		<title>Building FlightGear - Debian</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Building_FlightGear_-_Debian&amp;diff=23268"/>
		<updated>2010-08-07T18:29:10Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= HowTo build on Debian =&lt;br /&gt;
&lt;br /&gt;
HowTo build FlightGear 2.0.0 or GIT on GNU/Linux Debian '''Stable''' 5.x (Lenny).&lt;br /&gt;
&lt;br /&gt;
This HowTo may also work with '''Testing'''/'''Unstable''' except that some things are easier because of more up to date packages. So, before fetching something check the version of the available -dev package for it.&lt;br /&gt;
&lt;br /&gt;
It even *should* work with '''Etch''', but I am not certain about some dependencies. [http://wiki.flightgear.org/index.php?title=Talk:Building_Flightgear_-_Debian&amp;amp;action=edit Reports] are welcome.&lt;br /&gt;
&lt;br /&gt;
If you don't want to make your hands dirty, have a look at [[Scripted_Compilation_on_Linux_Debian/Ubuntu]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Requirements and Preparations ==&lt;br /&gt;
You need an OpenGL capable graphics including a proper installed driver.&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also a bunch of packages (and some of their dependencies) are required:&lt;br /&gt;
*gcc, g++, make, automake1.9, pkg-config&lt;br /&gt;
*mawk (or gawk)&lt;br /&gt;
*cmake   (min. version 2.6.0-5,  for Etch available on backports.org!)&lt;br /&gt;
*git, subversion, wget&lt;br /&gt;
&amp;lt;!--*libsvn-dev, for [[Terrasync]]s proper operation.--&amp;gt;&lt;br /&gt;
*freeglut3-dev, libgl1-mesa-dev, libxrandr-dev&lt;br /&gt;
*libxi-dev, libxmu-dev, libxext-dev&lt;br /&gt;
*libopenal-dev (see [[#libopenal|libopenal]]), libalut-dev&lt;br /&gt;
*libjpeg62-dev, libtiff4-dev, libpng12-dev&lt;br /&gt;
*libboost1.37-dev  (Not available for Lenny atm, see [[#Boost Library|Boost Library]] below.)&lt;br /&gt;
&lt;br /&gt;
During installation packages ''simgear-dev'' and ''openscenegraph-dev'' *must not* be installed. They can safely be re-installed after compilation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Build and install ==&lt;br /&gt;
Because we are going to install versions different to the ones in the repositries it is recommended to install FG-2.0.0 and/or GIT in a place independent to the base system such as /usr/local/FG-2.0.0, /opt/FG-2.0.0 or in a subdirectory of your $HOME. I suggest to make it writeable by the user that there is no need to become root for the &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt; commands. I'll use &amp;lt;code&amp;gt;$prefix&amp;lt;/code&amp;gt; as a placeholder for this directory. &amp;lt;BR&amp;gt;&lt;br /&gt;
Another one will be &amp;lt;code&amp;gt;$srcdir&amp;lt;/code&amp;gt;, it stands for the absolute path to the directory which contains the folders of the various source codes. So in the following instructions you have to replace these with the local paths or even &amp;lt;code&amp;gt;export&amp;lt;/code&amp;gt; them during the process.&lt;br /&gt;
&lt;br /&gt;
Follow the instructions to fetch the sources and the data needed by FlightGear and the commands to build/install each source.&lt;br /&gt;
&lt;br /&gt;
Have in mind that the data is relatively large (GIT about 3.5 GB and 2.0.0 300 MB) so, to save some time, it is a good idea to fetch it while building the sources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== libopenal ===&lt;br /&gt;
The libopenal-dev package in Lenny/Etch is too old for [[fgcom]]. For FlightGear it does work but not all features (like Doppler) are available, so installing an up to date version is recommended anyway.&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 wget http://kcat.strangesoft.net/openal-releases/openal-soft-1.11.753.tar.bz2&lt;br /&gt;
 tar xjf openal-soft-1.11.753.tar.bz2&lt;br /&gt;
 cd openal-soft-1.11.753/build&lt;br /&gt;
 cmake  -D CMAKE_INSTALL_PREFIX:PATH=&amp;quot;$prefix&amp;quot; ..&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
=== plib ===&lt;br /&gt;
Latest SVN is [http://www.mail-archive.com/flightgear-devel@lists.sourceforge.net/msg20793.html recommended], yet package plib1.8.5-dev for Testing/Unstable does work as well.&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 svn co https://plib.svn.sourceforge.net/svnroot/plib/trunk plib&lt;br /&gt;
 cd plib&lt;br /&gt;
 sed s/PLIB_TINY_VERSION\ \ 5/PLIB_TINY_VERSION\ \ 6/ -i src/util/ul.h&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
 ./configure --prefix=$prefix&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Boost Library ===&lt;br /&gt;
Version 1.37 is needed. At least for Lenny/Etch this means getting the sources because this is not available atm on backports.org. Testing/Unstable users may have more luck and a package is available, libboost-1.37-dev or newer.&lt;br /&gt;
&lt;br /&gt;
To build SimGear, FlightGear, fgrun and fgcom some boostlib header files are required, no need to compile and install it. If you have installed a libboost1.37-dev (or higher) package on your system you don't have to bother at all with it. If not, you have to tell each ./configure where the header files are. To do so, add the option &amp;lt;code&amp;gt;CPPFLAGS=-I$prefix/include&amp;lt;/code&amp;gt; to the SimGear, FlightGear and fgrun &amp;lt;code&amp;gt;./configure&amp;lt;/code&amp;gt; commands. We copy the header files to $prefix/include because fgcom will need them there.&lt;br /&gt;
&lt;br /&gt;
Get the newest version tar ball from http://sourceforge.net/projects/boost/files/boost/, extract it into &amp;lt;code&amp;gt;$srcdir&amp;lt;/code&amp;gt; then:&lt;br /&gt;
 cp -R $srcdir/boost-[version]/boost/ $prefix/include/&lt;br /&gt;
&lt;br /&gt;
=== OpenSceneGraph ===&lt;br /&gt;
For FlightGear 2.0.0 one may use the latest (or at least 2.9.6) developer release from http://www.openscenegraph.org/projects/osg/wiki/Downloads/DeveloperReleases and extract it into &amp;lt;code&amp;gt;$srcdir&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Mostly this is ok for FlightGear GIT as well as it is stable. However, sometimes the release is not fresh enough and one have to get the latest developments via SVN:&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 svn co http://www.openscenegraph.org/svn/osg/OpenSceneGraph/trunk OpenSceneGraph&lt;br /&gt;
&lt;br /&gt;
cmake demands a build directory separate to its source directory. So &amp;lt;code&amp;gt;mkdir&amp;lt;/code&amp;gt; one and &amp;lt;code&amp;gt;cd&amp;lt;/code&amp;gt; into it.&lt;br /&gt;
 cmake -D CMAKE_BUILD_TYPE=&amp;quot;Release&amp;quot; -D CMAKE_CXX_FLAGS=&amp;quot;-O3&amp;quot; -D CMAKE_C_FLAGS=&amp;quot;-O3&amp;quot; \&lt;br /&gt;
    -D CMAKE_INSTALL_PREFIX:PATH=&amp;quot;$prefix&amp;quot; $srcdir/OpenSceneGraph[-version]&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SimGear ===&lt;br /&gt;
2.0.0:&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 wget http://mirrors.ibiblio.org/pub/mirrors/simgear/ftp/Source/SimGear-2.0.0.tar.gz&lt;br /&gt;
 tar xzf SimGear-2.0.0.tar.gz&lt;br /&gt;
 cd SimGear-2.0.0&lt;br /&gt;
&lt;br /&gt;
GIT:&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 git clone git://gitorious.org/fg/simgear.git simgear&lt;br /&gt;
 cd simgear&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
&lt;br /&gt;
2.0.0 and GIT:&lt;br /&gt;
 ./configure --prefix=$prefix [CPPFLAGS=-I$prefix/include LDFLAGS=&amp;quot;-L$prefix/lib -L$prefix/lib64&amp;quot;]&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
=== FlightGear source ===&lt;br /&gt;
2.0.0:&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 wget http://mirrors.ibiblio.org/pub/mirrors/flightgear/ftp/Source/FlightGear-2.0.0.tar.gz&lt;br /&gt;
 tar xzf FlightGear-2.0.0.tar.gz&lt;br /&gt;
 cd FlightGear-2.0.0&lt;br /&gt;
&lt;br /&gt;
GIT:&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 git clone git://gitorious.org/fg/flightgear.git flightgear&lt;br /&gt;
 cd flightgear&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
&lt;br /&gt;
2.0.0 and GIT:&lt;br /&gt;
 ./configure --prefix=$prefix [CPPFLAGS=-I$prefix/include/ LDFLAGS=&amp;quot;-L$prefix/lib -L$prefix/lib64&amp;quot;]&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
=== FlightGear data ===&lt;br /&gt;
2.0.0:&lt;br /&gt;
 cd $prefix&lt;br /&gt;
 wget http://mirrors.ibiblio.org/pub/mirrors/flightgear/ftp/Shared/FlightGear-data-2.0.0.tar.bz2&lt;br /&gt;
 tar xjf FlightGear-data-2.0.0.tar.bz2&lt;br /&gt;
&lt;br /&gt;
GIT:&lt;br /&gt;
 cd $prefix&lt;br /&gt;
 git clone git://gitorious.org/fg/fgdata.git data&lt;br /&gt;
&lt;br /&gt;
Or to Fetch A bundle that can be Downloaded in parts :&lt;br /&gt;
 cd $prefix&lt;br /&gt;
 wget http://peter-server.homelinux.net/fgdata/fgdata/fgdata.bundle&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
 cd $prefix&lt;br /&gt;
 wget http://flightgear.mxchange.org/pub/fgfs/fgdata.bundle&lt;br /&gt;
&lt;br /&gt;
the MD5 checksum is &lt;br /&gt;
 2996221BD2B8AB7740F332F49396CF56&lt;br /&gt;
&lt;br /&gt;
=== Trial run ===&lt;br /&gt;
When all the builds are done and the data download has finished it is time for a test run:&lt;br /&gt;
 export LD_LIBRARY_PATH=$prefix/lib/:$LD_LIBRARY_PATH&lt;br /&gt;
 $prefix/bin/fgfs --fg-root=$prefix/data&lt;br /&gt;
&lt;br /&gt;
For the future, if you want to start FlightGear from command line have a look at [[fgfsrc]], if you prefer a graphical user interface continue with [[#fgrun|compiling fgrun]]. Have in mind that fgfs need to find our self compiled libraries and therefore we have to tell the linker (ld) where to find them. That is what the first line here does.&lt;br /&gt;
&lt;br /&gt;
== Optional Software ==&lt;br /&gt;
&lt;br /&gt;
=== fgrun ===&lt;br /&gt;
To build [[fgrun]] two more package is required:&lt;br /&gt;
*libfltk1.1-dev fluid&lt;br /&gt;
&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 svn co http://fgrun.svn.sourceforge.net/svnroot/fgrun/trunk fgrun&lt;br /&gt;
 cd fgrun/fgrun/&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
 ./configure --prefix=$prefix  [CPPFLAGS=-I$prefix/include/]&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
=== fgcom ===&lt;br /&gt;
For [[fgcom]] unfortunately there is one more dependency which cannot be solved with packages on Lenny/Etch, see [[#libopenal|libopenal]].&lt;br /&gt;
&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 svn co https://appfgcom.svn.sourceforge.net/svnroot/fgcom/trunk fgcom&lt;br /&gt;
 cd fgcom/src&lt;br /&gt;
 make INSTALL_BIN=$prefix/bin INSTALL_DIR=$prefix/fgcom \&lt;br /&gt;
    PLIB_PREFIX=$prefix OPENAL_PREFIX=$prefix install&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--== Keeping the GIT version up to date ==&lt;br /&gt;
&lt;br /&gt;
...to be continued. ;-)&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Building}}&lt;br /&gt;
&lt;br /&gt;
[[de:FlightGear_bauen_-_Debian]]&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Howto:Understand_console_output&amp;diff=23179</id>
		<title>Howto:Understand console output</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Howto:Understand_console_output&amp;diff=23179"/>
		<updated>2010-08-02T11:07:05Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document lists '''[[FlightGear]] errors''', how to get rid of them and other '''console output'''. If FlightGear quits but does not give you any error, try increasing the [[FlightGear Launch Control#Debugging|Log Level]].&lt;br /&gt;
&lt;br /&gt;
Errors can appear in various locations, but the most common one is the console (a black window), which pops up when you run fgfs.exe.&lt;br /&gt;
&lt;br /&gt;
==Errors with known solutions==&lt;br /&gt;
===Airports/.... ... Done===&lt;br /&gt;
This is not an error. The message lets us know that [[TerraSync]] is updating the &amp;lt;tt&amp;gt;[[$FG_SCENERY]]/Airports&amp;lt;/tt&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
===Base package check failed ... Found version [none] at: ...&amp;lt;br&amp;gt;Please upgrade to version:===&lt;br /&gt;
* FlightGear was unable to find the [[$FG_ROOT]] directory. Set it using the &amp;lt;tt&amp;gt;--fg-root=&amp;lt;/tt&amp;gt; commandline option.&lt;br /&gt;
* When using [[CVS]] with binaries, the data must match the binary. You cannot use data from a different date than the binary's release date.&lt;br /&gt;
&lt;br /&gt;
===condition: comparison without property[1] or value===&lt;br /&gt;
A condition (like &amp;lt;tt&amp;gt;&amp;lt;less-than&amp;gt;&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;&amp;lt;equals&amp;gt;&amp;lt;/tt&amp;gt;) exists, without either:&lt;br /&gt;
* a property to check&lt;br /&gt;
* a value to check the property against&lt;br /&gt;
&lt;br /&gt;
===Could not find at least one of the following objects for animation:===&lt;br /&gt;
This means that FlightGear is unable to find an object in a .ac file. Check the .xml file (where the animation is stored) to see if the object-names match those in the .ac file. If you are not the aircraft's author you can safely ignore such warnings.&lt;br /&gt;
&lt;br /&gt;
===creating 3D noise texture... DONE===&lt;br /&gt;
Tells you that a new noise texture is created. It is not an error and can be ignored.&lt;br /&gt;
&lt;br /&gt;
===Error: [Screen #0] GraphicsWindowWin32::setPixelFormat() - No matching pixel format found based on traits specified====&lt;br /&gt;
Try changing the [[FlightGear Launch Control#Page Four - Options and Run|BPP]] value of your FlightGear setup. If that does not work, your graphics card is probably not able to run FlightGear 1.9 and higher. Another graphics card, or an older FlightGear version will likely &amp;quot;fix&amp;quot; the problem.&lt;br /&gt;
&lt;br /&gt;
===Error: bind() failed in make_server_socket()===&lt;br /&gt;
When using [[Howto: Multiplayer|multiplayer]] or socket input, this usually means you specified an invalid ip address or the port is in use. Note: for multiplayer, you don't need to use the ''--multiplay=in,...'' option at all, FlightGear (since version 1.0) figures out the proper setting automatically. Only use when you know what you are doing.&lt;br /&gt;
&lt;br /&gt;
===Error Building Technique: findAttr: could not find attribute bool===&lt;br /&gt;
Make sure that your data and source (or binary) match. They must be from the same date, to provide the best performance.&lt;br /&gt;
&lt;br /&gt;
===Error: connect() failed in make_client_socket()&amp;lt;br&amp;gt;SG_IO_OUT socket creation failed===&lt;br /&gt;
Your computer is not connected with the internet.&lt;br /&gt;
&lt;br /&gt;
===Error: RenderTexture requires the following unsupported OpenGL extensions...===&lt;br /&gt;
Your graphics card doesn't support some graphics feature that FG requires. Update your drivers, change the BPP value and/or try disabling some of the visual goodies like [[3D Clouds]].&lt;br /&gt;
&lt;br /&gt;
===Failed to find .... in apt.dat.gz===&lt;br /&gt;
You need to edit ATC/default.tower and ATC/default.atis. You can open these files with any text editor. Either remove or fix the entries containing your airports ICAO code (like KSFO).&lt;br /&gt;
&lt;br /&gt;
===Failed to open file ...===&lt;br /&gt;
Check if the file exists on your system. If the missing file is a scenery object; be sure you have the latest [http://scenemodels.flightgear.org/download/SharedModels.tgz Shared Models] from the [[FlightGear Scenery Database]].&lt;br /&gt;
&lt;br /&gt;
===Fatal error: mismatched tag ...===&lt;br /&gt;
In some .xml file, an opening tag (like &amp;lt;tt&amp;gt;&amp;lt;sim&amp;gt;&amp;lt;/tt&amp;gt;) does not match its closing tag (like &amp;lt;tt&amp;gt;&amp;lt;/sim&amp;gt;&amp;lt;/tt&amp;gt;). This error is hard to track down, best method is to comment (place code between &amp;lt;nowiki&amp;gt;&amp;lt;!-- and --&amp;gt;&amp;lt;/nowiki&amp;gt;) most of the aircraft. Then uncomment code one by one, until the error appears again.&lt;br /&gt;
&lt;br /&gt;
===Fatal error: name must begin with alpha or '_'===&lt;br /&gt;
This error comes up when a property should be formed of which the name does not start with a letter of the alphabet or _. If this error only happens with certain planes, contact their authors.&lt;br /&gt;
&lt;br /&gt;
===Fatal error: unclosed token===&lt;br /&gt;
A token (&amp;lt;nowiki&amp;gt;&amp;lt;!-- --&amp;gt;&amp;lt;/nowiki&amp;gt;) has been started, but not closes. Add &amp;lt;nowiki&amp;gt;--&amp;gt;&amp;lt;/nowiki&amp;gt; at the correct line.&lt;br /&gt;
&lt;br /&gt;
===FGMultiplayMgr::MP_ProcessData: No such file or directory===&lt;br /&gt;
This is telling you that there's someone online on the multiplayerserver, using a plane that you do not have installed on your own system. In order to remove the error (and see the other plane) you have to install the plane that the other pilot is using.&lt;br /&gt;
&lt;br /&gt;
===FGMultiplayMgr - No receiver port, Multiplayermode disabled===&lt;br /&gt;
FlightGear [[Howto: Multiplayer|multiplayer]] has not been set.&lt;br /&gt;
&lt;br /&gt;
===FGPropertyManager::GetNode() No node found for ...&amp;lt;br&amp;gt;  In component: ... unknown property ... referenced. Aborting===&lt;br /&gt;
FlightGear found a reference in the [[FDM]] to a non-existing property.&lt;br /&gt;
&lt;br /&gt;
===FGPropertyManager::GetNode() No node found for ...&amp;lt;br&amp;gt; The property ... is undefined.===&lt;br /&gt;
FlightGear found a reference in the [[FDM]] to a non-existing property. Keep in mind that JSBSim reads the FDM from top to bottom. Properties should always be created before they are needed somewhere.&lt;br /&gt;
&lt;br /&gt;
===Fgtzfile_read(): : Invalid argument&amp;lt;br&amp;gt;Fatal error: Timezone reading failed===&lt;br /&gt;
This one is caused by wrong line ending in a timezone file. Solution might be to download the Timezone/time.tab file manually from [http://gitorious.org/fg/fgdata/blobs/raw/master/Timezone/zone.tab Gitorious] (Right mouseclick &amp;gt; Save target as) and overwrite the file in &amp;lt;tt&amp;gt;[[$FG_ROOT]]/Timezone/time.tab&amp;lt;/tt&amp;gt; with it.&lt;br /&gt;
&lt;br /&gt;
===Found unexpected subsystem: system exiting. JSBSim failed to load aircraft and/or engine model===&lt;br /&gt;
You are probably trying to run an aircraft on a out-of-date version of FlightGear. The planes on the official download page are intended to be used with the latest version of FlightGear. Usage on any older systems may not work.&lt;br /&gt;
&lt;br /&gt;
===freeglut (fgfs): Unable to create direct context rendering for window 'FlightGear'&amp;lt;br&amp;gt;This may hurt performance===&lt;br /&gt;
This reports that you do not have proper hardware accelerated 3D (direct rendering) configured.&lt;br /&gt;
&lt;br /&gt;
===Gate ... doesn't seem to have routes associated with it===&lt;br /&gt;
A startup location in the [[Interactive Traffic#Ground networks|groundnetwork]] is not (properly) connected to a taxi route. Contact the airport author, or import the network to [[TaxiDraw]] and run the Verify network command to find the corrupted gate.&lt;br /&gt;
&lt;br /&gt;
===glLinkProgram &amp;quot;&amp;quot; Failed===&lt;br /&gt;
Update your drivers; they have to support atleast OpenGL 2.0 for FlightGear 2.0 and later.&lt;br /&gt;
&lt;br /&gt;
===loading scenario '...'===&lt;br /&gt;
This is not an error. It shows that an [[AI Systems#AI Models|AI scenario]] is loaded.&lt;br /&gt;
&lt;br /&gt;
===Model not found: ...===&lt;br /&gt;
This one tells you that FlightGear was unable to find a certain file. The nice thing is that it also tells you excactly what file. &lt;br /&gt;
&lt;br /&gt;
# Check if the file really does not exist at your computer.&lt;br /&gt;
# Try to locate the file in which the missing file is referenced. This is likely to be &amp;lt;tt&amp;gt;-set.xml&amp;lt;/tt&amp;gt; in the root directory of the loaded [[aircraft]]. Between the &amp;lt;model&amp;gt; tags, the base model file is referenced. This file references to all other models that are displayed with the aircraft.&lt;br /&gt;
# Contact the aircraft author with a detailed bug-report, in which you state the excact location of the missing file and (if you found it) the file in which it is referenced.&lt;br /&gt;
&lt;br /&gt;
===Nasal runtime error: nil used in numeric context===&lt;br /&gt;
This error is [[Nasal]] triggered by a Nasal file (the console should show what file (and line) and from where it was referenced). The Nasal script tried to do something with a [[Property Tree|property]] with an empty value. A solution is to fill the property before the Nasal is loaded. This can be done by setting the property in an [[aircraft]]'s &amp;lt;tt&amp;gt;-set.xml&amp;lt;/tt&amp;gt; file or by adding a [[Nasal scripting language#Listeners and Signals|listener]] to the script. &lt;br /&gt;
&lt;br /&gt;
[[Howto: Contact the developers|Contact the developers]] if this error is shown for a &amp;lt;tt&amp;gt;[[$FG_ROOT]]/Nasal/&amp;lt;/tt&amp;gt; script.&lt;br /&gt;
&lt;br /&gt;
===Near camera not rendering===&lt;br /&gt;
[[Image:Near_camera_off.png|500px]]&lt;br /&gt;
&lt;br /&gt;
If you screen looks like the image above; make sure you have at least [[OSG]] version 2.7.6.&lt;br /&gt;
&lt;br /&gt;
===No render bin name specified in render bin section===&lt;br /&gt;
Update [[SimGear]] (or binary) and your data directory.&lt;br /&gt;
&lt;br /&gt;
===No render bin number specified in render bin section===&lt;br /&gt;
Update [[SimGear]] (or binary) and your data directory.&lt;br /&gt;
&lt;br /&gt;
===... not a valid win32 application===&lt;br /&gt;
This Windows error could have various reasons to pop up. Usually, the file that is causing troubles is mentioned. Re-installing this file might solve the problem.&lt;br /&gt;
&lt;br /&gt;
===OBJECT_SIGN: unsupported glyph `.'===&lt;br /&gt;
Check the OBJECT_SIGN lines in the .stg file of the tile that was loaded when this error showed up.&lt;br /&gt;
&lt;br /&gt;
===OpenAL error &amp;lt;AL_INVALID_VALUE&amp;gt;: bind source &amp;lt;alGenSources&amp;gt;&amp;lt;br&amp;gt;Failed to generate audio source.===&lt;br /&gt;
This error is probably displayed because of some misdirected audio settings in the [[aircraft]]s setup. Check the -sound.xml file of the aircraft and see if all files refered to really exist. If not, try to contact the author of the plane, so he can fix the problem in the [[FlightGear CVS|CVS]] version or solve the problem yourself and let someone commit the patch.&lt;br /&gt;
&lt;br /&gt;
===OpenAL error (AL_INVALID_VALUE): constructor (alBufferData)&amp;lt;br&amp;gt;Fatal error: Failed to buffer data.===&lt;br /&gt;
Disabling sound is a temporarily solution for this problem.&lt;br /&gt;
&lt;br /&gt;
===osgDB ac3d reader: could not find texture...===&lt;br /&gt;
See [[#Failed to open file ...|Failed to open file ...]]&lt;br /&gt;
&lt;br /&gt;
===osgDB ac3d reader: detected surface with less than 3 vertices!===&lt;br /&gt;
In one of the loaded models a non-existing surface is found. This can be a single line (sometimes used to simulate thin wires) or a fault in the model.&lt;br /&gt;
&lt;br /&gt;
===Program's vertex attrib binding ..., usrAttr...===&lt;br /&gt;
Tells you that an effect binded certain attributes to a [[Shaders|shader]].&lt;br /&gt;
&lt;br /&gt;
===QNAN===&lt;br /&gt;
(Q)NAN stands for (Quiet) Not A Number, produced by 0/0 or other floating point break downs. There can be various causes for this:&lt;br /&gt;
* Using a &amp;quot;flap start&amp;quot; value of 0 in the [[YASim]] [[FDM]]. Use some small value like 0.001 instead.&lt;br /&gt;
&lt;br /&gt;
===Scaling image...===&lt;br /&gt;
This means a texture, whether in the scenery on your aircraft or anyone elses (when multiplayer is enabled), is not sized to powers of two. All textures in FlightGear have to be sized to power of two (eg. 16*16, 32*64, 32*1024). As of version 1.9 textures are resized automaticly, but it does slow your computer down, so it's better to resize the noted textures.&lt;br /&gt;
&lt;br /&gt;
===ssgInit called without a valid OpenGL context===&lt;br /&gt;
In short, your GL libraries are broken. So far only Red Hat 7.x users have experienced this (see http://www.redhat.com/bugzilla/show_bug.cgi?id=18867). The only solutions are possibly complicated ones: you can either change distributions (most of us prefer Debian) or upgrade/downgrade your Mesa libs.&lt;br /&gt;
&lt;br /&gt;
===The system cannot find the file specified===&lt;br /&gt;
If you are running Windows Vista; start by looking in &amp;lt;tt&amp;gt;C:\Users\Owner\AppData\Local\VirtualStore&amp;lt;/tt&amp;gt; and seeing if you have a folder called FlightGear in there. If you do, cut-and-paste (merge) that one with &amp;lt;tt&amp;gt;C:\Program Files\Flightgear&amp;lt;/tt&amp;gt; and try to launch FlightGear again.&lt;br /&gt;
&lt;br /&gt;
'''Hint:''' you may need to go under Tools and Folder Options to specify &amp;quot;Show Hidden/System Files and Folders&amp;quot; in order for AppData to be visible.&lt;br /&gt;
&lt;br /&gt;
===Time zone reading failed===&lt;br /&gt;
This is probably caused by a line-ending problem in the timezone files. Win32 users can resolve the problem by downloading a DOS to UNIX conversion utility available at http://www.nottingham.ac.uk/~eazdluf/d2u.zip. Run as `d2u *.tab` from within the timezone directory to fix your timezone files&lt;br /&gt;
&lt;br /&gt;
===Traffic manager could not find airport===&lt;br /&gt;
There is either an airport missing from apt.dat, or there is a wrong ICAO code in a [[Interactive Traffic#Building Traffic Files|traffic file]]. An airport missing from apt.dat could be due to a recent opening.&lt;br /&gt;
&lt;br /&gt;
===Unable to choose requested pixel format===&lt;br /&gt;
Error should be solved as of version 1.9. If not, try changing your [[FlightGear Launch Control#Page Four - Options and Run|BPP]] and/or resolution.&lt;br /&gt;
&lt;br /&gt;
===Unable to find airport details for .... in FGTower::Init()===&lt;br /&gt;
This error can be surpressed by disabling [[Interactive Traffic|AI Traffic]], via the AI/ATC [[menu]].&lt;br /&gt;
&lt;br /&gt;
The error appears when an airport in &amp;lt;tt&amp;gt;[[$FG_ROOT]]/Airports/apt.dat.gz&amp;lt;/tt&amp;gt; cannot be found in &amp;lt;tt&amp;gt;[[$FG_ROOT]]/ATC/default.tower&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;[[$FG_ROOT]]/ATC/default.atis&amp;lt;/tt&amp;gt;. Renaming the airports in the apt.dat.gz file ór in both default ATC files will fix the problem.&lt;br /&gt;
&lt;br /&gt;
===Unable to open aircraft directory===&lt;br /&gt;
The [[aircraft]] that you are trying to run most likely relies on another aircraft, which you did not install (yet). The error shows what aircraft, so go download that one!&lt;br /&gt;
=== Unexpected tag '...' found in YASim aircraft description===&lt;br /&gt;
FlightGear found a non-existing tag in the [[FDM]] of the aircraft you are trying to launch. If you have not changed the original aircraft, contact the aircraft author. Else, check the FDM througly for mistakes.&lt;br /&gt;
&lt;br /&gt;
=== Unknown ... aircraft: ... defaulting to C172 ===&lt;br /&gt;
FlightGear is unable to load the forced [[FDM]] (set through &amp;lt;tt&amp;gt;--fdm=...&amp;lt;/tt&amp;gt; or via &amp;lt;tt&amp;gt;Advanced &amp;gt; Flight Model&amp;lt;/tt&amp;gt; in [[FGRun]]) for this aircraft. FlightGear automatically picks the right FDM for each aircraft, so there is no need to set it manually, unless you know what you are doing. In the Flight Model dialog of FGRun, set the FDM to &amp;lt;tt&amp;gt;jsb&amp;lt;/tt&amp;gt;; that is the &amp;quot;auto setting&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Unknown exception to the main loop. Aborting... &amp;lt;br&amp;gt;Possible cause: No such file or directory===&lt;br /&gt;
This error could have a variety of sources, among them missing files but also other things. Increasing the [[FlightGear_Launch_Control#Debugging|log level]] to debug and repeating excactly what you did when the error came up, might provide some more information on what FlightGear was doing when the error occurred.&lt;br /&gt;
* Setting your [[FlightGear Launch Control#Page Four - Options and Run|BPP]] to a lower value might work.&lt;br /&gt;
* Changing the resolution to a smaller one might work as well.&lt;br /&gt;
&lt;br /&gt;
===WARNING: Couldn't convert texture...===&lt;br /&gt;
You are trying to run an aircraft not compatible with your FlightGear version. Most of the time, this error appears when you fly an aircraft, textured with .png files on versions older than 1.9. Convert the textures manually to .rgb or upgrade your FlightGear version.&lt;br /&gt;
&lt;br /&gt;
===Warning: Picked up TriangleIntersect===&lt;br /&gt;
Reduce your [[FlightGear Launch Control#Debugging|Log Level]] to alert. Or [[Showstoppers|send the fgfs output to /dev/null (unix systems) or 2&amp;gt;nul (Windows)]]. The errors might still be shown, but do not affect the sim anymore.&lt;br /&gt;
&lt;br /&gt;
===Warning: TangentSpaceGenerator: unknown primitive mode 9===&lt;br /&gt;
This is an [[OSG]] error, showing up when an effect needs tangent vectors, but polygons are not support. The error itself can be ignored, altough some [[shaders]] may look wrong. Shader developers should try to minimise the use of polygons and use triangles and quads instead.&lt;br /&gt;
&lt;br /&gt;
===YASim SOLUTION FAILURE: Solution failed to converge after 10000 iterations===&lt;br /&gt;
Some control in the [[YASim]] [[FDM]] is too weak, according to YASim, to control the aircraft. An effectiveness tag will be required in the FDM to solve this error.&lt;br /&gt;
&lt;br /&gt;
===YASim SOLUTION FAILURE:&amp;lt;br&amp;gt;Zero length fuselage===&lt;br /&gt;
There is a problem in the [[FDM]]. A fuselage section with similar ax and ay was created. Change the ax and/or ay values to match the aircraft.&lt;br /&gt;
&lt;br /&gt;
==Errors without known solutions==&lt;br /&gt;
Please take a look at the upcoming errors and see if you know a solution to get rid of them. Your additions are grealy appreciated!&lt;br /&gt;
&lt;br /&gt;
===AL Error (fx): Invalid Value at pitch and gain===&lt;br /&gt;
&lt;br /&gt;
===AL Error (sound manager): Invalid Operation at update===&lt;br /&gt;
&lt;br /&gt;
===AL Error (sound manager): Invalid Value at buffer add data&amp;lt;br&amp;gt;No such buffer!===&lt;br /&gt;
&lt;br /&gt;
===Failed to execute command nasal===&lt;br /&gt;
&lt;br /&gt;
===Failed to tie property ... to object methods===&lt;br /&gt;
A JSBSim error.&lt;br /&gt;
&lt;br /&gt;
===FGMultiplayMgr::MP_ProcessData - message from ... has invalid length!===&lt;br /&gt;
&lt;br /&gt;
===FGMultiplayerMgr::Open - Failed to bind recieve socket===&lt;br /&gt;
&lt;br /&gt;
===GPS: malformed route, index=1===&lt;br /&gt;
&lt;br /&gt;
===Mesa 7.3 implementation error: bad texture level in r300UploadSubImage===&lt;br /&gt;
http://www.flightgear.org/forums/viewtopic.php?f=2&amp;amp;t=6706&amp;amp;start=0&amp;amp;st=0&amp;amp;sk=t&amp;amp;sd=a&lt;br /&gt;
&lt;br /&gt;
===Nasal runtime error: stack overflow===&lt;br /&gt;
&lt;br /&gt;
===No image file for texture, using white===&lt;br /&gt;
A [[Shaders|shader]] error&lt;br /&gt;
&lt;br /&gt;
===No path in /sim/sound/path===&lt;br /&gt;
&lt;br /&gt;
===OpenAL error (AL_ILLEGAL_COMMAND): set_source_pos===&lt;br /&gt;
&lt;br /&gt;
===OpenAL error (AL_ILLEGAL_COMMAND): set_volume===&lt;br /&gt;
&lt;br /&gt;
===PT_vs_hpt: ran out of layers===&lt;br /&gt;
&lt;br /&gt;
===Warning: detected OpenGL error 'invalid value' after RenderBin::draw(,)===&lt;br /&gt;
&lt;br /&gt;
===Warning: GraphicsWindowWin32::grabFocus() - Failed grabbing the focus===&lt;br /&gt;
&lt;br /&gt;
===WARNING: PUI: Too many live puInterfaces open at once!===&lt;br /&gt;
Appears when printing large outputs (very) frequently on the screen.&lt;br /&gt;
&lt;br /&gt;
===Warning: State::drawQuads(0, 154400) too large handle in remapping to ushort glDrawElements===&lt;br /&gt;
&lt;br /&gt;
[[Category:Howto|Get rid of common errors]]&lt;br /&gt;
&lt;br /&gt;
[[fr:Howto: Débarrassez-vous des erreurs les plus fréquentes]]&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Building_FlightGear_-_Debian&amp;diff=23169</id>
		<title>Building FlightGear - Debian</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Building_FlightGear_-_Debian&amp;diff=23169"/>
		<updated>2010-08-01T15:50:40Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: /* fgrun */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= HowTo build on Debian =&lt;br /&gt;
&lt;br /&gt;
HowTo build FlightGear 2.0.0 or CVS on GNU/Linux Debian '''Stable''' 5.x (Lenny).&lt;br /&gt;
&lt;br /&gt;
This HowTo may also work with '''Testing'''/'''Unstable''' except that some things are easier because of more up to date packages. So, before fetching something check the version of the available -dev package for it.&lt;br /&gt;
&lt;br /&gt;
It even *should* work with '''Etch''', but I am not certain about some dependencies. [http://wiki.flightgear.org/index.php?title=Talk:Building_Flightgear_-_Debian&amp;amp;action=edit Reports] are welcome.&lt;br /&gt;
&lt;br /&gt;
If you don't want to make your hands dirty, have a look at [[Scripted_Compilation_on_Linux_Debian/Ubuntu]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Requirements and Preparations ==&lt;br /&gt;
You need an OpenGL capable graphics including a proper installed driver.&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also a bunch of packages (and some of their dependencies) are required:&lt;br /&gt;
*gcc, g++, make, automake1.9, pkg-config&lt;br /&gt;
*mawk (or gawk)&lt;br /&gt;
*cmake   (min. version 2.6.0-5,  for Etch available on backports.org!)&lt;br /&gt;
*cvs, subversion, wget&lt;br /&gt;
&amp;lt;!--*libsvn-dev, for [[Terrasync]]s proper operation.--&amp;gt;&lt;br /&gt;
*freeglut3-dev, libgl1-mesa-dev, libxrandr-dev&lt;br /&gt;
*libxi-dev, libxmu-dev, libxext-dev&lt;br /&gt;
*libopenal-dev (see [[#libopenal|libopenal]]), libalut-dev&lt;br /&gt;
*libjpeg62-dev, libtiff4-dev, libpng12-dev&lt;br /&gt;
*libboost1.37-dev  (Not available for Lenny atm, see [[#Boost Library|Boost Library]] below.)&lt;br /&gt;
&lt;br /&gt;
During installation packages ''simgear-dev'' and ''openscenegraph-dev'' *must not* be installed. They can safely be re-installed after compilation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Build and install ==&lt;br /&gt;
Because we are going to install versions different to the ones in the repositries it is recommended to install FG-2.0.0 and/or CVS in a place independent to the base system such as /usr/local/FG-2.0.0, /opt/FG-2.0.0 or in a subdirectory of your $HOME. I suggest to make it writeable by the user that there is no need to become root for the &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt; commands. I'll use &amp;lt;code&amp;gt;$prefix&amp;lt;/code&amp;gt; as a placeholder for this directory. &amp;lt;BR&amp;gt;&lt;br /&gt;
Another one will be &amp;lt;code&amp;gt;$srcdir&amp;lt;/code&amp;gt;, it stands for the absolute path to the directory which contains the folders of the various source codes. So in the following instructions you have to replace these with the local paths or even &amp;lt;code&amp;gt;export&amp;lt;/code&amp;gt; them during the process.&lt;br /&gt;
&lt;br /&gt;
Follow the instructions to fetch the sources and the data needed by FlightGear and the commands to build/install each source.&lt;br /&gt;
&lt;br /&gt;
Have in mind that the data is relatively large (CVS about 2 GB and 2.0.0 300 MB) so, to save some time, it is a good idea to fetch it while building the sources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== libopenal ===&lt;br /&gt;
The libopenal-dev package in Lenny/Etch is too old for [[fgcom]]. For FlightGear it does work but not all features (like Doppler) are available, so installing an up to date version is recommended anyway.&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 wget http://kcat.strangesoft.net/openal-releases/openal-soft-1.11.753.tar.bz2&lt;br /&gt;
 tar xjf openal-soft-1.11.753.tar.bz2&lt;br /&gt;
 cd openal-soft-1.11.753/build&lt;br /&gt;
 cmake  -D CMAKE_INSTALL_PREFIX:PATH=&amp;quot;$prefix&amp;quot; ..&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
=== plib ===&lt;br /&gt;
Latest SVN is [http://www.mail-archive.com/flightgear-devel@lists.sourceforge.net/msg20793.html recommended], yet package plib1.8.5-dev for Testing/Unstable does work as well.&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 svn co https://plib.svn.sourceforge.net/svnroot/plib/trunk plib&lt;br /&gt;
 cd plib&lt;br /&gt;
 sed s/PLIB_TINY_VERSION\ \ 5/PLIB_TINY_VERSION\ \ 6/ -i src/util/ul.h&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
 ./configure --prefix=$prefix&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Boost Library ===&lt;br /&gt;
Version 1.37 is needed. At least for Lenny/Etch this means getting the sources because this is not available atm on backports.org. Testing/Unstable users may have more luck and a package is available, libboost-1.37-dev or newer.&lt;br /&gt;
&lt;br /&gt;
To build SimGear, FlightGear, fgrun and fgcom some boostlib header files are required, no need to compile and install it. If you have installed a libboost1.37-dev (or higher) package on your system you don't have to bother at all with it. If not, you have to tell each ./configure where the header files are. To do so, add the option &amp;lt;code&amp;gt;CPPFLAGS=-I$prefix/include&amp;lt;/code&amp;gt; to the SimGear, FlightGear and fgrun &amp;lt;code&amp;gt;./configure&amp;lt;/code&amp;gt; commands. We copy the header files to $prefix/include because fgcom will need them there.&lt;br /&gt;
&lt;br /&gt;
Get the newest version tar ball from http://sourceforge.net/projects/boost/files/boost/, extract it into &amp;lt;code&amp;gt;$srcdir&amp;lt;/code&amp;gt; then:&lt;br /&gt;
 cp -R $srcdir/boost-[version]/boost/ $prefix/include/&lt;br /&gt;
&lt;br /&gt;
=== OpenSceneGraph ===&lt;br /&gt;
For FlightGear 2.0.0 one may use the latest (or at least 2.9.6) developer release from http://www.openscenegraph.org/projects/osg/wiki/Downloads/DeveloperReleases and extract it into &amp;lt;code&amp;gt;$srcdir&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Mostly this is ok for FlightGear CVS as well as it is stable. However, sometimes the release is not fresh enough and one have to get the latest developments via SVN:&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 svn co http://www.openscenegraph.org/svn/osg/OpenSceneGraph/trunk OpenSceneGraph&lt;br /&gt;
&lt;br /&gt;
cmake demands a build directory separate to its source directory. So &amp;lt;code&amp;gt;mkdir&amp;lt;/code&amp;gt; one and &amp;lt;code&amp;gt;cd&amp;lt;/code&amp;gt; into it.&lt;br /&gt;
 cmake -D CMAKE_BUILD_TYPE=&amp;quot;Release&amp;quot; -D CMAKE_CXX_FLAGS=&amp;quot;-O3&amp;quot; -D CMAKE_C_FLAGS=&amp;quot;-O3&amp;quot; \&lt;br /&gt;
    -D CMAKE_INSTALL_PREFIX:PATH=&amp;quot;$prefix&amp;quot; $srcdir/OpenSceneGraph[-version]&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SimGear ===&lt;br /&gt;
2.0.0:&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 wget http://mirrors.ibiblio.org/pub/mirrors/simgear/ftp/Source/SimGear-2.0.0.tar.gz&lt;br /&gt;
 tar xzf SimGear-2.0.0.tar.gz&lt;br /&gt;
 cd SimGear-2.0.0&lt;br /&gt;
&lt;br /&gt;
CVS:&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 git clone git://gitorious.org/fg/simgear.git simgear&lt;br /&gt;
 cd simgear&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
&lt;br /&gt;
2.0.0 and CVS:&lt;br /&gt;
 ./configure --prefix=$prefix [CPPFLAGS=-I$prefix/include LDFLAGS=&amp;quot;-L$prefix/lib -L$prefix/lib64&amp;quot;]&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
=== FlightGear source ===&lt;br /&gt;
2.0.0:&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 wget http://mirrors.ibiblio.org/pub/mirrors/flightgear/ftp/Source/FlightGear-2.0.0.tar.gz&lt;br /&gt;
 tar xzf FlightGear-2.0.0.tar.gz&lt;br /&gt;
 cd FlightGear-2.0.0&lt;br /&gt;
&lt;br /&gt;
CVS:&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 git clone git://gitorious.org/fg/flightgear.git flightgear&lt;br /&gt;
 cd flightgear&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
&lt;br /&gt;
2.0.0 and CVS:&lt;br /&gt;
 ./configure --prefix=$prefix [CPPFLAGS=-I$prefix/include/ LDFLAGS=&amp;quot;-L$prefix/lib -L$prefix/lib64&amp;quot;]&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
=== FlightGear data ===&lt;br /&gt;
2.0.0:&lt;br /&gt;
 cd $prefix&lt;br /&gt;
 wget http://mirrors.ibiblio.org/pub/mirrors/flightgear/ftp/Shared/FlightGear-data-2.0.0.tar.bz2&lt;br /&gt;
 tar xjf FlightGear-data-2.0.0.tar.bz2&lt;br /&gt;
&lt;br /&gt;
GIT:&lt;br /&gt;
 cd $prefix&lt;br /&gt;
 git clone git://gitorious.org/fg/fgdata.git data&lt;br /&gt;
&lt;br /&gt;
Or to Fetch A bundle that can be Downloaded in parts :&lt;br /&gt;
 cd $prefix&lt;br /&gt;
 wget http://peter-server.homelinux.net/fgdata/fgdata/fgdata.bundle&lt;br /&gt;
&lt;br /&gt;
=== Trial run ===&lt;br /&gt;
When all the builds are done and the data download has finished it is time for a test run:&lt;br /&gt;
 export LD_LIBRARY_PATH=$prefix/lib/:$LD_LIBRARY_PATH&lt;br /&gt;
 $prefix/bin/fgfs --fg-root=$prefix/data&lt;br /&gt;
&lt;br /&gt;
For the future, if you want to start FlightGear from command line have a look at [[fgfsrc]], if you prefer a graphical user interface continue with [[#fgrun|compiling fgrun]]. Have in mind that fgfs need to find our self compiled libraries and therefore we have to tell the linker (ld) where to find them. That is what the first line here does.&lt;br /&gt;
&lt;br /&gt;
== Optional Software ==&lt;br /&gt;
&lt;br /&gt;
=== fgrun ===&lt;br /&gt;
To build [[fgrun]] two more package is required:&lt;br /&gt;
*libfltk1.1-dev fluid&lt;br /&gt;
&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 svn co http://fgrun.svn.sourceforge.net/svnroot/fgrun/trunk fgrun&lt;br /&gt;
 cd fgrun/fgrun/&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
 ./configure --prefix=$prefix  [CPPFLAGS=-I$prefix/include/]&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
=== fgcom ===&lt;br /&gt;
For [[fgcom]] unfortunately there is one more dependency which cannot be solved with packages on Lenny/Etch, see [[#libopenal|libopenal]].&lt;br /&gt;
&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 svn co https://appfgcom.svn.sourceforge.net/svnroot/fgcom/trunk fgcom&lt;br /&gt;
 cd fgcom/src&lt;br /&gt;
 make INSTALL_BIN=$prefix/bin INSTALL_DIR=$prefix/fgcom \&lt;br /&gt;
    PLIB_PREFIX=$prefix OPENAL_PREFIX=$prefix install&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--== Keeping the CVS version up to date ==&lt;br /&gt;
&lt;br /&gt;
...to be continued. ;-)&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Building}}&lt;br /&gt;
&lt;br /&gt;
[[de:FlightGear_bauen_-_Debian]]&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Using_TerraGear&amp;diff=23162</id>
		<title>Using TerraGear</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Using_TerraGear&amp;diff=23162"/>
		<updated>2010-07-31T19:07:12Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: /* Elevation data */  Small Typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Terragearprocesschart.png|thumb|TerraGear Process Flow Chart]]&lt;br /&gt;
The [[TerraGear]] software project supports [[FlightGear]] by creating the files used by FlightGear to represent the elevation and texture of the earth, including airports, cities, fields, forests, rivers, roads and so on. The TerraGear software reads data files containing ground elevation, airport locations and layouts, geographical land-cover data, and more, and produces the scenery files used by FlightGear to represent the terrain of the world.&lt;br /&gt;
&lt;br /&gt;
For simplicity and convenience, most FlightGear users simply download the plug-and-play scenery files from the FlightGear scenery server, or use [[TerraSync]] to automatically download scenery as needed. But there is a variety of reasons you might want to use TerraGear to produce your own terrain files, rather than downloading the standard FlightGear scenery. &lt;br /&gt;
&lt;br /&gt;
For instance, if you use [[TaxiDraw]] to modify/improve information about an [[:Category:Airports|airport]]'s taxiway/apron layout, you might wish to see how that modified airport would look in the scenery before deciding you're happy with the results. Maybe the official scenery is too detailed for your slow machine, and you'd like to build terrain using a digital elevation model (DEM) with poorer resolution, to decrease the number of polygons and thus improve your framerates. Or maybe you've got a fantastically fast machine, and you want to build your own terrain using higher-resultion vector data (vmap1, Tiger, osm) to get better roads/streams. For all these reasons, learning how to use TerraGear is a good idea.&lt;br /&gt;
&lt;br /&gt;
==Obtaining TerraGear==&lt;br /&gt;
You can either build TerraGear yourself, or download a pre-compiled binary. The later is the easiest and advised for starters.&lt;br /&gt;
&lt;br /&gt;
* '''Option 1 - Download TerraGear pre-compiled (recommended for beginners) on Windows'''&lt;br /&gt;
*# Download the latest TerraGear-cs-Win..-....zip file (check what bits version you run!) from ftp://ftp.ihg.uni-duisburg.de/FlightGear/Win32/. &lt;br /&gt;
*# Create or choose a directory to hold the TerraGear tools. &lt;br /&gt;
*# Unzip the package into a sub-directory named &amp;lt;tt&amp;gt;Terragear/&amp;lt;/tt&amp;gt; in the base directory.&lt;br /&gt;
&lt;br /&gt;
* '''Option 2 - Compile TerraGear from source code''' as explained in [[Building TerraGear|this article]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Note:'' You might need default_priorities.txt from the mapserver [http://mapserver.flightgear.org/git/?p=terragear-cs;a=blob_plain;f=src/BuildTiles/Clipper/default_priorities.txt;h=4bb644a265ffc978a4303aad79169ace7ec1f043;hb=61ac48f3e56941b82aeb35960252c6ec4b7388d4 Git respository] See this forum thread for details: [http://www.flightgear.org/forums/viewtopic.php?f=5&amp;amp;p=77950]&lt;br /&gt;
&lt;br /&gt;
==Using TerraGear==&lt;br /&gt;
First, choose the boundaries for the area of scenery you want to build, in terms of latitude and longitude. The smaller the area of scenery you generate, the smaller the amount of data you will need, and the less CPU time it will take. For example, if you are just interested in generating a new airport layout at 12.3W 34.4N, then simply generating the scenery between 12W 34N and 13W 35N would be sufficient. &lt;br /&gt;
&lt;br /&gt;
Write down the bounding box (minimum and maximum longitude and latitude) for the scenery you want to generate. Remember that West and South are negative - i.e. 4W 10S would be -4, -10. Try not to get mixed up, otherwise you'll end up generating scenery or airports on the other side of the planet! &lt;br /&gt;
&lt;br /&gt;
You'll be dealing with multiple different types of data in various formats. Create a new directory for your scenery work. Within that directory, create the following sub-directories: &lt;br /&gt;
&lt;br /&gt;
* '''data/''' - for raw and pre-processed data (eg elevation files) &lt;br /&gt;
* '''output/''' - for the scenery files you will create &lt;br /&gt;
* '''work/''' - for data that has been processed (eg by shape-decode) and is ready to be munged into scenery &lt;br /&gt;
&lt;br /&gt;
===Obtaining and processing data===&lt;br /&gt;
Terragear uses three different kinds of information to generate scenery:&lt;br /&gt;
&lt;br /&gt;
# The elevation of the land (provided by SRTM) &lt;br /&gt;
# The location and layout of airports (provided by apt.dat or a custom .dat) &lt;br /&gt;
# Whether a given lat/lon is sea, land, city, forest, town, road, railway (provided by VMAP0, CORINE etc. or custom shapefiles) &lt;br /&gt;
&lt;br /&gt;
This article describes how obtain and process each of these types of data in order, and bring it together for use by FlightGear. The order of these steps is important. For example, the airport data step needs the elevation data to determine the elevation of the airports and thus you should start with preparing elevation data.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;u&amp;gt;Please note:&amp;lt;/u&amp;gt; for inclusion in the official FlightGear scenery, all data &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; come from [[GNU GPL]] compatible sources!'''&lt;br /&gt;
&lt;br /&gt;
====Elevation data====&lt;br /&gt;
The best elevation data currently available is from the Shuttle Radar Topography Mission (SRTM). There are two types of SRTM data: &lt;br /&gt;
* Highly accurate 1-arcsecond resolution data, known as SRTM-1, for the USA &lt;br /&gt;
* Less accurate 3-arcsecond data, known as SRTM-3, for the rest of the world. &lt;br /&gt;
From now on, we'll assume you are using SRTM-3 data. Unless otherwise noted, the process for SRTM-1 is identical.&lt;br /&gt;
&lt;br /&gt;
You can download the appropriate data from http://dds.cr.usgs.gov/srtm/version2_1/. You want all .hgt.zip files covering your region of interest. Depending on the size of your scenery, there may be quite a few. Download them to &amp;lt;tt&amp;gt;data/SRTM-1/&amp;lt;/tt&amp;gt;(or SRTM-3/SRTM-30 depending on the type you downloaded) in your base directory. (Genapts looks for a few known, hardcoded elevation data directories in it's working directory. SRTM-30 is one of them and this is the least confusing in that list. Note: W.E.F. 31st July 2010, the genapts tool now also looks for SRTM-1/SRTM-3 directories. If you are using an older version, please supply the directories using --dem-path)&lt;br /&gt;
&lt;br /&gt;
Now we've got the data, we need to convert it into something of use to TerraGear. First, you need to unzip each of the .hgt files. After that, open the commandline (Windows: &amp;lt;tt&amp;gt;Start &amp;gt; Run &amp;gt; cmd.exe&amp;lt;/tt&amp;gt;) and change into the base directory (&amp;lt;tt&amp;gt;cd .../.../TerraGear&amp;lt;/tt&amp;gt;). &lt;br /&gt;
* '''NOTE:''' If you want to create a batch-file, replace &amp;lt;tt&amp;gt;%f&amp;lt;/tt&amp;gt; with &amp;lt;tt&amp;gt;%%f&amp;lt;/tt&amp;gt;, see [http://technet.microsoft.com/en-us/library/bb490909.aspx]&lt;br /&gt;
* '''NOTE:''' For SRTM-1 data, replace the &amp;lt;tt&amp;gt;3&amp;lt;/tt&amp;gt; by a &amp;lt;tt&amp;gt;1&amp;lt;/tt&amp;gt; in the first argument to hgtchop&lt;br /&gt;
&lt;br /&gt;
For Windows:&lt;br /&gt;
 for %f in (./data/SRTM-30/*.hgt) do ./Terragear/hgtchop.exe 3 %f ./work/SRTM-30&lt;br /&gt;
&lt;br /&gt;
For Linux:&lt;br /&gt;
 for i in $PWD/data/SRTM-3/*.hgt; do ./Terragear/hgtchop 3 $i $PWD/work/SRTM-3; done&lt;br /&gt;
&lt;br /&gt;
Now you will get a lot of .arr.gz files in your work/SRTM-3/ directory. We need to convert these to the .fit.gz format. Run the commandline again with&lt;br /&gt;
* '''NOTE:''' the space and dot at the and are important!&lt;br /&gt;
&lt;br /&gt;
For Windows:&lt;br /&gt;
 ./Terragear/terrafit.exe work/SRTM-3&lt;br /&gt;
&lt;br /&gt;
For Linux:&lt;br /&gt;
 ./Terragear/terrafit work/SRTM-3&lt;br /&gt;
&lt;br /&gt;
====Airport data====&lt;br /&gt;
Now we've got elevation data, we can generate our airports. First, create a &amp;lt;tt&amp;gt;data/airports/&amp;lt;/tt&amp;gt; directory and copy in your apt.dat file. This may be direct from your FlightGear data package (though you'll need to unzip it), or it may be one that you've modified with [[TaxiDraw]]. &lt;br /&gt;
&lt;br /&gt;
The command to create airports is &amp;quot;genapts&amp;quot;. Run it without any arguments to see the various command-line options. &lt;br /&gt;
&lt;br /&gt;
If it is simply run with a specified apt.dat and work directory, it will generate airport layouts for every airport in the file, which can take a long time. &lt;br /&gt;
&lt;br /&gt;
If you are just creating a single airport and you know the ICAO ID (e.g. [[KSFO]], EGPH, EG32), use is as follows from your root scenery directory (i.e. the directory above your data, work and output directories). If you use an apt.dat file with one single airport in it you should omit the &amp;quot;--airport&amp;quot; parameter. &lt;br /&gt;
&lt;br /&gt;
 genapts --input=data/airports/apt.dat --work=./work --airport=&amp;lt;AIRPORT_ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are generating a larger set of scenery, then you can specify the minimum and maximum longitude and latitude. &lt;br /&gt;
&lt;br /&gt;
Genapts will create two sub-directories in your work directory:&lt;br /&gt;
* AirportArea/&lt;br /&gt;
* AirportObj/&lt;br /&gt;
&lt;br /&gt;
These contain the definitions of the airport layout and any objects present (e.g. windsocks). &lt;br /&gt;
&lt;br /&gt;
====Landuse data====&lt;br /&gt;
The final piece of data we need to generate is the landuse data. In general, this is taken from the VMAP0 dataset as shapefiles from the scenery database mapserver, but other sources can also be used.&lt;br /&gt;
&lt;br /&gt;
The landuse data can be split into a number of different types:&lt;br /&gt;
&lt;br /&gt;
* '''Landmass''' separates the land from the sea. It is used as a mask for all other data. The most commonly used is the VMAP0 Landmass, but GSHHS can also be used.&lt;br /&gt;
* '''Land use data:''' defines whether a piece of land is forest, urban, sand, lava, glacier etc. These are usually VMAP0 data, defined as polygons.&lt;br /&gt;
* '''Line data:''' includes railroads, streams, roads. Typically VMAP0, but also Open Street Map for roads.&lt;br /&gt;
* '''Point data:''' is currently only used for defining towns.&lt;br /&gt;
 &lt;br /&gt;
By far the easiest way to get this data is to download shapefiles from the wonderful [http://mapserver.flightgear.org MapServer]. The MapServer lets you download the shapefiles for any selected scenery area. Click on the &amp;quot;Download Shapefiles&amp;quot; link (or go direct: http://mapserver.flightgear.org/download.psp). Enter in the bounding box of the scenery you want to generate, select the type of shapefile data you want, and click download. For basic scenery, get everything listed under VMap0 (with prefix v0_). &lt;br /&gt;
 &lt;br /&gt;
Download each shapefile into a &amp;lt;tt&amp;gt;data/shapefiles/&amp;lt;/tt&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
You can load these shapefiles into a GIS editor such as [[QGIS]] or GRASS to view and edit. This is a good idea to verify you have the correct files! Later on, you can experiment with replacing various shapefiles with other versions (GSHHS for coastline, OSM for roads etc.).&lt;br /&gt;
&lt;br /&gt;
The next step is to decode the shape-files into TerraGear format using the '''ogr-decode''' command. &lt;br /&gt;
&lt;br /&gt;
There are three important command-line arguments for ogr-decode:&lt;br /&gt;
* the destination directory for the decoded data&lt;br /&gt;
* the location of the shapefile's directory&lt;br /&gt;
* the material type&lt;br /&gt;
&lt;br /&gt;
Each shape-file corresponds with one of the material types defined in the materials.xml files. The mapping is pretty obvious. For example, v0_mixedcroppasturecover maps to MixedCropPastureCover. Note that the material types are case-sensitive, so it is a good idea to refer to the &amp;lt;tt&amp;gt;[[$FG_ROOT]]/materials.xml&amp;lt;/tt&amp;gt; file to hand so you can check. The exception is v0_landmass, which MUST be mapped onto the type Default.&lt;br /&gt;
&lt;br /&gt;
Additionally, there are a number of optional arguments, to indicate the width of line data (for roads, streams, railways), how large to make point data (for towns) and how long the longest straight line is allowed to be.&lt;br /&gt;
&lt;br /&gt;
For example, to decode the v0_landmass shapefile, you use the following command:&lt;br /&gt;
&lt;br /&gt;
 ogr-decode --max-segment 500 --area-type Default work/Landmass data/shapefiles/v0_landmass&lt;br /&gt;
&lt;br /&gt;
To create streams of width 10 metres&lt;br /&gt;
&lt;br /&gt;
 ogr-decode --max-segment 500 --line-width 10 --area-type Stream work/Stream data/shapefiles/v0_stream&lt;br /&gt;
&lt;br /&gt;
To generate some towns about 1km across&lt;br /&gt;
&lt;br /&gt;
 ogr-decode --point-width 500 --area-type Town work/Town data/shapefiles/v0_town&lt;br /&gt;
&lt;br /&gt;
Run this command for each shapefile in the set.&lt;br /&gt;
&lt;br /&gt;
==Generating scenery==&lt;br /&gt;
You will now have a work directory looking something like this:&lt;br /&gt;
&lt;br /&gt;
  AirportArea           SRTM-30&lt;br /&gt;
  AirportObj            Stream&lt;br /&gt;
  Bog                   IrrCropPastureCover    Town&lt;br /&gt;
  Lake                  Urban                  Landmass&lt;br /&gt;
  Railroad              DryCropPastureCover    Road&lt;br /&gt;
  EvergreenBroadCover   Marsh                  Sand&lt;br /&gt;
  MixedCropPastureCover ScrubCover&lt;br /&gt;
  GrassCover            MixedForestCover       Shared&lt;br /&gt;
&lt;br /&gt;
Now we can actually generate the scenery. This is done by the fgfs-construct command. Run the command with &amp;quot;--help&amp;quot; to get usage information. &lt;br /&gt;
&lt;br /&gt;
We need to define:&lt;br /&gt;
* the work (--work-dir) and output (--output-dir) directories&lt;br /&gt;
* the center of the scenery we want to generate (--lat, --lon)&lt;br /&gt;
* the radius (--xdist, --ydist) from which to generate&lt;br /&gt;
* All the work directories to include in the scenery.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
  fgfs-construct --work-dir=./work --output-dir=./output --lon=55 --lat=60 --xdist=3 --ydist=3 \&lt;br /&gt;
  AirportArea SRTM-30 AirportObj Stream Bog IrrCropPastureCover Town Lake Urban Landmass Railroad \&lt;br /&gt;
  DryCropPastureCover Road EvergreenBroadCover Marsh Sand MixedCropPastureCover ScrubCover GrassCover \&lt;br /&gt;
  MixedForestCover&lt;br /&gt;
&lt;br /&gt;
When this finishes, the output directory will contain a scenery sub-tree.&lt;br /&gt;
&lt;br /&gt;
Point to it by setting either [[$FG_SCENERY]] or by using the --fg-scenery command-line option to fgfs, and give your new scenery a try!&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
Below is a list of common problems and solutions. If in doubt - Google it. Many problems (particularly when compiling TerraGear) have been hit before: &lt;br /&gt;
&lt;br /&gt;
* Crashes in genapts. Sometimes genapts will crash when dealing with a particular airport. In that case, try running it again with the --start-id argument to start at the airport it failed on, and the --nudge argument which tries to nudge the calculations in the right direction. &lt;br /&gt;
* fgfs-construct Killed. The fgfs-construct process may kill itself if it is using too many system resources. Increasing the values for setrlimit in src/BuildTiles/Main/main.cxx is the best solution. &lt;br /&gt;
* Airports appear in the bottom of holes, or there are spaces between the airports and the scenery. This typically happens when genapts is unable to find the correct elevation data, or the elevation data changed between running genapts and shape-decode. Try generating a single airport in your scenery area using genapts, and look at the output. In particular, make sure there is a work/SRTM-30 directory. &lt;br /&gt;
* Only the airports appear in the scenery. There are three typical causes for this: &lt;br /&gt;
** You didn't download the correct shapefiles for the area. &lt;br /&gt;
** You haven't run shape-decode on the v0_landmass shapefile as Default &lt;br /&gt;
** You didn't include the correct directories in fgfs-construct. &lt;br /&gt;
* Generate scenery includes data removed from the shapefiles. If you are editing shapefiles, you need to delete the appropriate work subdirectory before running shape-decode. Otherwise your changes will be in addition to those already present. &lt;br /&gt;
* All the scenery is flat and at sea-level. Typically this is because you didn't include any elevation data in your fgfs-construct command. Make sure there's a STRM-30 directory included in the command-line. &lt;br /&gt;
* All terrain copies the material of a certain shapefile. You have probably forgotten to put each of the downloaded shapefiles in a seperate directory inside the Data/shapefiles directory. &lt;br /&gt;
&lt;br /&gt;
{{Terra}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Scenery enhancement]]&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Using_TerraGear&amp;diff=23161</id>
		<title>Using TerraGear</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Using_TerraGear&amp;diff=23161"/>
		<updated>2010-07-31T19:06:37Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: /* Elevation data */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Terragearprocesschart.png|thumb|TerraGear Process Flow Chart]]&lt;br /&gt;
The [[TerraGear]] software project supports [[FlightGear]] by creating the files used by FlightGear to represent the elevation and texture of the earth, including airports, cities, fields, forests, rivers, roads and so on. The TerraGear software reads data files containing ground elevation, airport locations and layouts, geographical land-cover data, and more, and produces the scenery files used by FlightGear to represent the terrain of the world.&lt;br /&gt;
&lt;br /&gt;
For simplicity and convenience, most FlightGear users simply download the plug-and-play scenery files from the FlightGear scenery server, or use [[TerraSync]] to automatically download scenery as needed. But there is a variety of reasons you might want to use TerraGear to produce your own terrain files, rather than downloading the standard FlightGear scenery. &lt;br /&gt;
&lt;br /&gt;
For instance, if you use [[TaxiDraw]] to modify/improve information about an [[:Category:Airports|airport]]'s taxiway/apron layout, you might wish to see how that modified airport would look in the scenery before deciding you're happy with the results. Maybe the official scenery is too detailed for your slow machine, and you'd like to build terrain using a digital elevation model (DEM) with poorer resolution, to decrease the number of polygons and thus improve your framerates. Or maybe you've got a fantastically fast machine, and you want to build your own terrain using higher-resultion vector data (vmap1, Tiger, osm) to get better roads/streams. For all these reasons, learning how to use TerraGear is a good idea.&lt;br /&gt;
&lt;br /&gt;
==Obtaining TerraGear==&lt;br /&gt;
You can either build TerraGear yourself, or download a pre-compiled binary. The later is the easiest and advised for starters.&lt;br /&gt;
&lt;br /&gt;
* '''Option 1 - Download TerraGear pre-compiled (recommended for beginners) on Windows'''&lt;br /&gt;
*# Download the latest TerraGear-cs-Win..-....zip file (check what bits version you run!) from ftp://ftp.ihg.uni-duisburg.de/FlightGear/Win32/. &lt;br /&gt;
*# Create or choose a directory to hold the TerraGear tools. &lt;br /&gt;
*# Unzip the package into a sub-directory named &amp;lt;tt&amp;gt;Terragear/&amp;lt;/tt&amp;gt; in the base directory.&lt;br /&gt;
&lt;br /&gt;
* '''Option 2 - Compile TerraGear from source code''' as explained in [[Building TerraGear|this article]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Note:'' You might need default_priorities.txt from the mapserver [http://mapserver.flightgear.org/git/?p=terragear-cs;a=blob_plain;f=src/BuildTiles/Clipper/default_priorities.txt;h=4bb644a265ffc978a4303aad79169ace7ec1f043;hb=61ac48f3e56941b82aeb35960252c6ec4b7388d4 Git respository] See this forum thread for details: [http://www.flightgear.org/forums/viewtopic.php?f=5&amp;amp;p=77950]&lt;br /&gt;
&lt;br /&gt;
==Using TerraGear==&lt;br /&gt;
First, choose the boundaries for the area of scenery you want to build, in terms of latitude and longitude. The smaller the area of scenery you generate, the smaller the amount of data you will need, and the less CPU time it will take. For example, if you are just interested in generating a new airport layout at 12.3W 34.4N, then simply generating the scenery between 12W 34N and 13W 35N would be sufficient. &lt;br /&gt;
&lt;br /&gt;
Write down the bounding box (minimum and maximum longitude and latitude) for the scenery you want to generate. Remember that West and South are negative - i.e. 4W 10S would be -4, -10. Try not to get mixed up, otherwise you'll end up generating scenery or airports on the other side of the planet! &lt;br /&gt;
&lt;br /&gt;
You'll be dealing with multiple different types of data in various formats. Create a new directory for your scenery work. Within that directory, create the following sub-directories: &lt;br /&gt;
&lt;br /&gt;
* '''data/''' - for raw and pre-processed data (eg elevation files) &lt;br /&gt;
* '''output/''' - for the scenery files you will create &lt;br /&gt;
* '''work/''' - for data that has been processed (eg by shape-decode) and is ready to be munged into scenery &lt;br /&gt;
&lt;br /&gt;
===Obtaining and processing data===&lt;br /&gt;
Terragear uses three different kinds of information to generate scenery:&lt;br /&gt;
&lt;br /&gt;
# The elevation of the land (provided by SRTM) &lt;br /&gt;
# The location and layout of airports (provided by apt.dat or a custom .dat) &lt;br /&gt;
# Whether a given lat/lon is sea, land, city, forest, town, road, railway (provided by VMAP0, CORINE etc. or custom shapefiles) &lt;br /&gt;
&lt;br /&gt;
This article describes how obtain and process each of these types of data in order, and bring it together for use by FlightGear. The order of these steps is important. For example, the airport data step needs the elevation data to determine the elevation of the airports and thus you should start with preparing elevation data.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;u&amp;gt;Please note:&amp;lt;/u&amp;gt; for inclusion in the official FlightGear scenery, all data &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; come from [[GNU GPL]] compatible sources!'''&lt;br /&gt;
&lt;br /&gt;
====Elevation data====&lt;br /&gt;
The best elevation data currently available is from the Shuttle Radar Topography Mission (SRTM). There are two types of SRTM data: &lt;br /&gt;
* Highly accurate 1-arcsecond resolution data, known as SRTM-1, for the USA &lt;br /&gt;
* Less accurate 3-arcsecond data, known as SRTM-3, for the rest of the world. &lt;br /&gt;
From now on, we'll assume you are using SRTM-3 data. Unless otherwise noted, the process for SRTM-1 is identical.&lt;br /&gt;
&lt;br /&gt;
You can download the appropriate data from http://dds.cr.usgs.gov/srtm/version2_1/. You want all .hgt.zip files covering your region of interest. Depending on the size of your scenery, there may be quite a few. Download them to &amp;lt;tt&amp;gt;data/SRTM-1/&amp;lt;/tt&amp;gt;(or SRTM-3/SRTM-30 depending on the type you downloaded) in your base directory. (Genapts looks for a few known, hardcoded elevation data directories in it's working directory. SRTM-30 is one of them and this is the least confusing in that list. Note: W.E.F. 31st July 2010, the genapts tool now alos looks for SRTM-1/SRTM-3 directories. If you are using an older version, please supply the directories using --dem-path)&lt;br /&gt;
&lt;br /&gt;
Now we've got the data, we need to convert it into something of use to TerraGear. First, you need to unzip each of the .hgt files. After that, open the commandline (Windows: &amp;lt;tt&amp;gt;Start &amp;gt; Run &amp;gt; cmd.exe&amp;lt;/tt&amp;gt;) and change into the base directory (&amp;lt;tt&amp;gt;cd .../.../TerraGear&amp;lt;/tt&amp;gt;). &lt;br /&gt;
* '''NOTE:''' If you want to create a batch-file, replace &amp;lt;tt&amp;gt;%f&amp;lt;/tt&amp;gt; with &amp;lt;tt&amp;gt;%%f&amp;lt;/tt&amp;gt;, see [http://technet.microsoft.com/en-us/library/bb490909.aspx]&lt;br /&gt;
* '''NOTE:''' For SRTM-1 data, replace the &amp;lt;tt&amp;gt;3&amp;lt;/tt&amp;gt; by a &amp;lt;tt&amp;gt;1&amp;lt;/tt&amp;gt; in the first argument to hgtchop&lt;br /&gt;
&lt;br /&gt;
For Windows:&lt;br /&gt;
 for %f in (./data/SRTM-30/*.hgt) do ./Terragear/hgtchop.exe 3 %f ./work/SRTM-30&lt;br /&gt;
&lt;br /&gt;
For Linux:&lt;br /&gt;
 for i in $PWD/data/SRTM-3/*.hgt; do ./Terragear/hgtchop 3 $i $PWD/work/SRTM-3; done&lt;br /&gt;
&lt;br /&gt;
Now you will get a lot of .arr.gz files in your work/SRTM-3/ directory. We need to convert these to the .fit.gz format. Run the commandline again with&lt;br /&gt;
* '''NOTE:''' the space and dot at the and are important!&lt;br /&gt;
&lt;br /&gt;
For Windows:&lt;br /&gt;
 ./Terragear/terrafit.exe work/SRTM-3&lt;br /&gt;
&lt;br /&gt;
For Linux:&lt;br /&gt;
 ./Terragear/terrafit work/SRTM-3&lt;br /&gt;
&lt;br /&gt;
====Airport data====&lt;br /&gt;
Now we've got elevation data, we can generate our airports. First, create a &amp;lt;tt&amp;gt;data/airports/&amp;lt;/tt&amp;gt; directory and copy in your apt.dat file. This may be direct from your FlightGear data package (though you'll need to unzip it), or it may be one that you've modified with [[TaxiDraw]]. &lt;br /&gt;
&lt;br /&gt;
The command to create airports is &amp;quot;genapts&amp;quot;. Run it without any arguments to see the various command-line options. &lt;br /&gt;
&lt;br /&gt;
If it is simply run with a specified apt.dat and work directory, it will generate airport layouts for every airport in the file, which can take a long time. &lt;br /&gt;
&lt;br /&gt;
If you are just creating a single airport and you know the ICAO ID (e.g. [[KSFO]], EGPH, EG32), use is as follows from your root scenery directory (i.e. the directory above your data, work and output directories). If you use an apt.dat file with one single airport in it you should omit the &amp;quot;--airport&amp;quot; parameter. &lt;br /&gt;
&lt;br /&gt;
 genapts --input=data/airports/apt.dat --work=./work --airport=&amp;lt;AIRPORT_ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are generating a larger set of scenery, then you can specify the minimum and maximum longitude and latitude. &lt;br /&gt;
&lt;br /&gt;
Genapts will create two sub-directories in your work directory:&lt;br /&gt;
* AirportArea/&lt;br /&gt;
* AirportObj/&lt;br /&gt;
&lt;br /&gt;
These contain the definitions of the airport layout and any objects present (e.g. windsocks). &lt;br /&gt;
&lt;br /&gt;
====Landuse data====&lt;br /&gt;
The final piece of data we need to generate is the landuse data. In general, this is taken from the VMAP0 dataset as shapefiles from the scenery database mapserver, but other sources can also be used.&lt;br /&gt;
&lt;br /&gt;
The landuse data can be split into a number of different types:&lt;br /&gt;
&lt;br /&gt;
* '''Landmass''' separates the land from the sea. It is used as a mask for all other data. The most commonly used is the VMAP0 Landmass, but GSHHS can also be used.&lt;br /&gt;
* '''Land use data:''' defines whether a piece of land is forest, urban, sand, lava, glacier etc. These are usually VMAP0 data, defined as polygons.&lt;br /&gt;
* '''Line data:''' includes railroads, streams, roads. Typically VMAP0, but also Open Street Map for roads.&lt;br /&gt;
* '''Point data:''' is currently only used for defining towns.&lt;br /&gt;
 &lt;br /&gt;
By far the easiest way to get this data is to download shapefiles from the wonderful [http://mapserver.flightgear.org MapServer]. The MapServer lets you download the shapefiles for any selected scenery area. Click on the &amp;quot;Download Shapefiles&amp;quot; link (or go direct: http://mapserver.flightgear.org/download.psp). Enter in the bounding box of the scenery you want to generate, select the type of shapefile data you want, and click download. For basic scenery, get everything listed under VMap0 (with prefix v0_). &lt;br /&gt;
 &lt;br /&gt;
Download each shapefile into a &amp;lt;tt&amp;gt;data/shapefiles/&amp;lt;/tt&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
You can load these shapefiles into a GIS editor such as [[QGIS]] or GRASS to view and edit. This is a good idea to verify you have the correct files! Later on, you can experiment with replacing various shapefiles with other versions (GSHHS for coastline, OSM for roads etc.).&lt;br /&gt;
&lt;br /&gt;
The next step is to decode the shape-files into TerraGear format using the '''ogr-decode''' command. &lt;br /&gt;
&lt;br /&gt;
There are three important command-line arguments for ogr-decode:&lt;br /&gt;
* the destination directory for the decoded data&lt;br /&gt;
* the location of the shapefile's directory&lt;br /&gt;
* the material type&lt;br /&gt;
&lt;br /&gt;
Each shape-file corresponds with one of the material types defined in the materials.xml files. The mapping is pretty obvious. For example, v0_mixedcroppasturecover maps to MixedCropPastureCover. Note that the material types are case-sensitive, so it is a good idea to refer to the &amp;lt;tt&amp;gt;[[$FG_ROOT]]/materials.xml&amp;lt;/tt&amp;gt; file to hand so you can check. The exception is v0_landmass, which MUST be mapped onto the type Default.&lt;br /&gt;
&lt;br /&gt;
Additionally, there are a number of optional arguments, to indicate the width of line data (for roads, streams, railways), how large to make point data (for towns) and how long the longest straight line is allowed to be.&lt;br /&gt;
&lt;br /&gt;
For example, to decode the v0_landmass shapefile, you use the following command:&lt;br /&gt;
&lt;br /&gt;
 ogr-decode --max-segment 500 --area-type Default work/Landmass data/shapefiles/v0_landmass&lt;br /&gt;
&lt;br /&gt;
To create streams of width 10 metres&lt;br /&gt;
&lt;br /&gt;
 ogr-decode --max-segment 500 --line-width 10 --area-type Stream work/Stream data/shapefiles/v0_stream&lt;br /&gt;
&lt;br /&gt;
To generate some towns about 1km across&lt;br /&gt;
&lt;br /&gt;
 ogr-decode --point-width 500 --area-type Town work/Town data/shapefiles/v0_town&lt;br /&gt;
&lt;br /&gt;
Run this command for each shapefile in the set.&lt;br /&gt;
&lt;br /&gt;
==Generating scenery==&lt;br /&gt;
You will now have a work directory looking something like this:&lt;br /&gt;
&lt;br /&gt;
  AirportArea           SRTM-30&lt;br /&gt;
  AirportObj            Stream&lt;br /&gt;
  Bog                   IrrCropPastureCover    Town&lt;br /&gt;
  Lake                  Urban                  Landmass&lt;br /&gt;
  Railroad              DryCropPastureCover    Road&lt;br /&gt;
  EvergreenBroadCover   Marsh                  Sand&lt;br /&gt;
  MixedCropPastureCover ScrubCover&lt;br /&gt;
  GrassCover            MixedForestCover       Shared&lt;br /&gt;
&lt;br /&gt;
Now we can actually generate the scenery. This is done by the fgfs-construct command. Run the command with &amp;quot;--help&amp;quot; to get usage information. &lt;br /&gt;
&lt;br /&gt;
We need to define:&lt;br /&gt;
* the work (--work-dir) and output (--output-dir) directories&lt;br /&gt;
* the center of the scenery we want to generate (--lat, --lon)&lt;br /&gt;
* the radius (--xdist, --ydist) from which to generate&lt;br /&gt;
* All the work directories to include in the scenery.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
  fgfs-construct --work-dir=./work --output-dir=./output --lon=55 --lat=60 --xdist=3 --ydist=3 \&lt;br /&gt;
  AirportArea SRTM-30 AirportObj Stream Bog IrrCropPastureCover Town Lake Urban Landmass Railroad \&lt;br /&gt;
  DryCropPastureCover Road EvergreenBroadCover Marsh Sand MixedCropPastureCover ScrubCover GrassCover \&lt;br /&gt;
  MixedForestCover&lt;br /&gt;
&lt;br /&gt;
When this finishes, the output directory will contain a scenery sub-tree.&lt;br /&gt;
&lt;br /&gt;
Point to it by setting either [[$FG_SCENERY]] or by using the --fg-scenery command-line option to fgfs, and give your new scenery a try!&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
Below is a list of common problems and solutions. If in doubt - Google it. Many problems (particularly when compiling TerraGear) have been hit before: &lt;br /&gt;
&lt;br /&gt;
* Crashes in genapts. Sometimes genapts will crash when dealing with a particular airport. In that case, try running it again with the --start-id argument to start at the airport it failed on, and the --nudge argument which tries to nudge the calculations in the right direction. &lt;br /&gt;
* fgfs-construct Killed. The fgfs-construct process may kill itself if it is using too many system resources. Increasing the values for setrlimit in src/BuildTiles/Main/main.cxx is the best solution. &lt;br /&gt;
* Airports appear in the bottom of holes, or there are spaces between the airports and the scenery. This typically happens when genapts is unable to find the correct elevation data, or the elevation data changed between running genapts and shape-decode. Try generating a single airport in your scenery area using genapts, and look at the output. In particular, make sure there is a work/SRTM-30 directory. &lt;br /&gt;
* Only the airports appear in the scenery. There are three typical causes for this: &lt;br /&gt;
** You didn't download the correct shapefiles for the area. &lt;br /&gt;
** You haven't run shape-decode on the v0_landmass shapefile as Default &lt;br /&gt;
** You didn't include the correct directories in fgfs-construct. &lt;br /&gt;
* Generate scenery includes data removed from the shapefiles. If you are editing shapefiles, you need to delete the appropriate work subdirectory before running shape-decode. Otherwise your changes will be in addition to those already present. &lt;br /&gt;
* All the scenery is flat and at sea-level. Typically this is because you didn't include any elevation data in your fgfs-construct command. Make sure there's a STRM-30 directory included in the command-line. &lt;br /&gt;
* All terrain copies the material of a certain shapefile. You have probably forgotten to put each of the downloaded shapefiles in a seperate directory inside the Data/shapefiles directory. &lt;br /&gt;
&lt;br /&gt;
{{Terra}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Scenery enhancement]]&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Building_Flightgear_-_Gentoo&amp;diff=22845</id>
		<title>Building Flightgear - Gentoo</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Building_Flightgear_-_Gentoo&amp;diff=22845"/>
		<updated>2010-07-15T19:00:16Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: /* Requirements and Preparations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= HowTo build on Gentoo =&lt;br /&gt;
&lt;br /&gt;
HowTo build FlightGear GIT on Gentoo Linux. Stable releases can be obtained directly from the official Gentoo repository.&lt;br /&gt;
&lt;br /&gt;
== Requirements and Preparations ==&lt;br /&gt;
Download the [http://gitorious.org/papillon81/flightgear-gentoo Gentoo Overlay] from gitorious:&lt;br /&gt;
&lt;br /&gt;
 git-clone http://git.overlays.gentoo.org/gitweb/?p=proj/gamerlay.git;a=summary&lt;br /&gt;
&lt;br /&gt;
With that done, you should now add this overlay to your Package Manager (Portage):&lt;br /&gt;
&lt;br /&gt;
== Build and install ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Building_Flightgear_-_Gentoo&amp;diff=22843</id>
		<title>Building Flightgear - Gentoo</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Building_Flightgear_-_Gentoo&amp;diff=22843"/>
		<updated>2010-07-15T10:14:44Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: Created page with '= HowTo build on Gentoo =  HowTo build FlightGear GIT on Gentoo Linux. Stable releases can be obtained directly from the official Gentoo repository.  == Requirements and Preparat…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= HowTo build on Gentoo =&lt;br /&gt;
&lt;br /&gt;
HowTo build FlightGear GIT on Gentoo Linux. Stable releases can be obtained directly from the official Gentoo repository.&lt;br /&gt;
&lt;br /&gt;
== Requirements and Preparations ==&lt;br /&gt;
Download the [http://gitorious.org/papillon81/flightgear-gentoo Gentoo Overlay] from gitorious:&lt;br /&gt;
&lt;br /&gt;
 git-clone git://gitorious.org/papillon81/flightgear-gentoo.git&lt;br /&gt;
&lt;br /&gt;
With that done, you should now add this overlay to your Package Manager (Portage):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Build and install ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Building_FlightGear_-_Linux&amp;diff=22842</id>
		<title>Building FlightGear - Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Building_FlightGear_-_Linux&amp;diff=22842"/>
		<updated>2010-07-15T09:52:37Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: /* Ubuntu and Debian users */  Added link to Gentoo FG building article&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Main article|Building Flightgear}} &lt;br /&gt;
&lt;br /&gt;
This section describes how to build [[FlightGear]] on Linux system.&lt;br /&gt;
&lt;br /&gt;
Compiling FlightGear is not a task for novice users. Thus, if you're a beginner (we all were once) on a platform which binaries are available for, we recommend postponing this task and just starting with the binary distribution to get you flying.&lt;br /&gt;
&lt;br /&gt;
Or if you develop on Ubuntu or Debian, consider trying the script described in [[Scripted Compilation on Linux Debian/Ubuntu]].&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
Before you can compile FlightGear, you need to have the following installed on your computer:&lt;br /&gt;
&lt;br /&gt;
'''C++ compiler'''&lt;br /&gt;
&lt;br /&gt;
These are: c++, cpp, gcc, g++ found under the /usr/bin directory.  You will also need to have the tools '''autoconf''' and '''automake1.9''' installed.&lt;br /&gt;
&lt;br /&gt;
'''GIT'''&lt;br /&gt;
&lt;br /&gt;
See [[FlightGear and Git]].&lt;br /&gt;
&lt;br /&gt;
'''[[OpenGL]] support'''&lt;br /&gt;
&lt;br /&gt;
More specifically, your system needs the support for hardware accelerated graphics.  You can check for this by running the following in a [[command line]]:&lt;br /&gt;
&lt;br /&gt;
 glxinfo | grep direct&lt;br /&gt;
&lt;br /&gt;
Note: To run the above command, you need to have the tool '''mesa-utils''' installed.&lt;br /&gt;
&lt;br /&gt;
You should then see:&lt;br /&gt;
&lt;br /&gt;
 direct rendering: Yes&lt;br /&gt;
&lt;br /&gt;
This means you are good to go as far as OpenGL support is concerned.&lt;br /&gt;
&lt;br /&gt;
If you see:&lt;br /&gt;
&lt;br /&gt;
 direct rendering: No&lt;br /&gt;
&lt;br /&gt;
Don't panic yet.  This may just mean some required libraries for hardware accelerated graphic are missing.  Go ahead and try installing plib 1.8.5 and its dependencies first.  If you still get the above message, then you will need to do some googling and troubleshoot yourself.&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
FlightGear is dependent on quite a few number of libraries.  You do not need to compile all of them yourself, but you will at least need to have their development version installed.  For example, the development version for package plib1.8.5 is plib1.8.5'''-dev'''.&lt;br /&gt;
&lt;br /&gt;
The dependency is summarized in the following tree.  Please note that each library has its own dependencies, and most of these are not shown here.&lt;br /&gt;
&lt;br /&gt;
* FlightGear&lt;br /&gt;
** [http://kcat.strangesoft.net/openal.html OpenAL]&lt;br /&gt;
** SimGear&lt;br /&gt;
*** [http://plib.sourceforge.net/ PLIB]. Since march 2008, you will need version 1.8.5 - your distro probably supplies 1.8.4 still.&lt;br /&gt;
**** For versions pre march/2008: (Free)GLUT or SDL (We recommend the use of SDL over Free/GLUT, [http://www.mail-archive.com/flightgear-devel@lists.sourceforge.net/msg16153.html however since march 2008, FreeGLUT as well as SDL are both considered depreciated, please only use --enable-osgviewer during configuration instead]) &lt;br /&gt;
*** [[ OpenSceneGraph ]] (The latest development release or svn trunk for FlightGear/Git and the latest preceding OSG release for a FlightGear release)&lt;br /&gt;
*** You also need the development files for several basic libraries to build the software, among them the following (the package names are for Debian and derivatives(?)):&lt;br /&gt;
**** libfreetype6-dev&lt;br /&gt;
**** libjpeg62-dev&lt;br /&gt;
**** libungif4-dev&lt;br /&gt;
**** libtiff4-dev&lt;br /&gt;
**** libpng12-dev&lt;br /&gt;
**** libxmu-dev&lt;br /&gt;
**** libxi-dev&lt;br /&gt;
**** zlib1g-dev&lt;br /&gt;
**** libglut3-dev&lt;br /&gt;
&lt;br /&gt;
If you attack the above dependencies in the order listed below, you should be good:&lt;br /&gt;
&lt;br /&gt;
1. Glut. Most distributions include glut packages, although you may have to hunt for them. Make sure you install both the glut and glut-devel packages, otherwise FlightGear may be able to compile but won't run correctly.&lt;br /&gt;
&lt;br /&gt;
2. Zlib. Most distributions install the basic zlib libraries by default, but not the development portions. If you don't have zlib.h, you probably need to install the zlib-devel package for your distribution. &lt;br /&gt;
&lt;br /&gt;
3. Plib - portability libraries and scene graph. &lt;br /&gt;
&lt;br /&gt;
4. [[ OpenSceneGraph ]]&lt;br /&gt;
&lt;br /&gt;
5. SimGear - Simulation support libraries. If you are building FlightGear from Git, you need the Git version of SimGear. If you have strange build errors, one of the first things to check is that you have an up-to-date version of SimGear built and installed.&lt;br /&gt;
&lt;br /&gt;
==== APT-GET List ====&lt;br /&gt;
This is a list of all the apt-get commands I had to do while compiling FG, SG, and OSG on a mostly clean Ubuntu 64 system. It is a list of all the libraries you and your computer needs to compile FG, SG, OSG, and PLib. All you have to do is copy the full command, paste it in Terminal, enter your password, and it will download all the packages for you, and install them too. The full command is at the bottom, and I hope someone finds it useful :) sub-dependencies (dependencies of the dependencies) are not included as they are installed automatically by apt-get. If anyone sees something missing, please add it.&lt;br /&gt;
 &lt;br /&gt;
git - to get SG and FG &amp;lt;br&amp;gt;&lt;br /&gt;
subversion - to get OSG &amp;lt;br&amp;gt;&lt;br /&gt;
build-essential - to build (includes GCC, and other build tools) &amp;lt;br&amp;gt;&lt;br /&gt;
cmake - OSG Uses this &amp;lt;br&amp;gt;&lt;br /&gt;
ccmake-curses-gui -- OSG Uses this &amp;lt;br&amp;gt;&lt;br /&gt;
libpng-dev - to enable FG to use PNG textures&amp;lt;br&amp;gt;&lt;br /&gt;
libfreetype6-dev - fonts&amp;lt;br&amp;gt;&lt;br /&gt;
libjpeg-dev&amp;lt;br&amp;gt;&lt;br /&gt;
libungif4-dev&amp;lt;br&amp;gt;&lt;br /&gt;
libtiff-dev&amp;lt;br&amp;gt;&lt;br /&gt;
libxmu-dev&amp;lt;br&amp;gt;&lt;br /&gt;
libxi-dev&amp;lt;br&amp;gt;&lt;br /&gt;
libglut3-dev&amp;lt;br&amp;gt;&lt;br /&gt;
libalut-dev - sound&amp;lt;br&amp;gt;&lt;br /&gt;
libboost-dev - makes coding for some developers easier&amp;lt;br&amp;gt;&lt;br /&gt;
automake - needed by ./autogen.sh files&amp;lt;br&amp;gt;&lt;br /&gt;
autoconf - needed by ./autogen.sh files&amp;lt;br&amp;gt;&lt;br /&gt;
libfltk1.1-dev - You will need this if you will be using FGRun&amp;lt;br&amp;gt;&lt;br /&gt;
-----------&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install git subversion build-essential cmake libpng-dev libfreetype6-dev&lt;br /&gt;
libjpeg-dev libungif4-dev libtiff-dev libxmu-dev libxi-dev libglut3-dev libalut-dev&lt;br /&gt;
libboost-dev automake autoconf libfltk1.1-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
-----------&lt;br /&gt;
Total size is about 230 MB, depending on what you already have from other applications.&lt;br /&gt;
&lt;br /&gt;
This list might seem a bit short, but the sub-dependencies all add up :) The dependencies will be listed by apt-get when you use the command.&lt;br /&gt;
&lt;br /&gt;
== Compiling ==&lt;br /&gt;
Assuming you are root, do:&lt;br /&gt;
 cd /usr/local/src&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; When tracking a fast changing software like FlightGear/Git it is highly advisable to install it in a separate directory. That way one can also easily build and reinstall without being root, which greatly reduces the risk of messing up one's system.&lt;br /&gt;
To install in a directory of your choice add the &amp;lt;tt&amp;gt;--prefix&amp;lt;/tt&amp;gt; argument to configure. E.g. &amp;lt;tt&amp;gt;./configure --prefix=$HOME/FlightGear&amp;lt;/tt&amp;gt;. I would recommend installing all of OSG, plib, SimGear and FlightGear with the same prefix.&lt;br /&gt;
&lt;br /&gt;
=== Getting and compiling SimGear ===&lt;br /&gt;
&lt;br /&gt;
'''Step 1:'''&lt;br /&gt;
&lt;br /&gt;
Clone the SimGear git repository and set it up to track the 'next' branch.&lt;br /&gt;
 git clone git://gitorious.org/fg/simgear.git&lt;br /&gt;
&lt;br /&gt;
By default after cloning you should have a local next branch that tracks the master next branch. It can be updated it with git pull.&lt;br /&gt;
&lt;br /&gt;
'''Step 2:'''&lt;br /&gt;
&lt;br /&gt;
The source code will be downloaded into a directory called '''simgear'''.&lt;br /&gt;
&lt;br /&gt;
Next, go into the directory and make preparations for the compilation:&lt;br /&gt;
 cd simgear&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
 ./configure&lt;br /&gt;
&lt;br /&gt;
'''Note''' that if you don't want to install simgear globally on the system but in a specific directory, you can do so by adding --prefix=/path/to/your/fgInstallation to the ./configure command&lt;br /&gt;
&lt;br /&gt;
'''Step 3:'''&lt;br /&gt;
&lt;br /&gt;
Compile and install SimGear by doing:&lt;br /&gt;
 make; make install&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Note:'' with gcc 4.2 or later,on some platforms, you can get compiling errors about alc.h like: &lt;br /&gt;
&lt;br /&gt;
 '&amp;lt;anonymous&amp;gt;' has incomplete type &lt;br /&gt;
take a look at http://bugs.gentoo.org/166723&lt;br /&gt;
&lt;br /&gt;
=== Getting and compiling FlightGear ===&lt;br /&gt;
&lt;br /&gt;
'''Step 1:'''&lt;br /&gt;
&lt;br /&gt;
Clone the FlightGear git repository and set it up to track the 'next' branch.&lt;br /&gt;
 git clone git://gitorious.org/fg/flightgear.git&lt;br /&gt;
&lt;br /&gt;
By default after cloning you should have a local next branch that tracks the master next branch. It can be updated it with git pull.&lt;br /&gt;
&lt;br /&gt;
'''Step 2:'''&lt;br /&gt;
&lt;br /&gt;
Next, go into the folder and make preparations for the compilation:&lt;br /&gt;
 cd flightgear&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
 ./configure&lt;br /&gt;
&lt;br /&gt;
Note that if you don't want to install simgear globally on the system but in a specific directory, you can do so by adding --prefix=/path/to/your/fgInstallation to the ./configure command.&lt;br /&gt;
If you didn't install OSG globally or in the same prefix as SimGear and FlightGear, you have to pass the OSG directory to the configure-command like this:&lt;br /&gt;
 ./configure --prefix=/path/to/fgInstallation --with-osg=/path/to/osg/installation --enable-osgviewer&lt;br /&gt;
In this case you have to tell your system where to find the OSG libraries before you can run flightgear:&lt;br /&gt;
  export LD_LIBRARY_PATH=/path/to/osgInstallation/lib:$LD_LIBRARY_PATH&lt;br /&gt;
&lt;br /&gt;
'''Step 3:'''&lt;br /&gt;
&lt;br /&gt;
Now you can compile and install Flightgear by:&lt;br /&gt;
 make; make install&lt;br /&gt;
&lt;br /&gt;
'''Step 4:'''&lt;br /&gt;
&lt;br /&gt;
Clone the data directory:&lt;br /&gt;
 git clone git://gitorious.org/fg/fgdata.git&lt;br /&gt;
&lt;br /&gt;
The data directory is large (almost 2.5GB) so it will take considerable time to download.&lt;br /&gt;
There mirror of fgdata that might be faster to download from:&lt;br /&gt;
 git clone git://mapserver.flightgear.org/fgdata&lt;br /&gt;
&lt;br /&gt;
The mirror is synchronized with the master so either will do.&lt;br /&gt;
&lt;br /&gt;
And install it in (or as) /usr/local/share/FlightGear&lt;br /&gt;
 mv fgdata /usr/local/share/FlightGear&lt;br /&gt;
&lt;br /&gt;
== Ubuntu and Debian users ==&lt;br /&gt;
If you wish you can use the [[Scripted_Compilation_on_Linux_Debian/Ubuntu]] script to have Flightgear compiled in one shot under both Ubuntu and Debian systems.&lt;br /&gt;
&lt;br /&gt;
Debian users who prefer to build it without script may look at [[Building_Flightgear_-_Debian]].&lt;br /&gt;
Gentoo users can also use overlays to build FlightGear without much hassle : [[Building_Flightgear_-_Gentoo]].&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
=== Instructions ===&lt;br /&gt;
* [[ MSYS ]]&lt;br /&gt;
* [[ MinGW/cross-compiler ]]&lt;br /&gt;
* [[ CodeBlocks IDE ]]&lt;br /&gt;
* [[ OpenSUSE 10.1 10.2 ]]&lt;br /&gt;
* [http://www.geoffmclane.com/fg/fgmsvc7.htm MSVC7 *.Net]&lt;br /&gt;
* [http://www.oflebbe.de/oflebbe/FlightGear/index.html MSVC8 aka Visual 2005]&lt;br /&gt;
* [http://macflightgear.sourceforge.net/home/documents/ Mac OS X]&lt;br /&gt;
&lt;br /&gt;
{{Building}}&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=FlightGear_Newsletter_July_2010&amp;diff=22827</id>
		<title>FlightGear Newsletter July 2010</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=FlightGear_Newsletter_July_2010&amp;diff=22827"/>
		<updated>2010-07-13T16:56:40Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: /* Detailed terrain for Dubai */ minor typos edit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{newsletter}}&lt;br /&gt;
{{TOC_right}}&lt;br /&gt;
&lt;br /&gt;
This month's newsletter marks a year since [[FlightGear Newsletter July 2009|the first issue]] was written!&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;Newsletter history&amp;lt;/font&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
One year ago, in June 2009, [[FlightGear]]-head Curt proposed his newsletter-idea [http://www.flightgear.org/forums/viewtopic.php?f=6&amp;amp;t=5201 at the forum]. With multiple (failed) efforts in the past, those involved were extremely agger to get it up and going this time. Stuart was the one that wrote most of the first issue(s). At the time of the second issue, more people were involved and wrote a paragraph or two.&lt;br /&gt;
&lt;br /&gt;
Today, the newsletter is written by a bunch of people, with different interests and relations to FlightGear. It provides an easy way to keep up-to-date with the ongoing developments; both in FlightGear itself and in the community around it.&lt;br /&gt;
&lt;br /&gt;
I would like to use this opportunity to thank those that contributed over the past year. Thanks to their work, the newsletter still exists! In order to reach our next mileage, we would like to emphasize that the monthly newsletter can not live without the contributions of FlightGear users and developers. Everyone (with a wiki account, [Special:UserLogin|free to register]) can edit the newsletter and every contribution is welcome.&lt;br /&gt;
&lt;br /&gt;
Now, all I can say is: enjoy this brand new edition!&lt;br /&gt;
&lt;br /&gt;
==Development news==&lt;br /&gt;
&lt;br /&gt;
===A new forum for Google's Summer of Code ===&lt;br /&gt;
As some of you may already know, there is now an orchestrated effort going on to get FlightGear ready for becoming a mentoring organization in Google's Summer of Code 2011. &lt;br /&gt;
&lt;br /&gt;
So far, all related information has been collected here in the wiki: [[GSoC]]. &lt;br /&gt;
But to ease the planning and organization process, there has now been a new sub forum set up for talking about anything that is one way or another related to this effort. &lt;br /&gt;
The forum can be found at: http://flightgear.org/forums/viewforum.php?f=38&lt;br /&gt;
&lt;br /&gt;
This should make it much easier for all community members to participate in all related discussions, without necessarily having to be subscribed to the mailing lists.&lt;br /&gt;
&lt;br /&gt;
So if you have anything to contribute to this topic, please do make sure to check out this new forum.&lt;br /&gt;
&lt;br /&gt;
You are for example also invited to make suggestions for new FlightGear related GSoC projects.&lt;br /&gt;
&lt;br /&gt;
For the time being, one topic from the &amp;quot;New Features&amp;quot; sub forum has already been moved to this new forum, it is about a suggestion to procedurally populate the FlightGear scenery with dynamically created cities, for more details please check out [[AutoGen Scenery for FlightGear]].&lt;br /&gt;
&lt;br /&gt;
===New mapping software on the block===&lt;br /&gt;
Michael contributes new FlightGear mapping software to the communitiy, written in the Ruby programming language: [http://rubyforge.org/projects/fgmap FGMap]. Basically it shows your current flight position on an [http://openstreetmap.org OpenStreetMap] map. It therefore has some similarity to [[Atlas]] and the online [[MPMap]]s. As with all projects, [http://rubyforge.org/tracker/?func=add&amp;amp;group_id=9572&amp;amp;atid=37032 feedback] is highly appreciated.&lt;br /&gt;
&lt;br /&gt;
FGMap has many features, including:&lt;br /&gt;
* Show flight position on Openstreetmap map in real-time&lt;br /&gt;
* Download new map tiles on-the-fly in the background&lt;br /&gt;
* Add shaded elevation layer to map for nice visual effect&lt;br /&gt;
* Display current speed and altitude&lt;br /&gt;
* Show position and frequency of all navigation aids on the map&lt;br /&gt;
* Create FlightGear route manager entries with a click of the mouse from navigation aids and waypoints&lt;br /&gt;
* Record and restore flight path&lt;br /&gt;
* Colorize path according to speed and altitude&lt;br /&gt;
* Display information about instantaneous speed and altitude for all points of the track&lt;br /&gt;
* Set waypoints on map&lt;br /&gt;
&lt;br /&gt;
Downloads and more information are available at [http://rubyforge.org/projects/fgmap the project's website].&lt;br /&gt;
&lt;br /&gt;
==In the hangar==&lt;br /&gt;
===Bell P59 Airacomet and Bell 222 X===&lt;br /&gt;
''helijah'' created and pushed both P59 and Bell 222X onto Git. The Bell 222X FDM is still in development. More information and download at [http://helijah.free.fr/flightgear/hangar.htm ''helijah's'' Hangar].&lt;br /&gt;
&lt;br /&gt;
===De Havilland Canada DHC-7-150 Dash 7===&lt;br /&gt;
''Quadunit404'' has announced [http://www.flightgear.org/forums/viewtopic.php?f=4&amp;amp;t=8805 intentions] to produce his first aircraft, the De Havilland Canada DHC-7-150 Dash 7, adding yet another member of the De Havilland Canada family to to FlightGear fleet after active development begins. Currently he is learning how to model using [[Blender]] and will be studying the FDMs of other turboprop regional airliners already in FlightGear to get an idea of how to write the FDM.&lt;br /&gt;
&lt;br /&gt;
===SpaceShipOne and White Knight===&lt;br /&gt;
''helijah'' has made some changes to the SpaceShipOne model including the [[FDM]], adding fuselage reflection effect and separating the SpaceShipOne and White Knight objects. The next step is to improve the SpaceShipOne model by adding wheels and moving parts. After that he will try to separate the two aircraft when in flight.&lt;br /&gt;
&lt;br /&gt;
==Livery database==&lt;br /&gt;
In the second week of July, the [http://liveries.flightgear.org livery database] welcomed its [http://liveries.flightgear.org/liveries.php?id=251 250th livery]: a glider club's livery for the [[Robin DR400]], created by top-painter Brett Harrison (Gooneybird). More liveries are welcome as always and can be [http://liveries.flightgear.org/contribute.php uploaded]!&lt;br /&gt;
&lt;br /&gt;
==Scenery corner==&lt;br /&gt;
===Animated jetways===&lt;br /&gt;
[[File:Movable_Jetway.jpg|thumb|A jetway connecting to a [[Boeing 737-300|737-300]].]]&lt;br /&gt;
''skyop'' and ''Gijs'' are currently working on animated jetways for FlightGear that can be activated with a click of the mouse. At the moment they are very primitive and only fit [[Boeing 737|737s]]. Planned features include automatic attachment to your airplane's door and even multiple jetways for wide-body airliners and [[Airbus A380|A380s]]. See [http://www.flightgear.org/forums/viewtopic.php?t=8728 this thread] for more information.&lt;br /&gt;
&lt;br /&gt;
[[Image:Dubai_v0_vs_cs-osm.png|thumb|270px|Dubai, with the new custom scenery data with OSM roads (left) and old vmap0 data.]]&lt;br /&gt;
===Detailed terrain for Dubai===&lt;br /&gt;
As announced in an [[FlightGear Newsletter March 2010#Dubai is coming up|earlier edition]], Gijs has been (re)drawing the terrain of Dubai. The FlightGear scenery now includes:&lt;br /&gt;
* Palm Islands (islands in the shape of a palm)&lt;br /&gt;
* The World (islands together forming a worldmap)&lt;br /&gt;
* Detailed coastline and city boundaries&lt;br /&gt;
The area is represented in its form of 2008, due to the lack of more up-to-date imagery. Given Dubai's massive expansion speed, the scenery can be considered as out-of-date already. Nevertheless it is a great step forward in comparison to the previous terrain, as the image on the right proves.&lt;br /&gt;
&lt;br /&gt;
This new terrain will be available with the upcoming scenery build. Those that can handle [[TerraGear]] can download shapefiles from the [http://mapserver.flightgear.org mapserver]. If you are interested in updating or detailing terrain yourself, take a look at [[Howto: Create custom scenery|this wiki article]].&lt;br /&gt;
&lt;br /&gt;
[[Image:Qatar_v0_vs_cs-osm.png|thumb|270px|Qatar, with the new custom scenery data with OSM roads (left) and old vmap0 data.]]&lt;br /&gt;
&lt;br /&gt;
===Detailed terrain for Qatar===&lt;br /&gt;
Believe it or not, but here is another Emirate that has been hand drawn! Fahim worked on the peninsula of Qatar, very close to Dubai. Seeing the image on the right, you might think detail/accuracy was lost (except for the urban areas), but I can tell you that the new terrain is far more accurate in all aspects.&lt;br /&gt;
&lt;br /&gt;
This new terrain will also be included with the upcoming scenery build and is already available via the [http://mapserver.flightgear.org mapserver].&lt;br /&gt;
&lt;br /&gt;
===Night flying at London Gatwick===&lt;br /&gt;
The new version of [[London Gatwick Airport]] (EGKK) is available and has improved textures and features. It claims to be one of the few ''(two?)'' major international airports in [[FlightGear]] suitable for night flying with full lighting textures on all buildings, hazard lights and approximately one hundred lighting masts. The tower even has lit instrumentation visible in the control room. Images are shown at [http://www.flightgear.org/forums/viewtopic.php?f=5&amp;amp;t=8363 the forum topic].&lt;br /&gt;
&lt;br /&gt;
The taxiways at night are complex but made easier if the official charts are downloaded from [http://www.nats-uk.ead-it.com]. Many taxiway and runway signs have been included to help you on your way. Additional [[AI]] ground network and AI traffic have made this into a very busy airport and a single gate at each pier has been thoughtfully reserved so you can find a parking space when you land here (see the readme file for details).&lt;br /&gt;
&lt;br /&gt;
In daytime the airport is fully modelled with detailed textures and even the roofs of buildings having accurate features. Stock model jetways, cargoes and ground vehicles have been added in quantity to give an authentic look to the airport. Large areas of open air car parks are distributed around the perimeter with novel layering of textures to enhance the 3D effect of the parked cars. Similarly, woods and trees have been added in surrounding areas to add more to the overall feel of the airport.&lt;br /&gt;
&lt;br /&gt;
London Gatwick EGKK may be downloaded from [http://www.mediafire.com/?t2ml5ezmgwv MediaFire].&lt;br /&gt;
&lt;br /&gt;
==Aircraft review==&lt;br /&gt;
'''This month: (name of aircraft here)'''&lt;br /&gt;
&lt;br /&gt;
==From the community==&lt;br /&gt;
===TransGear founder leaves===&lt;br /&gt;
Rob (MD-Terp), known by many as the founding father of the monthly [[TransGear]] events, [http://www.flightgear.org/forums/viewtopic.php?f=3&amp;amp;t=8809 announced] his &amp;quot;retirement&amp;quot; at the forum. With the first event being held just one month after the first edition of this newsletter, TransGear almost reached its first mileage. However, some former participants stepped up to continue organising such events and maybey even Rob will return. More on that in a future edition.&lt;br /&gt;
&lt;br /&gt;
We would like to thank Rob for all he has done, wish him all the best and deeply hope to see him return to the community one day.&lt;br /&gt;
&lt;br /&gt;
==And finally...==&lt;br /&gt;
&lt;br /&gt;
===Did you know?===&lt;br /&gt;
&lt;br /&gt;
[[Category:FlightGear Newsletter|2010 06]]&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=FlightGear_Newsletter_June_2010&amp;diff=22640</id>
		<title>FlightGear Newsletter June 2010</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=FlightGear_Newsletter_June_2010&amp;diff=22640"/>
		<updated>2010-06-30T13:34:16Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: /* Scenery corner */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{newsletter}}&lt;br /&gt;
{{TOC_right}}&lt;br /&gt;
&lt;br /&gt;
''We would like to emphasize that the monthly newsletter can not live without the contributions of FlightGear users and developers. Everyone (with a wiki account, free to register) can edit the newsletter and every contribution is welcome.''&lt;br /&gt;
&lt;br /&gt;
==Development news==&lt;br /&gt;
===Server wanted: Continuous Integration for FlightGear ===&lt;br /&gt;
The FlightGear project has started using a build server for [http://en.wikipedia.org/wiki/Continuous_integration continuous integration] purposes and [http://en.wikipedia.org/wiki/Build_automation automating software builds], the [http://hudson-ci.org/ Hudson] based build server is currently running on a home box as a prototype: http://zakalawe.ath.cx:8080/&lt;br /&gt;
&lt;br /&gt;
A build server like Hudson makes it very easy to automatically build FlightGear from source code, e.g. to check the integrity of the source tree or to help prepare prebuilt binaries, pre-releases or even releases.&lt;br /&gt;
The server will need a proper home if it moves beyond the prototype stage. If anyone wishes to volunteer or help sponsor a proper server (with a reasonably symmetric connection) to run Hudson, please get in touch using the [http://flightgear.org/mail.html mailing list] or the [http://flightgear.org/forums/ forums] - any Unix will do, for Ubuntu/Debian there's an easy apt.get source available. &lt;br /&gt;
All the setup can be done remotely, given SSH access. The disk, memory, CPU and bandwidth requirements are pretty moderate, due to our low commit rate. For additional details, please see [[FlightGear Build Server]].&lt;br /&gt;
&lt;br /&gt;
===SquawkGear: Bringing VATSIM to FlightGear!===&lt;br /&gt;
{{Main article|SquawkGear}}&lt;br /&gt;
SquawkGear is the much-awaited client that allows FlightGear users to connect to the largest and most realistic sim server in the world: [http://vatsim.net/ VATSIM]. VATSIM is simply a network that can, in theory, take any sim, although the current ones are X-Plane and Microsoft Flight Simulator. Using addons like SquawkBox for MSFS, pilots must adhere to strict rules about realism. A valid [[flight plan]] must always be submitted before takeoff, for instance. And pilots must contact [[Air Traffic Control]] before any actions.&lt;br /&gt;
&lt;br /&gt;
SquawkGear brings this wonderful server to FlightGear. While installation is not as simple as that of VATSIM clients for MSFS, pilots are now able to connect to the VATSIM network and use chat and voice to communicate with other players and ATC. Since [[scenery]] is very different between sims, aircraft do not always appear where they are supposed to be; a MSFS user might see you hovering a few feet above the ground, for instance.&lt;br /&gt;
&lt;br /&gt;
With its first release, SquawkGear is an excellent addon for pilots wishing to get on VATSIM without having to buy the payware sims. It is strongly recommended that you '''read all manuals''' before connecting to VATSIM; not only because installation is tricky, but also because there are certain rules to be followed on VATSIM. You will find that your [[KSFO]] on VATSIM is a thousand times more under control than your KSFO on one of the [[Howto: Multiplayer|mpservers]]!&lt;br /&gt;
&lt;br /&gt;
''Special thanks to Ivan (Reed) for all of his work!''&lt;br /&gt;
&lt;br /&gt;
===Bombable air combat add-on updated===&lt;br /&gt;
The [http://www.flightgear.org/forums/viewtopic.php?f=2&amp;amp;t=5742 Bombable air combat add-on to FlightGear] received a major update in June. Bombable now has these features:&lt;br /&gt;
&lt;br /&gt;
* Dogfight against other FlightGear pilots over multiplayer with [[Sopwith Camel]], SPAC VII, [[Fokker Dr.I|Fokker DR 1 Triplane]], or [[A6M2 Zero]]&lt;br /&gt;
* Explode/burn when you crash&lt;br /&gt;
* Exceeding [[Howto:Define limits|aircraft limitations]] (excess g-forces, overspeed) adds damage to your aircraft and finally leads to shutdown/crash &lt;br /&gt;
* Shootable/bombable moving AI tanks, jeeps, ships, and aircraft that [[Wildfire|catch fire]], burn, explode, sink, crash, etc.&lt;br /&gt;
* [[AI|AI scenarios]] that allow you to use FlightGear aircraft for air-to-ground, air-to-sea, and air-to-air combat missions against these targets&lt;br /&gt;
&lt;br /&gt;
==In the hangar==&lt;br /&gt;
===Boeing 787===&lt;br /&gt;
''nickyivyca'' is currently working on the [[Boeing 787]]. He corrected the [[FDM]] and changed some details in the model. More information at [http://www.flightgear.org/forums/viewtopic.php?f=4&amp;amp;t=8203 the forum].&lt;br /&gt;
&lt;br /&gt;
===C-130 Hercules===&lt;br /&gt;
The [[C-130]] Hercules [http://www.flightgear.org/forums/viewtopic.php?f=4&amp;amp;t=8629 is receiving some updates] from ''glazmax'' and ''helijah''. These updates include FDM and instruments fixes and improvements.&lt;br /&gt;
&lt;br /&gt;
===Cessna T-37===&lt;br /&gt;
''richter'' and ''snipey'' are working together in improving the [[Cessna T-37]]. Here is a list of items that have been improved/created:&lt;br /&gt;
&lt;br /&gt;
'''Model:'''&lt;br /&gt;
* Completely remodeled canopy;&lt;br /&gt;
* Main gear wheel wells and covers.&lt;br /&gt;
'''Sound:'''&lt;br /&gt;
* Interior-exterior sound level difference.&lt;br /&gt;
'''Instruments:'''&lt;br /&gt;
* Basic flight instruments.&lt;br /&gt;
&lt;br /&gt;
More information at [http://www.flightgear.org/forums/viewtopic.php?f=4&amp;amp;t=8354 the forum].&lt;br /&gt;
&lt;br /&gt;
===CH-47 Chinook===&lt;br /&gt;
''MOJO'' is tuning the [[CH-47 Chinook Helicopter|CH-47 ''Chinook'']]. He spent some time adding external cosmetics which main purpose is to add more detail to the Chinook. He added antenna and aerials, domed windows, pitot tubes, winch, engine hub details and started with the internal cargo bay. He intends to be adding an animated refuel probe and will be including several liveries. His ultimate aim for the CH-47 Chinook is to attempt to get the model more defined and realistic.&lt;br /&gt;
&lt;br /&gt;
===Cirrus Vision SF50===&lt;br /&gt;
''Zexe'' created a SF50 model. It is still at a very early stage. More information at [http://www.flightgear.org/forums/viewtopic.php?f=4&amp;amp;t=8352 the forum].&lt;br /&gt;
&lt;br /&gt;
===CRJ-200===&lt;br /&gt;
''nickyivyca'' has also been working in the [[CRJ-200]]:&lt;br /&gt;
&lt;br /&gt;
''&amp;quot;The CRJ-200 and 787 were made with very similar systems and such. Neither had a 2.0 compatible [[autopilot]]. So, I found out what was wrong with the one for the 787 first, and made those changes to the CRJ here. Both worked. I also did some FDM improvements, like moving the engines to where they really are and adding gear smoke and contrails.&amp;quot;'' - says he in [http://www.flightgear.org/forums/viewtopic.php?f=4&amp;amp;t=8329 the forum thread].&lt;br /&gt;
&lt;br /&gt;
===Curtiss P-40 Warhawk===&lt;br /&gt;
''jackmermod'' [http://www.flightgear.org/forums/viewtopic.php?f=4&amp;amp;t=8621 is developing a P-40 model]. It is already complete, and to be done are the animations and textures. Development of the P-40 Warhawk is coming along very quick, although a full release date is unknown.&lt;br /&gt;
&lt;br /&gt;
===Il-96-400/T===&lt;br /&gt;
The Il-96-400/T [http://www.flightgear.org/forums/viewtopic.php?f=4&amp;amp;t=7439 has been updated] to version 3, with more accurate model and a better panel, among other little fixes.&lt;br /&gt;
&lt;br /&gt;
===MiG-15bis===&lt;br /&gt;
''vitos'' improved the [[MiG-15|MiG-15bis]] model, and released it. More information at [http://www.flightgear.org/forums/viewtopic.php?f=4&amp;amp;t=7486 the forum].&lt;br /&gt;
&lt;br /&gt;
===MB-339 PAN===&lt;br /&gt;
The MB-339 PAN aircraft [http://www.flightgear.org/forums/viewtopic.php?f=4&amp;amp;t=8604 was updated by ''Albert''] to work with [[FlightGear]] version 2.0.0.&lt;br /&gt;
&lt;br /&gt;
===X-29A===&lt;br /&gt;
''Intel-Qube'' [http://www.flightgear.org/forums/viewtopic.php?f=4&amp;amp;t=8485 is currently revamping] the experimental X-29A aircraft. Here is a list of items that have been improved/created:&lt;br /&gt;
&lt;br /&gt;
* A new, more realistic [[FDM]] is on the way;&lt;br /&gt;
* Landing gear has been redone and is now much more aesthetically pleasing;&lt;br /&gt;
* New exhaust will now dilate based on throttle as it should;&lt;br /&gt;
* The cockpit panel has been entirely rebuilt, is far more detailed, and will likely have interactive switches in the final release;&lt;br /&gt;
* The model is more ''&amp;quot;anatomically correct&amp;quot;''.&lt;br /&gt;
&lt;br /&gt;
===San Antonio LPD17 and Hermann Marwede SAR-ship===&lt;br /&gt;
Browsing through the files, ''HHS'' [http://www.flightgear.org/forums/viewtopic.php?f=23&amp;amp;t=8351 found a rotorcraft carrier model] and made a scenario to run it, which will be available in July on [[Git]] together with the [http://www.flightgear.org/forums/viewtopic.php?f=23&amp;amp;t=8482#p83700 &amp;quot;Hermann Marwede&amp;quot;], another scenario especially for helipilots.&lt;br /&gt;
&lt;br /&gt;
==Scenery corner==&lt;br /&gt;
===Night-time London Gatwick===&lt;br /&gt;
[[File:Night-time London Gatwick.jpg|thumb|right|London Gatwick at dusk]]&lt;br /&gt;
London Gatwick (EGKK) is being further improved and is in the second phase of development - night textures. All the buildings and features are currently being modified by ''karla'' to give suitable lighting and make London Gatwick even more attractive to FlightGear commercial fliers. Landing or taking off from Gatwick at night should add much to your enjoyment of the game - and most likely extend the hours you enter in your pilot's log.&lt;br /&gt;
Further improvements and many minor changes are also being made to the existing models and daytime textures.&lt;br /&gt;
The link shows an image of the part completed airport at night http://www.donlavelle.net/flightgear/flightgear19.html.&lt;br /&gt;
&lt;br /&gt;
The new scenery is available through [[TerraSync]] and/or the [[Objects Database]].&lt;br /&gt;
&lt;br /&gt;
===Dubai airport gets busy===&lt;br /&gt;
With the terrain updates that were discussed in the [[FlightGear Newsletter March 2010#Dubai is coming up|March edition]] still in our minds, we now have another feature for the area; taking it yet another step closer to a bussy and realistic representation of the real emirate!&lt;br /&gt;
&lt;br /&gt;
After looking jealously at the greatly enhanced airport [[Amsterdam Airport Schiphol|Schiphol]] (EHAM) and the latest highlight Gatwick (EGKK) Mike ([[User:D-SKY1|D-SKY1]]) decided to create [[interactive traffic]] for [[Dubai International Airport]] (OMDB). Based on the existing airport layout in FlightGear the traffic pattern for taxiing between gates and runways has been created in [[TaxiDraw]] next to a timetable for runway usage. &lt;br /&gt;
&lt;br /&gt;
Although no model work is done (yet) a big bunch of scheduled flights is now added to this important hub in the middle east. As Dubai is home port for Emirates Airlines (UAE) only Emirates flights are included. Within the next weeks more scheduled flights for AI traffic at Dubai will be added. During the process of creating AI traffic he tried to stay as close as possible to the real life timetable for Dubai International Airport querying several sources for double checking.&lt;br /&gt;
&lt;br /&gt;
As Emirates Airlines (UAE) is one of the most important customers for the [[Airbus A380]] (UAE just ordered another 30 units of A380) the Emirates Airlines livery has been added to AI aircraft A380. Additionally some minor errors in several traffic files concerning changed [[ICAO]] codes for some airports have been removed.&lt;br /&gt;
&lt;br /&gt;
All changes are available via [[Git]]. Enjoy the enhancements; and always follow [[SID]]s and [[STAR]]s to prevent collisions.&lt;br /&gt;
&lt;br /&gt;
===Meadows Field and FGSignMaker===&lt;br /&gt;
[[File:KBFL_customscenery.jpg|thumb|right|KBFL Meadows Field]]&lt;br /&gt;
''skyop'' released his improvements to the Meadows Field (KBFL) scenery.  These include a new taxiway layout, more up-to-date runways, taxiway signs, various airport support buildings, some airport support equipment, some makeshift AI traffic, and placement of the international and domestic terminals.  Read [http://www.flightgear.org/forums/viewtopic.php?f=5&amp;amp;t=8466 this topic] for more information.&lt;br /&gt;
&lt;br /&gt;
[[File:FGSignMaker_overview.png|thumb|left|FGSignMaker 1.5.0]]&lt;br /&gt;
He is also writing [[FGSignMaker]], a tool to generate taxiway sign codes written in JavaScript. More information on taxiway signs can be found [[Signs|here]].&lt;br /&gt;
&lt;br /&gt;
===Landcover additions===&lt;br /&gt;
Connecticut, Oshkosh (Wisconsin, USA) and the Toronto Harbor have been added to the [http://mapserver.flightgear.org FlightGear mapserver]. They will be released to the public with the next scenery build, or alternatively the shapefiles can be downloaded and compiled by the user.&lt;br /&gt;
&lt;br /&gt;
This is in addition to the other numerous improvements to the land cover which are pending with the next scenery release, which includes (but is not limited to) France; Madrid, Spain; London, England; Bonn, Germany; Western Washington, USA; Northwest Oregon, USA; Phoenix, Arizona, USA; Washington, DC, and Baltimore, Maryland, USA; Rhode Island; Hawaii; and Long Island, New York, USA.&lt;br /&gt;
&lt;br /&gt;
Landcover development is ongoing.&lt;br /&gt;
&lt;br /&gt;
===LFLJ and EDDF===&lt;br /&gt;
After one year of having released these sceneries (LFLJ/EDDF), ''papillon81'' returned to make changes (some of them big) at them.&lt;br /&gt;
More information at the forum: [http://www.flightgear.org/forums/viewtopic.php?f=5&amp;amp;t=5238&amp;amp;st=0&amp;amp;sk=t&amp;amp;sd=a#p84745 EDDF], [http://www.flightgear.org/forums/viewtopic.php?f=5&amp;amp;t=1436&amp;amp;st=0&amp;amp;sk=t&amp;amp;sd=a&amp;amp;start=30#p84800 LFLJ].&lt;br /&gt;
&lt;br /&gt;
==Aircraft Review==&lt;br /&gt;
'''This month: B-25 Mitchell'''&lt;br /&gt;
&lt;br /&gt;
[[Image:B-25.jpg|thumb|270px|A B-25 in the air near KATL]]&lt;br /&gt;
The [[B-25]] served in almost every theater in World War II. From Europe to the Pacific, the Mitchell was there. One of the most famous missions accomplished by B-25s was the Doolittle Raid on Tokyo, when a group of 16 B-25s attacked the Japanese mainland, raising morale in the United States, and changing the priorities of the Imperial Japanese Navy, and possibly changing the direction of the war.&lt;br /&gt;
&lt;br /&gt;
The flightgear model looks good on the outside. The author has done a lot of work on the textures, and this is improved even more by some excellent liveries made by Gooneybird that have been added to the B-25 base package by the author. The landing gear, engines and canopies are all carefully modeled, too.&lt;br /&gt;
&lt;br /&gt;
The Cockpit is a little bit threadbare, with no chairs, two pilot figures, and only the standard six instruments, which, admittedly, is more than enough to fly with. The only other issue I could come up with was the lack of weapons, but that is only an aesthetic problem. The B-25 handles nicely both on the ground and in the air. I can't talk about accuracy, however, as I have never flown in a B-25, so I don't know how it 'feels' in the air. &lt;br /&gt;
&lt;br /&gt;
The Mitchell sounds great, too!&lt;br /&gt;
&lt;br /&gt;
''Review by Armchair Ace''&lt;br /&gt;
&lt;br /&gt;
==From the community==&lt;br /&gt;
===LinuxTAG===&lt;br /&gt;
Once again, a team of FlightGear enthusiasts operated a booth during the four days of this year's [http://www.linuxtag.org/ LinuxTAG], the most important place for Linux and open source software in Europe. Besides to it's main purpose of presenting FlightGear to a public audience, LinuxTag becomes more and more '''the''' place for a meeting of core FlightGear developers and users. A technical discussion between James, Alex and Matthias has the potential to become a ''FlightGear legend'' and will probably lead to a multithreaded processing within the simulator's core. Alex also held a public presentation about the integration of [http://www.linuxtag.org/2010/en/program/free-conference/all-events/details.html?talkid=329 &amp;quot;Android for pilots&amp;quot;] with fgfs. [http://www.linuxtag.org/2010/fileadmin/www.linuxtag.org/slides/Alex%20Perry%20-%20Android%20for%20Pilots%20-%20Integration%20with%20the%20FlightGear%20Flight%20Simulator.pdf]&lt;br /&gt;
&lt;br /&gt;
An exciting first contact was initiated between FlightGear team members and a hardware vendor resulting in an idea to operate a shared presentation of powerful hardware running a powerful flight simulator at the next year's LinuxTAG - to proof the claim &amp;quot;where .com meets .org&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===FlightGear on YouTube===&lt;br /&gt;
* ''edubletooth'' captured a [http://www.youtube.com/watch?v=EeQUfnHLs_Q bunch of landings] at the airports with the world's most famous approach: [[Princess Juliana International Airport|Princess Juliana]] in the Netherlands Antilles. Make sure to bend when a 777-200 or maybe even a mighty [[Boeing 747|747]] is passing just meters over your head!&lt;br /&gt;
* [http://www.youtube.com/watch?v=nzCcqtkTUT8 This excellent video] proves that ''Howto'' Oscar (we already mentioned him last month) does more than creating howtos. Together with Don's extremely detailed simulation of Gatwick Airport (EGKK), Oscar's video angles make this an interesting and pleasant video to watch.&lt;br /&gt;
&lt;br /&gt;
[http://www.youtube.com/watch?v=XkeApfVUnVk&amp;amp;feature=PlayList&amp;amp;p=3B31CCD15245D0AA&amp;amp;playnext_from=PL&amp;amp;index=0&amp;amp;playnext=1 Watch the FlightGear PlayList] for a collection of all (somewhat) quality FlightGear videos ever uploaded to YouTube.&lt;br /&gt;
&lt;br /&gt;
==And finally...==&lt;br /&gt;
===Your own Copilot===&lt;br /&gt;
How about having your own Copilot to help you fly your heavy metal? Imagine: You're at 3000 ft making a hand controlled descent to EGKK 26L in your [[Boeing 777-200|777-200ER]]: &amp;quot;flaps down&amp;quot;; check airspeed and altitude; you're now five miles out; &amp;quot;undercarriage down&amp;quot;; reduce speed a little more; &amp;quot;flaps down&amp;quot;; you seem to be slightly overspeed; &amp;quot;spoilers&amp;quot;; touch down &amp;quot;brakes&amp;quot; then &amp;quot;reverse thrust&amp;quot;; &amp;quot;flaps retract&amp;quot;; now take a look at the detailed scenery while taxiing to your stand; &amp;quot;view&amp;quot; and &amp;quot;zoom out&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Those using Windows can employ '''Shoot''' - a free user-editable voice command utility. This may be used concurrently with FlightGear to recognize spoken words or phrases and carry out keyboard actions - including sequential or Shift/Alt/Ctrl... keying. Unfortunately Linux users do not have access to such a powerful utility.&lt;br /&gt;
&lt;br /&gt;
[http://clans.gameclubcentral.com/shoot Download Shoot 1.6.4] and install it on your PC. You also need the Microsoft Speech API (SAPI) which is also free; the link is given on the Shoot website. The free Microsoft .NET should also be installed using the Shoot link.&lt;br /&gt;
&lt;br /&gt;
Shoot may be edited to obey verbal commands such as &amp;quot;start engines&amp;quot;, &amp;quot;maximum thrust&amp;quot;, &amp;quot;undercarriage up&amp;quot;, &amp;quot;flaps retract&amp;quot;, &amp;quot;trim nose down&amp;quot;, &amp;quot;deploy spoilers&amp;quot;, &amp;quot;reverse thrust&amp;quot;, &amp;quot;view exterior&amp;quot; - or whatever you choose. Try it and add more immersion to your flying.&lt;br /&gt;
&lt;br /&gt;
===Did you know?===&lt;br /&gt;
* ...that FlightGear is made of roughly 3,000,000 lines of code and would cost more than $42,000,000 if created from scratch? &amp;lt;ref&amp;gt;Metrics from [http://www.ohloh.net/p/flightgear/analyses/latest ohloh.net]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* ...that in version 2.0, fellow pilots' chat messages could be ignored on [[multiplayer]] by checking the ignore box in the pilot list? For upcoming releases, pilots' aircraft will also be able to be ignored. This is part of a strong offensive against &amp;quot;trolling&amp;quot; that disrupts MP flying.&lt;br /&gt;
* ...that the USS Nimitz [[Howto: Carrier|aircraft carrier]] has deck elevators that can be lowered/raised to go below deck? Toggle them up/down in your ATC Options menu under Carrier; Check-Apply raises them, unchecked-apply lowers them.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:FlightGear Newsletter|2010 06]]&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=File:Night-time_London_Gatwick.jpg&amp;diff=22639</id>
		<title>File:Night-time London Gatwick.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=File:Night-time_London_Gatwick.jpg&amp;diff=22639"/>
		<updated>2010-06-30T13:32:05Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: A Picture showing the fully Lit London Gatwick Airport at dusk.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A Picture showing the fully Lit London Gatwick Airport at dusk.&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=User:Fahim_Dalvi&amp;diff=22418</id>
		<title>User:Fahim Dalvi</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=User:Fahim_Dalvi&amp;diff=22418"/>
		<updated>2010-06-19T18:08:54Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{User&lt;br /&gt;
|name = Fahim Imaduddin Dalvi&lt;br /&gt;
|location = Doha,Qatar&lt;br /&gt;
|age = 17&lt;br /&gt;
|job = Student&lt;br /&gt;
|interests = Programming, Computers, FlightGear&lt;br /&gt;
|callsign = Fahim&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Spare-time FlightGear developer since late 2007.&lt;br /&gt;
I Have Been Working on the Following Projects:&lt;br /&gt;
* '''Aircraft'''&lt;br /&gt;
** Airbus A380&lt;br /&gt;
** LCA&lt;br /&gt;
&lt;br /&gt;
* '''Scenery'''&lt;br /&gt;
** Singapore &lt;br /&gt;
** Carribean&lt;br /&gt;
** Courchevel&lt;br /&gt;
** Monuments Around the world&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Modeling_-_Getting_Started&amp;diff=22401</id>
		<title>Modeling - Getting Started</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Modeling_-_Getting_Started&amp;diff=22401"/>
		<updated>2010-06-19T12:05:43Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Important Notice for Volunteers ==&lt;br /&gt;
&lt;br /&gt;
Developing scenery and models for use with scenery is an important and very visible contribution to Flightgear. New users of Flightgear often ask how they can contribute, and this is a good place to start. Try looking at some of the following:&lt;br /&gt;
&lt;br /&gt;
* We need people to go out and take good pictures of all the buildings at their local airports, build models, and create textures (that could be different people for each task).&lt;br /&gt;
* We need people to go over paper lists and airport diagrams for countries that don't publish air navigation data free online (i.e. almost everyone but the U.S.) and fill in the blanks in our navaid and airport databases.&lt;br /&gt;
* We need people to collect geodata to give us more accurate roads, rivers, etc., especially outside the U.S.&lt;br /&gt;
* We need people to start modelling identifiable human-made landmarks like bridges, stadiums, and major buildings. Around the San Francisco Bay area, bridges are especially important. Once you have identified some buildings or objects you would like to have (Aircraft carriers, fuel bowsers, cars, towers, ...) you will need to check out the tools for creating and placing these objects. &lt;br /&gt;
&lt;br /&gt;
It would be helpful if people would model the area they are interested in. Generally contributions are going to be from Flightgear users who find scenery lacking in some area and choose to improve it. You are encouraged to research your own area for airport, navaid and scenery information, to contribute the data or dive right in to airport and scenery design.&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
Generally one can start with a blueprint using their favorite imaging software like Gimp, Photoshop, or Paint shop pro then separate various views (front, back, etc...) into greyscale jpg files.  Then import them as a background for easy modelling in your favorite 3D modelling software program.  &lt;br /&gt;
&lt;br /&gt;
===3D Software===&lt;br /&gt;
To begin, you will need to create models in a 3d modeling appliction. Three popular ones are AC3D, Blender and SketchUp. FlightGear can display models in several formats, any format supported by [[PLIB]] is acceptable. AC3D is the most popular format for including scenery in Flightgear. Most or all of the default scenery bundled with a Flightgear release are in AC3D format.&lt;br /&gt;
&lt;br /&gt;
If you do not have AC3D, Blender offers many import and export tools. See the Blender website for further information.&lt;br /&gt;
&lt;br /&gt;
==== [[AC3D]] ====&lt;br /&gt;
Flightgear uses the ac3d model format for objects such as buildings. To create a model, you will need one of two modelling packages. Either go directly to [http://www.ac3d.org AC3D] itself, or use [http://www.blender.org Blender] and then convert via a Python script (see below). AC3D seems to be a much easier program to learn, while still being very powerful. The downside is that you have to buy a licence to get more than 14 days use.&lt;br /&gt;
&lt;br /&gt;
* [http://wine.techlab.info/AC3D_Tutorials/ AC3D Modeling Tutorials]&lt;br /&gt;
&lt;br /&gt;
==== [[Blender]] ====&lt;br /&gt;
[http://www.blender.org Blender] is more difficult to learn to use, since it is not quite as intuitive and is far more powerful. However it is GPL'd, and there are lots of tutorials to help with learning.&lt;br /&gt;
&lt;br /&gt;
* [http://mediawiki.blender.org/index.php/Main_Page Blender Manual]&lt;br /&gt;
* [http://blenderartists.org/forum/ Excellent forum for discussing Blender issues]&lt;br /&gt;
&lt;br /&gt;
==== SketchUp ====&lt;br /&gt;
{{Main article|Modeling - SketchUp}}&lt;br /&gt;
&lt;br /&gt;
SketchUp (http://sketchup.google.com) is the easiest to use of these three programms. But the results are very nice and professional. I recommend SketchUp for users who are not really good at difficult computer programms.&lt;br /&gt;
&lt;br /&gt;
==== [[Wings 3D]] ====&lt;br /&gt;
{{Main article|Modeling - Wings 3D}}&lt;br /&gt;
&lt;br /&gt;
Wings 3D (http://www.wings3d.com/) is another 3D modeling program, and is free open source software.&lt;br /&gt;
&lt;br /&gt;
=== Placing Objects on Scenery ===&lt;br /&gt;
There are several ways of doing this. The most direct way is to simply [[Adding shared models manually|add the required data by hand]]. &lt;br /&gt;
&lt;br /&gt;
[[Image:Placing objects with UFO html 439816e9.jpg|thumb|270px|The model adjustment dialog of the [[UFO]]]]&lt;br /&gt;
The easiest way is to use the [[Placing 3D Objects with the UFO|UFO's object placement feature]] (in version 9.10 or higher). When operating the UFO, left-clicking the mouse anywhere on the ground will place an object, and pressing space-up or down will cycle through the models. Coordinates of placed models can then be dumped to the terminal or written to a configuration file. &lt;br /&gt;
&lt;br /&gt;
Another method is to use [[FlightGear Scenery Designer]] ([http://fgsd.sourceforge.net/ Project Site]). After setting the paths to your scenery data, simply load up the area where you want to place the object. Load your .ac format model, and right click on the desired spot to place your model there. Export the modifed scenery to save it, rerun Flightgear and your model should be there.&lt;br /&gt;
&lt;br /&gt;
=== Finding, Creating, or Using Textures ===&lt;br /&gt;
Models in Flightgear use textures with SGI rgb format (.rgb extension).&lt;br /&gt;
You can open .rgb files in Windows and Mac OS using [[THE GIMP]], Corel Paintshop Pro &lt;br /&gt;
and XnView.  PNG format is now supported in the newest versions of flightgear 1.9.1.  PNG models are not backward compatible, you may wish to use rgb format so people with older versions can enjoy your model as well.  &lt;br /&gt;
&lt;br /&gt;
If you want to use Adobe Photoshop, you can open and save .rgb files in Adobe Photoshop using a free plugin(for Windows as well as Mac OS) : [http://www.telegraphics.com.au/sw/#sgiformat SGI File Format Plugin for Photoshop].&lt;br /&gt;
&lt;br /&gt;
Once you have made your model building, you will want to apply some textures to it, so it looks as realistic as possible. This is possibly one of the hardest areas, as a good model with bad textures will still look bad. Since Flightgear and the scenery data are all released under the GPL, any textures that you use must also be able to be released under this licence. This will probably prevent you from just using anything you come across on the net, unless it is already under the GPL. It is quite common for people to state that their pictures or textures are free. Since Flightgear can be sold for profit, and is released on Linux distributions that are sold, check that there are no clauses stating that the item can not be sold or used for commercial use.&lt;br /&gt;
&lt;br /&gt;
=== Generation of textured light objects in Blender ===&lt;br /&gt;
&amp;lt;table style=&amp;quot;margin-top:0.1em; margin-bottom:0.1em; margin-left:2em; padding:2px; font-size:95%; text-align:left; background: transparent;&amp;quot;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[Image:1rightarrow.png|15px]] ''See  http://members.aon.at/mfranz/flightgear/blender-textured-lights.html  for the main article about this subject.''&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Problems and Solutions ==&lt;br /&gt;
*[[3D Model Rotates Around Nose]]&lt;br /&gt;
*[[Configuring Views in FlightGear]]&lt;br /&gt;
*[[Howto: Decrease the number of faces|Decrease the number of faces]]&lt;br /&gt;
&lt;br /&gt;
== Improving Models for Best FlightGear Performance ==&lt;br /&gt;
[[Image:Motor.jpg|thumb|270px|Using Multiple Models with varied detailing]]&lt;br /&gt;
*Use a single mesh so far as is possible, for example, combine all the parts of a building into one Object.&lt;br /&gt;
*Use Materials on Objects instead of textures where possible.&lt;br /&gt;
*Use a single texture.&lt;br /&gt;
*Textures, transparency and .xml included sub-models : The things that kill frame rate in FlightGear. Try to avoid them.&lt;br /&gt;
*If a model has to be detailed to a High Degree, use multiple Objects with different levels of detailing, and switch between them based on LOD.&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
*[[Aircraft Information Resources‎ ]]&lt;br /&gt;
*[[Modeling Resources]]&lt;br /&gt;
&lt;br /&gt;
{{3d}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Modeling]]&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=File:Motor.jpg&amp;diff=22400</id>
		<title>File:Motor.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=File:Motor.jpg&amp;diff=22400"/>
		<updated>2010-06-19T11:55:51Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: Picture Showing use of a High Poly and a Low Poly model for improving Performance in FlightGear.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Picture Showing use of a High Poly and a Low Poly model for improving Performance in FlightGear.&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Modeling_-_Getting_Started&amp;diff=22398</id>
		<title>Modeling - Getting Started</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Modeling_-_Getting_Started&amp;diff=22398"/>
		<updated>2010-06-19T09:58:56Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Important Notice for Volunteers ==&lt;br /&gt;
&lt;br /&gt;
Developing scenery and models for use with scenery is an important and very visible contribution to Flightgear. New users of Flightgear often ask how they can contribute, and this is a good place to start. Try looking at some of the following:&lt;br /&gt;
&lt;br /&gt;
* We need people to go out and take good pictures of all the buildings at their local airports, build models, and create textures (that could be different people for each task).&lt;br /&gt;
* We need people to go over paper lists and airport diagrams for countries that don't publish air navigation data free online (i.e. almost everyone but the U.S.) and fill in the blanks in our navaid and airport databases.&lt;br /&gt;
* We need people to collect geodata to give us more accurate roads, rivers, etc., especially outside the U.S.&lt;br /&gt;
* We need people to start modelling identifiable human-made landmarks like bridges, stadiums, and major buildings. Around the San Francisco Bay area, bridges are especially important. Once you have identified some buildings or objects you would like to have (Aircraft carriers, fuel bowsers, cars, towers, ...) you will need to check out the tools for creating and placing these objects. &lt;br /&gt;
&lt;br /&gt;
It would be helpful if people would model the area they are interested in. Generally contributions are going to be from Flightgear users who find scenery lacking in some area and choose to improve it. You are encouraged to research your own area for airport, navaid and scenery information, to contribute the data or dive right in to airport and scenery design.&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
Generally one can start with a blueprint using their favorite imaging software like Gimp, Photoshop, or Paint shop pro then separate various views (front, back, etc...) into greyscale jpg files.  Then import them as a background for easy modelling in your favorite 3D modelling software program.  &lt;br /&gt;
&lt;br /&gt;
===3D Software===&lt;br /&gt;
To begin, you will need to create models in a 3d modeling appliction. Three popular ones are AC3D, Blender and SketchUp. FlightGear can display models in several formats, any format supported by [[PLIB]] is acceptable. AC3D is the most popular format for including scenery in Flightgear. Most or all of the default scenery bundled with a Flightgear release are in AC3D format.&lt;br /&gt;
&lt;br /&gt;
If you do not have AC3D, Blender offers many import and export tools. See the Blender website for further information.&lt;br /&gt;
&lt;br /&gt;
==== [[AC3D]] ====&lt;br /&gt;
Flightgear uses the ac3d model format for objects such as buildings. To create a model, you will need one of two modelling packages. Either go directly to [http://www.ac3d.org AC3D] itself, or use [http://www.blender.org Blender] and then convert via a Python script (see below). AC3D seems to be a much easier program to learn, while still being very powerful. The downside is that you have to buy a licence to get more than 14 days use.&lt;br /&gt;
&lt;br /&gt;
* [http://wine.techlab.info/AC3D_Tutorials/ AC3D Modeling Tutorials]&lt;br /&gt;
&lt;br /&gt;
==== [[Blender]] ====&lt;br /&gt;
[http://www.blender.org Blender] is more difficult to learn to use, since it is not quite as intuitive and is far more powerful. However it is GPL'd, and there are lots of tutorials to help with learning.&lt;br /&gt;
&lt;br /&gt;
* [http://mediawiki.blender.org/index.php/Main_Page Blender Manual]&lt;br /&gt;
* [http://blenderartists.org/forum/ Excellent forum for discussing Blender issues]&lt;br /&gt;
&lt;br /&gt;
==== SketchUp ====&lt;br /&gt;
{{Main article|Modeling - SketchUp}}&lt;br /&gt;
&lt;br /&gt;
SketchUp (http://sketchup.google.com) is the easiest to use of these three programms. But the results are very nice and professional. I recommend SketchUp for users who are not really good at difficult computer programms.&lt;br /&gt;
&lt;br /&gt;
==== [[Wings 3D]] ====&lt;br /&gt;
{{Main article|Modeling - Wings 3D}}&lt;br /&gt;
&lt;br /&gt;
Wings 3D (http://www.wings3d.com/) is another 3D modeling program, and is free open source software.&lt;br /&gt;
&lt;br /&gt;
=== Placing Objects on Scenery ===&lt;br /&gt;
There are several ways of doing this. The most direct way is to simply [[Adding shared models manually|add the required data by hand]]. &lt;br /&gt;
&lt;br /&gt;
[[Image:Placing objects with UFO html 439816e9.jpg|thumb|270px|The model adjustment dialog of the [[UFO]]]]&lt;br /&gt;
The easiest way is to use the [[Placing 3D Objects with the UFO|UFO's object placement feature]] (in version 9.10 or higher). When operating the UFO, left-clicking the mouse anywhere on the ground will place an object, and pressing space-up or down will cycle through the models. Coordinates of placed models can then be dumped to the terminal or written to a configuration file. &lt;br /&gt;
&lt;br /&gt;
Another method is to use [[FlightGear Scenery Designer]] ([http://fgsd.sourceforge.net/ Project Site]). After setting the paths to your scenery data, simply load up the area where you want to place the object. Load your .ac format model, and right click on the desired spot to place your model there. Export the modifed scenery to save it, rerun Flightgear and your model should be there.&lt;br /&gt;
&lt;br /&gt;
=== Finding, Creating, or Using Textures ===&lt;br /&gt;
Models in Flightgear use textures with SGI rgb format (.rgb extension).&lt;br /&gt;
You can open .rgb files in Windows and Mac OS using [[THE GIMP]], Corel Paintshop Pro &lt;br /&gt;
and XnView.  PNG format is now supported in the newest versions of flightgear 1.9.1.  PNG models are not backward compatible, you may wish to use rgb format so people with older versions can enjoy your model as well.  &lt;br /&gt;
&lt;br /&gt;
If you want to use Adobe Photoshop, you can open and save .rgb files in Adobe Photoshop using a free plugin(for Windows as well as Mac OS) : [http://www.telegraphics.com.au/sw/#sgiformat SGI File Format Plugin for Photoshop].&lt;br /&gt;
&lt;br /&gt;
Once you have made your model building, you will want to apply some textures to it, so it looks as realistic as possible. This is possibly one of the hardest areas, as a good model with bad textures will still look bad. Since Flightgear and the scenery data are all released under the GPL, any textures that you use must also be able to be released under this licence. This will probably prevent you from just using anything you come across on the net, unless it is already under the GPL. It is quite common for people to state that their pictures or textures are free. Since Flightgear can be sold for profit, and is released on Linux distributions that are sold, check that there are no clauses stating that the item can not be sold or used for commercial use.&lt;br /&gt;
&lt;br /&gt;
=== Generation of textured light objects in Blender ===&lt;br /&gt;
&amp;lt;table style=&amp;quot;margin-top:0.1em; margin-bottom:0.1em; margin-left:2em; padding:2px; font-size:95%; text-align:left; background: transparent;&amp;quot;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[Image:1rightarrow.png|15px]] ''See  http://members.aon.at/mfranz/flightgear/blender-textured-lights.html  for the main article about this subject.''&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Problems and Solutions ==&lt;br /&gt;
*[[3D Model Rotates Around Nose]]&lt;br /&gt;
*[[Configuring Views in FlightGear]]&lt;br /&gt;
*[[Howto: Decrease the number of faces|Decrease the number of faces]]&lt;br /&gt;
&lt;br /&gt;
== Improving Models for Best FlightGear Performance ==&lt;br /&gt;
*Use a single mesh so far as is possible, for example, combine all the parts of a building into one Object.&lt;br /&gt;
*Use a single texture.&lt;br /&gt;
*Use Materials on Objects instead of textures where possible.&lt;br /&gt;
*Textures, transparency and .xml included sub-models : The things that kill frame rate in FlightGear. Try to avoid them.&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
*[[Aircraft Information Resources‎ ]]&lt;br /&gt;
*[[Modeling Resources]]&lt;br /&gt;
&lt;br /&gt;
{{3d}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Modeling]]&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Building_FlightGear_-_Debian&amp;diff=22152</id>
		<title>Building FlightGear - Debian</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Building_FlightGear_-_Debian&amp;diff=22152"/>
		<updated>2010-06-10T11:22:40Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: /* FlightGear data */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= HowTo build on Debian =&lt;br /&gt;
&lt;br /&gt;
HowTo build FlightGear 2.0.0 or CVS on GNU/Linux Debian '''Stable''' 5.x (Lenny).&lt;br /&gt;
&lt;br /&gt;
This HowTo may also work with '''Testing'''/'''Unstable''' except that some things are easier because of more up to date packages. So, before fetching something check the version of the available -dev package for it.&lt;br /&gt;
&lt;br /&gt;
It even *should* work with '''Etch''', but I am not certain about some dependencies. [http://wiki.flightgear.org/index.php?title=Talk:Building_Flightgear_-_Debian&amp;amp;action=edit Reports] are welcome.&lt;br /&gt;
&lt;br /&gt;
If you don't want to make your hands dirty, have a look at [[Scripted_Compilation_on_Linux_Debian/Ubuntu]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Requirements and Preparations ==&lt;br /&gt;
You need an OpenGL capable graphics including a proper installed driver.&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also a bunch of packages (and some of their dependencies) are required:&lt;br /&gt;
*gcc, g++, make, automake1.9, pkg-config&lt;br /&gt;
*mawk (or gawk)&lt;br /&gt;
*cmake   (min. version 2.6.0-5,  for Etch available on backports.org!)&lt;br /&gt;
*cvs, subversion, wget&lt;br /&gt;
&amp;lt;!--*libsvn-dev, for [[Terrasync]]s proper operation.--&amp;gt;&lt;br /&gt;
*freeglut3-dev, libgl1-mesa-dev, libxrandr-dev&lt;br /&gt;
*libxi-dev, libxmu-dev, libxext-dev&lt;br /&gt;
*libopenal-dev (see [[#libopenal|libopenal]]), libalut-dev&lt;br /&gt;
*libjpeg62-dev, libtiff4-dev, libpng12-dev&lt;br /&gt;
*libboost1.37-dev  (Not available for Lenny atm, see [[#Boost Library|Boost Library]] below.)&lt;br /&gt;
&lt;br /&gt;
During installation packages ''simgear-dev'' and ''openscenegraph-dev'' *must not* be installed. They can safely be re-installed after compilation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Build and install ==&lt;br /&gt;
Because we are going to install versions different to the ones in the repositries it is recommended to install FG-2.0.0 and/or CVS in a place independent to the base system such as /usr/local/FG-2.0.0, /opt/FG-2.0.0 or in a subdirectory of your $HOME. I suggest to make it writeable by the user that there is no need to become root for the &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt; commands. I'll use &amp;lt;code&amp;gt;$prefix&amp;lt;/code&amp;gt; as a placeholder for this directory. &amp;lt;BR&amp;gt;&lt;br /&gt;
Another one will be &amp;lt;code&amp;gt;$srcdir&amp;lt;/code&amp;gt;, it stands for the absolute path to the directory which contains the folders of the various source codes. So in the following instructions one have to replace these by the local paths or even &amp;lt;code&amp;gt;export&amp;lt;/code&amp;gt; them during the process.&lt;br /&gt;
&lt;br /&gt;
Subsequent the instructions to fetch the sources and the data needed by FlightGear and the commands to build/install each source.&lt;br /&gt;
&lt;br /&gt;
Have in mind that the data is relatively huge (CVS about 2 GB and 2.0.0 300 MB) so, to save some time, it is a good idea to fetch it while building the sources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== libopenal ===&lt;br /&gt;
The libopenal-dev package in Lenny/Etch is too old for [[fgcom]]. For FlightGear it does work but not all features (like Doppler) are available, so installing an up to date version is recommended anyway.&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 wget http://kcat.strangesoft.net/openal-releases/openal-soft-1.11.753.tar.bz2&lt;br /&gt;
 tar xjf openal-soft-1.11.753.tar.bz2&lt;br /&gt;
 cd openal-soft-1.11.753/build&lt;br /&gt;
 cmake  -D CMAKE_INSTALL_PREFIX:PATH=&amp;quot;$prefix&amp;quot; ..&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
=== plib ===&lt;br /&gt;
Latest SVN is [http://www.mail-archive.com/flightgear-devel@lists.sourceforge.net/msg20793.html recommended], yet package plib1.8.5-dev for Testing/Unstable does work as well.&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 svn co https://plib.svn.sourceforge.net/svnroot/plib/trunk plib&lt;br /&gt;
 cd plib&lt;br /&gt;
 sed s/PLIB_TINY_VERSION\ \ 5/PLIB_TINY_VERSION\ \ 6/ -i src/util/ul.h&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
 ./configure --prefix=$prefix&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Boost Library ===&lt;br /&gt;
Version 1.37 is needed. At least for Lenny/Etch this means getting the sources because this is not available atm on backports.org. Testing/Unstable users may have more luck and a package is available, libboost-1.37-dev or newer.&lt;br /&gt;
&lt;br /&gt;
To build SimGear, FlightGear, fgrun and fgcom some boostlib header files are required, no need to compile and install it. If you have installed a libboost1.37-dev (or higher) package on your system you don't have to bother at all with it. If not, you have to tell each ./configure where the header files are. To do so, add the option &amp;lt;code&amp;gt;CPPFLAGS=-I$prefix/include&amp;lt;/code&amp;gt; to the SimGear, FlightGear and fgrun &amp;lt;code&amp;gt;./configure&amp;lt;/code&amp;gt; commands. We copy the header files to $prefix/include because fgcom will need them there.&lt;br /&gt;
&lt;br /&gt;
Get the newest version tar ball from http://sourceforge.net/projects/boost/files/boost/, extract it into &amp;lt;code&amp;gt;$srcdir&amp;lt;/code&amp;gt; then:&lt;br /&gt;
 cp -R $srcdir/boost-[version]/boost/ $prefix/include/&lt;br /&gt;
&lt;br /&gt;
=== OpenSceneGraph ===&lt;br /&gt;
For FlightGear 2.0.0 one may use the latest (or at least 2.9.6) developer release from http://www.openscenegraph.org/projects/osg/wiki/Downloads/DeveloperReleases and extract it into &amp;lt;code&amp;gt;$srcdir&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Mostly this is ok for FlightGear CVS as well as it is stable. However, sometimes the release is not fresh enough and one have to get the latest developments via SVN:&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 svn co http://www.openscenegraph.org/svn/osg/OpenSceneGraph/trunk OpenSceneGraph&lt;br /&gt;
&lt;br /&gt;
cmake demands a build directory separate to its source directory. So &amp;lt;code&amp;gt;mkdir&amp;lt;/code&amp;gt; one and &amp;lt;code&amp;gt;cd&amp;lt;/code&amp;gt; into it.&lt;br /&gt;
 cmake -D CMAKE_BUILD_TYPE=&amp;quot;Release&amp;quot; -D CMAKE_CXX_FLAGS=&amp;quot;-O3&amp;quot; -D CMAKE_C_FLAGS=&amp;quot;-O3&amp;quot; \&lt;br /&gt;
    -D CMAKE_INSTALL_PREFIX:PATH=&amp;quot;$prefix&amp;quot; $srcdir/OpenSceneGraph[-version]&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SimGear ===&lt;br /&gt;
2.0.0:&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 wget http://mirrors.ibiblio.org/pub/mirrors/simgear/ftp/Source/SimGear-2.0.0.tar.gz&lt;br /&gt;
 tar xzf SimGear-2.0.0.tar.gz&lt;br /&gt;
 cd SimGear-2.0.0&lt;br /&gt;
&lt;br /&gt;
CVS:&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 git clone git://gitorious.org/fg/simgear.git simgear&lt;br /&gt;
 cd simgear&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
&lt;br /&gt;
2.0.0 and CVS:&lt;br /&gt;
 ./configure --prefix=$prefix [CPPFLAGS=-I$prefix/include LDFLAGS=&amp;quot;-L$prefix/lib -L$prefix/lib64&amp;quot;]&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
=== FlightGear source ===&lt;br /&gt;
2.0.0:&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 wget http://mirrors.ibiblio.org/pub/mirrors/flightgear/ftp/Source/FlightGear-2.0.0.tar.gz&lt;br /&gt;
 tar xzf FlightGear-2.0.0.tar.gz&lt;br /&gt;
 cd FlightGear-2.0.0&lt;br /&gt;
&lt;br /&gt;
CVS:&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 git clone git://gitorious.org/fg/flightgear.git flightgear&lt;br /&gt;
 cd flightgear&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
&lt;br /&gt;
2.0.0 and CVS:&lt;br /&gt;
 ./configure --prefix=$prefix [CPPFLAGS=-I$prefix/include/ LDFLAGS=&amp;quot;-L$prefix/lib -L$prefix/lib64&amp;quot;]&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
=== FlightGear data ===&lt;br /&gt;
2.0.0:&lt;br /&gt;
 cd $prefix&lt;br /&gt;
 wget http://mirrors.ibiblio.org/pub/mirrors/flightgear/ftp/Shared/FlightGear-data-2.0.0.tar.bz2&lt;br /&gt;
 tar xjf FlightGear-data-2.0.0.tar.bz2&lt;br /&gt;
&lt;br /&gt;
GIT:&lt;br /&gt;
 cd $prefix&lt;br /&gt;
 git clone git://gitorious.org/fg/fgdata.git data&lt;br /&gt;
&lt;br /&gt;
Or to Fetch A bundle that can be Downloaded in parts :&lt;br /&gt;
 cd $prefix&lt;br /&gt;
 wget http://peter-server.homelinux.net/fgdata/fgdata/fgdata.bundle&lt;br /&gt;
&lt;br /&gt;
=== Trial run ===&lt;br /&gt;
When all the builds are done and the data download has finished it is time for a test run:&lt;br /&gt;
 export LD_LIBRARY_PATH=$prefix/lib/:$LD_LIBRARY_PATH&lt;br /&gt;
 $prefix/bin/fgfs --fg-root=$prefix/data&lt;br /&gt;
&lt;br /&gt;
For the future, if you want to start FlightGear from command line have a look at [[fgfsrc]], if you prefer a graphical user interface continue with [[#fgrun|compiling fgrun]]. Have in mind that fgfs need to find our self compiled libraries and therefore we have to tell the linker (ld) where to find them. That is what the first line here does.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Optional Software ==&lt;br /&gt;
&lt;br /&gt;
=== fgrun ===&lt;br /&gt;
To build [[fgrun]] two more package is required:&lt;br /&gt;
*libfltk1.1-dev fluid&lt;br /&gt;
&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 svn co http://fgrun.svn.sourceforge.net/svnroot/fgrun/trunk fgrun&lt;br /&gt;
 cd fgrun&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
 ./configure --prefix=$prefix  [CPPFLAGS=-I$prefix/include/]&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== fgcom ===&lt;br /&gt;
For [[fgcom]] unfortunately there is one more dependency which cannot be solved with packages on Lenny/Etch, see [[#libopenal|libopenal]].&lt;br /&gt;
&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 svn co https://appfgcom.svn.sourceforge.net/svnroot/fgcom/trunk fgcom&lt;br /&gt;
 cd fgcom/src&lt;br /&gt;
 make INSTALL_BIN=$prefix/bin INSTALL_DIR=$prefix/fgcom \&lt;br /&gt;
    PLIB_PREFIX=$prefix OPENAL_PREFIX=$prefix install&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--== Keeping the CVS version up to date ==&lt;br /&gt;
&lt;br /&gt;
...to be continued. ;-)&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Building}}&lt;br /&gt;
&lt;br /&gt;
[[de:FlightGear_bauen_-_Debian]]&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Portal:Developer/Aircraft&amp;diff=21995</id>
		<title>Portal:Developer/Aircraft</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Portal:Developer/Aircraft&amp;diff=21995"/>
		<updated>2010-06-05T16:04:55Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{PortalMenu}}&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;border-spacing:8px; margin:0px -8px; width:100%;&amp;quot;&lt;br /&gt;
|class=&amp;quot;MainPageBG&amp;quot; style=&amp;quot;width:100%; border:1px solid #d9e2e2; background:#efefef; vertical-align:top; color:#000;&amp;quot;|&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;5&amp;quot; style=&amp;quot;vertical-align:top; background:#efefef;&amp;quot;&lt;br /&gt;
! &amp;lt;h2 style=&amp;quot;margin:0; background:#0f7a71; font-size:120%; font-weight:bold; border:1px solid #d9e2e2; text-align:left; color:white; padding:0.2em 0.4em;&amp;quot;&amp;gt;The Aircraft Portal&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:#000;&amp;quot;| &lt;br /&gt;
This portal is for developers of [[FlightGear]] [[aircraft]]. And tends to be a home for aircraft related articles. See the [[Portal:Developer|developers portal]] for more articles about development &lt;br /&gt;
in general&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|style=&amp;quot;border-spacing:8px; margin:0px -8px;&amp;quot;&lt;br /&gt;
|class=&amp;quot;MainPageBG&amp;quot; style=&amp;quot;width:25%; border:1px solid #d9e2e2; background:#efefef; vertical-align:top; color:#000;&amp;quot;|&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;5&amp;quot; style=&amp;quot;vertical-align:top; background:#efefef;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! &amp;lt;h2 style=&amp;quot;margin:0; background:#0f7a71; font-size:120%; font-weight:bold; border:1px solid #d9e2e2; text-align:left; color:white; padding:0.2em 0.4em;&amp;quot;&amp;gt;Livery&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:#000;&amp;quot;| &lt;br /&gt;
* [[ Howto: Edit a livery|Edit a livery ]]&lt;br /&gt;
* [[ Livery over MP]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;5&amp;quot; style=&amp;quot;vertical-align:top; background:#efefef;&amp;quot;&lt;br /&gt;
! &amp;lt;h2 style=&amp;quot;margin:0; background:#0f7a71; font-size:120%; font-weight:bold; border:1px solid #d9e2e2; text-align:left; color:white; padding:0.2em 0.4em;&amp;quot;&amp;gt;FDM&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:#000;&amp;quot;|&lt;br /&gt;
* [[Howto: Add thrust reversal|Add thrust reversal]]&lt;br /&gt;
* [[Flight Dynamics Model]]&lt;br /&gt;
* [[JSBSim Commander]]&lt;br /&gt;
* [[JSBSim]] &amp;amp;bull; [[UIUC]] &amp;amp;bull; [[YASim]]&lt;br /&gt;
* [[Howto: Name fuel tanks|Name fuel tanks]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;5&amp;quot; style=&amp;quot;vertical-align:top; background:#efefef;&amp;quot;&lt;br /&gt;
! &amp;lt;h2 style=&amp;quot;margin:0; background:#0f7a71; font-size:120%; font-weight:bold; border:1px solid #d9e2e2; text-align:left; color:white; padding:0.2em 0.4em;&amp;quot;&amp;gt;Autopilot&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:#000;&amp;quot;|&lt;br /&gt;
* [[Autopilot Configuration Reference]]&lt;br /&gt;
* [[Howto: Design an autopilot]]&lt;br /&gt;
* [http://www.flightgear.org/Docs/XMLAutopilot/ Customizing the XML Autopilot]&lt;br /&gt;
* [[Autopilot Tuning Resources]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;5&amp;quot; style=&amp;quot;vertical-align:top; background:#efefef;&amp;quot;&lt;br /&gt;
! &amp;lt;h2 style=&amp;quot;margin:0; background:#0f7a71; font-size:120%; font-weight:bold; border:1px solid #d9e2e2; text-align:left; color:white; padding:0.2em 0.4em;&amp;quot;&amp;gt;Route Manager&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:#000;&amp;quot;|&lt;br /&gt;
* [[Route Manager]]&lt;br /&gt;
* [[Route manager internals]]&lt;br /&gt;
* [[GPS]]&lt;br /&gt;
* [[GPS internals]]&lt;br /&gt;
* [[Inertial Navigation System]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|class=&amp;quot;MainPageBG&amp;quot; style=&amp;quot;width:25%; border:1px solid #d9e2e2; background:#efefef; vertical-align:top&amp;quot;|&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;5&amp;quot; style=&amp;quot;vertical-align:top; background:#efefef;&amp;quot;&lt;br /&gt;
! &amp;lt;h2 style=&amp;quot;margin:0; background:#0f7a71; font-size:120%; font-weight:bold; border:1px solid #d9e2e2; text-align:left; color:white; padding:0.2em 0.4em;&amp;quot;&amp;gt;General&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:#000;&amp;quot;|&lt;br /&gt;
* [http://wiki.flightgear.org/index.php/Category:Aircraft_TODO Aircraft Todo]&lt;br /&gt;
* [[Aircraft Information Resources]]&lt;br /&gt;
* [[Aircraft Manuals]]&lt;br /&gt;
* [[Avionics Development Resources]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;5&amp;quot; style=&amp;quot;vertical-align:top; background:#efefef;&amp;quot;&lt;br /&gt;
! &amp;lt;h2 style=&amp;quot;margin:0; background:#0f7a71; font-size:120%; font-weight:bold; border:1px solid #d9e2e2; text-align:left; color:white; padding:0.2em 0.4em;&amp;quot;&amp;gt;Nasal Scripting&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:#000;&amp;quot;|&lt;br /&gt;
* [[Nasal scripting language]]&lt;br /&gt;
* [[Writing simple scripts in &amp;quot;nasal&amp;quot;]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|class=&amp;quot;MainPageBG&amp;quot; style=&amp;quot;width:25%; border:1px solid #d9e2e2; background:#efefef; vertical-align:top&amp;quot;|&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;5&amp;quot; style=&amp;quot;vertical-align:top; background:#efefef;&amp;quot;&lt;br /&gt;
! &amp;lt;h2 style=&amp;quot;margin:0; background:#0f7a71; font-size:120%; font-weight:bold; border:1px solid #d9e2e2; text-align:left; color:white; padding:0.2em 0.4em;&amp;quot;&amp;gt;Modeling&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:#000;&amp;quot;|&lt;br /&gt;
* [[ Howto: Shader Programming in FlightGear]]&lt;br /&gt;
* [[Howto: 3D Aircraft Models|3D Aircraft Models]]&lt;br /&gt;
* [[3D Model Rotates Around Nose]]&lt;br /&gt;
* [[Howto: Add aircraft lights|Add aircraft lights]]&lt;br /&gt;
* [[Howto: Decrease the number of faces|Decrease the number of faces]]&lt;br /&gt;
* [[Model Import and Export]]&lt;br /&gt;
* [[Modeling - Getting Started]]&lt;br /&gt;
* [[:Category:Modeling|Modeling Category]]&lt;br /&gt;
* [[Modeling Resources]] &lt;br /&gt;
* [[Normals and Transparency Tutorial]]&lt;br /&gt;
* [http://wiki.flightgear.org/index.php/Copyright_Inquiry Copyright Inquiry] &lt;br /&gt;
 &lt;br /&gt;
* [[AC3D]] &amp;amp;bull; [[Blender]] &amp;amp;bull; [[SketchUp]] &amp;amp;bull; [[Wings 3D]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|class=&amp;quot;MainPageBG&amp;quot; style=&amp;quot;width:25%; border:1px solid #d9e2e2; background:#efefef; vertical-align:top&amp;quot;|&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;5&amp;quot; style=&amp;quot;vertical-align:top; background:#efefef;&amp;quot;&lt;br /&gt;
! &amp;lt;h2 style=&amp;quot;margin:0; background:#0f7a71; font-size:120%; font-weight:bold; border:1px solid #d9e2e2; text-align:left; color:white; padding:0.2em 0.4em;&amp;quot;&amp;gt;Howtos&amp;lt;/h2&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:#000;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
* [[Howto: Make an aircraft|Make an aircraft]]&lt;br /&gt;
* [[Howto: Make a helicopter|Make a helicopter]]&lt;br /&gt;
* [[Howto: Use The Normal Map Effect in Aircraft]]&lt;br /&gt;
* [[Howto: Configure views in FlightGear|Configure views in FlightGear]]&lt;br /&gt;
* [[Creating instruments for FG|Create instruments]]&lt;br /&gt;
* [[Tutorials|Create interactive tutorials]]&lt;br /&gt;
* [[Howto: Define speed limits|Define speed limits]]&lt;br /&gt;
* [[Howto: Implement wing flex|Implement wing flex]]&lt;br /&gt;
* [[Howto: Implement pushback|Implement pushback]]&lt;br /&gt;
* [[Howto: Implent Generic tyre smoke|Generic tyre smoke]]&lt;br /&gt;
&lt;br /&gt;
* [[Walk View‎]]&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
__NOEDITSECTION__&lt;br /&gt;
&lt;br /&gt;
[[es:Portal:Desarrolladores/Aeronaves]]&lt;br /&gt;
[[pt:Portal:Desenvolvedorpara/Avião]]&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=FlightProSim&amp;diff=21601</id>
		<title>FlightProSim</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=FlightProSim&amp;diff=21601"/>
		<updated>2010-05-23T10:31:44Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: Corrected some typos!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As many people will be aware, there is a new flight simulator product that is being widely and actively marketed at the moment - Flight Pro Sim. As it is almost entirely based on FlightGear, there is some confusion between the two. To help provide some clarity, and answer some common questions, we (the core FlightGear development team) felt it was appropriate to make a statement, and provide a FAQ. &lt;br /&gt;
&lt;br /&gt;
FlightGear is an open-source flight simulator that was started in 1996. It is released under the GNU General Public License v2, and as such, it is free to use, modify and distribute with few restrictions. It has been developed with the collaboration of a large number of individuals over the last 12 years. FlightGear can be downloaded at no cost from http://www.flightgear.org.&lt;br /&gt;
&lt;br /&gt;
Flight Pro Sim is a commercial product very heavily based on FlightGear. Investigation by a number of the FlightGear developers has found no difference between this and the FlightGear v1.9.1 release other than a change of name. Flight Pro Sim is in no way endorsed or supported by the core FlightGear development team. Given the similarities between Flight Pro Sim and FlightGear, we would recommend that prospective buyers download FlightGear for free and satisfy themselves that Flight Pro Sim provides worthwhile value for money before purchasing it.&lt;br /&gt;
&lt;br /&gt;
==I bought FlightProSim, what to do?==&lt;br /&gt;
If you have bought FlightProSim, try to get your money back as soon as possible. You can have (almost) the same software for free nevertheless! They guarentee a 60 day money back trial period, so this should be no problem if you react quickly. &lt;br /&gt;
&lt;br /&gt;
The FlightGear developers are interested in the package to see whether the package complies with the GNU GPL terms or not. Therefore we would like to receive a package for inspection. If you own a package and were unable to get your money back, please contact the developers through the [[mailing list]].&lt;br /&gt;
&lt;br /&gt;
==Legal or illegal?==&lt;br /&gt;
The [[GNU GPL]] license under which FlightGear is released allows reselling under certain terms. Many FlightGear developers have difficulties with the way FlightProSim is acting and doubt if they are acting legally. If you have any (inter)national law knowledge, please contact the developers at the [[mailing list]], they will welcome any legal support.&lt;br /&gt;
&lt;br /&gt;
==What are the differences between the two?==&lt;br /&gt;
As far as we have been able to make out, the only difference between FlightGear v1.9.1 and FlightProSim is a change in name throughout the software, and the fact that you have to pay for it.&lt;br /&gt;
&lt;br /&gt;
==Why did you refuse a money offer from FlightProSim?==&lt;br /&gt;
After a lot of negative criticism from the FlightGear developer, FlightProSim offered to fund a competition in which a developer of a nice new feature is rewarded with a sum of money ($250). The FlightGear developers have more or less un-officially decided to not accept the money offer. A couple of the reasons include:&lt;br /&gt;
* If the guy behind FPS really is interested in improving a flight sim, he would input his addons/improvements back into the FlightGear community so the software can be further developed.&lt;br /&gt;
* Everyone is allowed to sell FlightGear, as long as they comply with the GNU GPL v2 license. FPS did not in the past, and thus we do not trust them any more. Only after lots of requests from our side they changed their website telling the visitors (in a very small message without link) that it is actually an adaption of free software&lt;br /&gt;
* FlightProSim also copied all content from our wiki (and initionally also our main website). That does not give a positive developer impression, more like a &amp;quot;we-want-money-fast-and-without-much-effort&amp;quot; attitude. Apart from the fact that FPS is actually part of a money making company, rather than a software developing one...&lt;br /&gt;
&lt;br /&gt;
==Why do FlightGear developers allow this?==&lt;br /&gt;
The freedom to modify and enhance FlightGear is a core part of the project, and of open-source in general. Restricting the modifications that are allowed and what people can do with the software goes against that ethos.&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Building_FlightGear_-_Debian&amp;diff=21561</id>
		<title>Building FlightGear - Debian</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Building_FlightGear_-_Debian&amp;diff=21561"/>
		<updated>2010-05-18T11:53:58Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= HowTo build on Debian =&lt;br /&gt;
&lt;br /&gt;
HowTo build FlightGear 2.0.0 or CVS on GNU/Linux Debian '''Stable''' 5.x (Lenny).&lt;br /&gt;
&lt;br /&gt;
This HowTo may also work with '''Testing'''/'''Unstable''' except that some things are easier because of more up to date packages. So, before fetching something check the version of the available -dev package for it.&lt;br /&gt;
&lt;br /&gt;
It even *should* work with '''Etch''', but I am not certain about some dependencies. [http://wiki.flightgear.org/index.php?title=Talk:Building_Flightgear_-_Debian&amp;amp;action=edit Reports] are welcome.&lt;br /&gt;
&lt;br /&gt;
If you don't want to make your hands dirty, have a look at [[Scripted_Compilation_on_Linux_Debian/Ubuntu]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Requirements and Preparations ==&lt;br /&gt;
You need an OpenGL capable graphics including a proper installed driver.&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also a bunch of packages (and some of their dependencies) are required:&lt;br /&gt;
*gcc, g++, make, automake1.9, pkg-config&lt;br /&gt;
*mawk (or gawk)&lt;br /&gt;
*cmake   (min. version 2.6.0-5,  for Etch available on backports.org!)&lt;br /&gt;
*cvs, subversion, wget&lt;br /&gt;
&amp;lt;!--*libsvn-dev, for [[Terrasync]]s proper operation.--&amp;gt;&lt;br /&gt;
*freeglut3-dev, libgl1-mesa-dev, libxrandr-dev&lt;br /&gt;
*libxi-dev, libxmu-dev, libxext-dev&lt;br /&gt;
*libopenal-dev (see [[#libopenal|libopenal]]), libalut-dev&lt;br /&gt;
*libjpeg62-dev, libtiff4-dev, libpng12-dev&lt;br /&gt;
*libboost1.37-dev  (Not available for Lenny atm, see [[#Boost Library|Boost Library]] below.)&lt;br /&gt;
&lt;br /&gt;
During installation packages ''simgear-dev'' and ''openscenegraph-dev'' *must not* be installed. They can safely be re-installed after compilation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Build and install ==&lt;br /&gt;
Because we are going to install versions different to the ones in the repositries it is recommended to install FG-2.0.0 and/or CVS in a place independent to the base system such as /usr/local/FG-2.0.0, /opt/FG-2.0.0 or in a subdirectory of your $HOME. I suggest to make it writeable by the user that there is no need to become root for the &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt; commands. I'll use &amp;lt;code&amp;gt;$prefix&amp;lt;/code&amp;gt; as a placeholder for this directory. &amp;lt;BR&amp;gt;&lt;br /&gt;
Another one will be &amp;lt;code&amp;gt;$srcdir&amp;lt;/code&amp;gt;, it stands for the absolute path to the directory which contains the folders of the various source codes. So in the following instructions one have to replace these by the local paths or even &amp;lt;code&amp;gt;export&amp;lt;/code&amp;gt; them during the process.&lt;br /&gt;
&lt;br /&gt;
Subsequent the instructions to fetch the sources and the data needed by FlightGear and the commands to build/install each source.&lt;br /&gt;
&lt;br /&gt;
Have in mind that the data is relatively huge (CVS about 2 GB and 2.0.0 300 MB) so, to save some time, it is a good idea to fetch it while building the sources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== libopenal ===&lt;br /&gt;
The libopenal-dev package in Lenny/Etch is too old for [[fgcom]]. For FlightGear it does work but not all features (like Doppler) are available, so installing an up to date version is recommended anyway.&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 wget http://kcat.strangesoft.net/openal-releases/openal-soft-1.11.753.tar.bz2&lt;br /&gt;
 tar xjf openal-soft-1.11.753.tar.bz2&lt;br /&gt;
 cd openal-soft-1.11.753/build&lt;br /&gt;
 cmake  -D CMAKE_INSTALL_PREFIX:PATH=&amp;quot;$prefix&amp;quot; ..&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
=== plib ===&lt;br /&gt;
Latest SVN is [http://www.mail-archive.com/flightgear-devel@lists.sourceforge.net/msg20793.html recommended], yet package plib1.8.5-dev for Testing/Unstable does work as well.&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 svn co https://plib.svn.sourceforge.net/svnroot/plib/trunk plib&lt;br /&gt;
 cd plib&lt;br /&gt;
 sed s/PLIB_TINY_VERSION\ \ 5/PLIB_TINY_VERSION\ \ 6/ -i src/util/ul.h&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
 ./configure --prefix=$prefix&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Boost Library ===&lt;br /&gt;
Version 1.37 is needed. At least for Lenny/Etch this means getting the sources because this is not available atm on backports.org. Testing/Unstable users may have more luck and a package is available, libboost-1.37-dev or newer.&lt;br /&gt;
&lt;br /&gt;
To build SimGear, FlightGear, fgrun and fgcom some boostlib header files are required, no need to compile and install it. If you have installed a libboost1.37-dev (or higher) package on your system you don't have to bother at all with it. If not, you have to tell each ./configure where the header files are. To do so, add the option &amp;lt;code&amp;gt;CPPFLAGS=-I$prefix/include&amp;lt;/code&amp;gt; to the SimGear, FlightGear and fgrun &amp;lt;code&amp;gt;./configure&amp;lt;/code&amp;gt; commands. We copy the header files to $prefix/include because fgcom will need them there.&lt;br /&gt;
&lt;br /&gt;
Get the newest version tar ball from http://sourceforge.net/projects/boost/files/boost/, extract it into &amp;lt;code&amp;gt;$srcdir&amp;lt;/code&amp;gt; then:&lt;br /&gt;
 cp -R $srcdir/boost-[version]/boost/ $prefix/include/&lt;br /&gt;
&lt;br /&gt;
=== OpenSceneGraph ===&lt;br /&gt;
For FlightGear 2.0.0 one may use the latest (or at least 2.9.6) developer release from http://www.openscenegraph.org/projects/osg/wiki/Downloads/DeveloperReleases and extract it into &amp;lt;code&amp;gt;$srcdir&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Mostly this is ok for FlightGear CVS as well as it is stable. However, sometimes the release is not fresh enough and one have to get the latest developments via SVN:&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 svn co http://www.openscenegraph.org/svn/osg/OpenSceneGraph/trunk OpenSceneGraph&lt;br /&gt;
&lt;br /&gt;
cmake demands a build directory separate to its source directory. So &amp;lt;code&amp;gt;mkdir&amp;lt;/code&amp;gt; one and &amp;lt;code&amp;gt;cd&amp;lt;/code&amp;gt; into it.&lt;br /&gt;
 cmake -D CMAKE_BUILD_TYPE=&amp;quot;Release&amp;quot; -D CMAKE_CXX_FLAGS=&amp;quot;-O3&amp;quot; -D CMAKE_C_FLAGS=&amp;quot;-O3&amp;quot; \&lt;br /&gt;
    -D CMAKE_INSTALL_PREFIX:PATH=&amp;quot;$prefix&amp;quot; $srcdir/OpenSceneGraph[-version]&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SimGear ===&lt;br /&gt;
2.0.0:&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 wget http://mirrors.ibiblio.org/pub/mirrors/simgear/ftp/Source/SimGear-2.0.0.tar.gz&lt;br /&gt;
 tar xzf SimGear-2.0.0.tar.gz&lt;br /&gt;
 cd SimGear-2.0.0&lt;br /&gt;
&lt;br /&gt;
CVS:&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 git clone git://gitorious.org/fg/simgear.git simgear&lt;br /&gt;
 cd simgear&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
&lt;br /&gt;
2.0.0 and CVS:&lt;br /&gt;
 ./configure --prefix=$prefix [CPPFLAGS=-I$prefix/include LDFLAGS=&amp;quot;-L$prefix/lib -L$prefix/lib64&amp;quot;]&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
=== FlightGear source ===&lt;br /&gt;
2.0.0:&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 wget http://mirrors.ibiblio.org/pub/mirrors/flightgear/ftp/Source/FlightGear-2.0.0.tar.gz&lt;br /&gt;
 tar xzf FlightGear-2.0.0.tar.gz&lt;br /&gt;
 cd FlightGear-2.0.0&lt;br /&gt;
&lt;br /&gt;
CVS:&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 git clone git://gitorious.org/fg/flightgear.git flightgear&lt;br /&gt;
 cd flightgear&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
&lt;br /&gt;
2.0.0 and CVS:&lt;br /&gt;
 ./configure --prefix=$prefix [CPPFLAGS=-I$prefix/include/ LDFLAGS=&amp;quot;-L$prefix/lib -L$prefix/lib64&amp;quot;]&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
=== FlightGear data ===&lt;br /&gt;
2.0.0:&lt;br /&gt;
 cd $prefix&lt;br /&gt;
 wget http://mirrors.ibiblio.org/pub/mirrors/flightgear/ftp/Shared/FlightGear-data-2.0.0.tar.bz2&lt;br /&gt;
 tar xjf FlightGear-data-2.0.0.tar.bz2&lt;br /&gt;
&lt;br /&gt;
CVS:&lt;br /&gt;
 cd $prefix&lt;br /&gt;
 git clone git://gitorious.org/fg/fgdata.git data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Trial run ===&lt;br /&gt;
When all the builds are done and the data download has finished it is time for a test run:&lt;br /&gt;
 export LD_LIBRARY_PATH=$prefix/lib/:$LD_LIBRARY_PATH&lt;br /&gt;
 $prefix/bin/fgfs --fg-root=$prefix/data&lt;br /&gt;
&lt;br /&gt;
For the future, if you want to start FlightGear from command line have a look at [[fgfsrc]], if you prefer a graphical user interface continue with [[#fgrun|compiling fgrun]]. Have in mind that fgfs need to find our self compiled libraries and therefore we have to tell the linker (ld) where to find them. That is what the first line here does.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Optional Software ==&lt;br /&gt;
&lt;br /&gt;
=== fgrun ===&lt;br /&gt;
To build [[fgrun]] two more package is required:&lt;br /&gt;
*libfltk1.1-dev fluid&lt;br /&gt;
&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 svn co http://fgrun.svn.sourceforge.net/svnroot/fgrun/trunk fgrun&lt;br /&gt;
 cd fgrun&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
 ./configure --prefix=$prefix  [CPPFLAGS=-I$prefix/include/]&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== fgcom ===&lt;br /&gt;
For [[fgcom]] unfortunately there is one more dependency which cannot be solved with packages on Lenny/Etch, see [[#libopenal|libopenal]].&lt;br /&gt;
&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 svn co https://appfgcom.svn.sourceforge.net/svnroot/fgcom/trunk fgcom&lt;br /&gt;
 cd fgcom/src&lt;br /&gt;
 make INSTALL_BIN=$prefix/bin INSTALL_DIR=$prefix/fgcom \&lt;br /&gt;
    PLIB_PREFIX=$prefix OPENAL_PREFIX=$prefix install&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--== Keeping the CVS version up to date ==&lt;br /&gt;
&lt;br /&gt;
...to be continued. ;-)&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Building}}&lt;br /&gt;
&lt;br /&gt;
[[de:FlightGear_bauen_-_Debian]]&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Building_FlightGear_-_Debian&amp;diff=21560</id>
		<title>Building FlightGear - Debian</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Building_FlightGear_-_Debian&amp;diff=21560"/>
		<updated>2010-05-18T11:52:36Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: /* SimGear */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= HowTo build on Debian =&lt;br /&gt;
&lt;br /&gt;
HowTo build FlightGear 2.0.0 or CVS on GNU/Linux Debian '''Stable''' 5.x (Lenny).&lt;br /&gt;
&lt;br /&gt;
This HowTo may also work with '''Testing'''/'''Unstable''' except that some things are easier because of more up to date packages. So, before fetching something check the version of the available -dev package for it.&lt;br /&gt;
&lt;br /&gt;
It even *should* work with '''Etch''', but I am not certain about some dependencies. [http://wiki.flightgear.org/index.php?title=Talk:Building_Flightgear_-_Debian&amp;amp;action=edit Reports] are welcome.&lt;br /&gt;
&lt;br /&gt;
If you don't want to make your hands dirty, have a look at [[Scripted_Compilation_on_Linux_Debian/Ubuntu]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Requirements and Preparations ==&lt;br /&gt;
You need an OpenGL capable graphics including a proper installed driver.&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also a bunch of packages (and some of their dependencies) are required:&lt;br /&gt;
*gcc, g++, make, automake1.9, pkg-config&lt;br /&gt;
*mawk (or gawk)&lt;br /&gt;
*cmake   (min. version 2.6.0-5,  for Etch available on backports.org!)&lt;br /&gt;
*cvs, subversion, wget&lt;br /&gt;
&amp;lt;!--*libsvn-dev, for [[Terrasync]]s proper operation.--&amp;gt;&lt;br /&gt;
*freeglut3-dev, libgl1-mesa-dev, libxrandr-dev&lt;br /&gt;
*libxi-dev, libxmu-dev, libxext-dev&lt;br /&gt;
*libopenal-dev (see [[#libopenal|libopenal]]), libalut-dev&lt;br /&gt;
*libjpeg62-dev, libtiff4-dev, libpng12-dev&lt;br /&gt;
*libboost1.37-dev  (Not available for Lenny atm, see [[#Boost Library|Boost Library]] below.)&lt;br /&gt;
&lt;br /&gt;
During installation packages ''simgear-dev'' and ''openscenegraph-dev'' *must not* be installed. They can safely be re-installed after compilation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Build and install ==&lt;br /&gt;
Because we are going to install versions different to the ones in the repositries it is recommended to install FG-2.0.0 and/or CVS in a place independent to the base system such as /usr/local/FG-2.0.0, /opt/FG-2.0.0 or in a subdirectory of your $HOME. I suggest to make it writeable by the user that there is no need to become root for the &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt; commands. I'll use &amp;lt;code&amp;gt;$prefix&amp;lt;/code&amp;gt; as a placeholder for this directory. &amp;lt;BR&amp;gt;&lt;br /&gt;
Another one will be &amp;lt;code&amp;gt;$srcdir&amp;lt;/code&amp;gt;, it stands for the absolute path to the directory which contains the folders of the various source codes. So in the following instructions one have to replace these by the local paths or even &amp;lt;code&amp;gt;export&amp;lt;/code&amp;gt; them during the process.&lt;br /&gt;
&lt;br /&gt;
Subsequent the instructions to fetch the sources and the data needed by FlightGear and the commands to build/install each source.&lt;br /&gt;
&lt;br /&gt;
Have in mind that the data is relatively huge (CVS about 2 GB and 2.0.0 300 MB) so, to save some time, it is a good idea to fetch it while building the sources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== libopenal ===&lt;br /&gt;
The libopenal-dev package in Lenny/Etch is too old for [[fgcom]]. For FlightGear it does work but not all features (like Doppler) are available, so installing an up to date version is recommended anyway.&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 wget http://kcat.strangesoft.net/openal-releases/openal-soft-1.11.753.tar.bz2&lt;br /&gt;
 tar xjf openal-soft-1.11.753.tar.bz2&lt;br /&gt;
 cd openal-soft-1.11.753/build&lt;br /&gt;
 cmake  -D CMAKE_INSTALL_PREFIX:PATH=&amp;quot;$prefix&amp;quot; ..&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
=== plib ===&lt;br /&gt;
Latest SVN is [http://www.mail-archive.com/flightgear-devel@lists.sourceforge.net/msg20793.html recommended], yet package plib1.8.5-dev for Testing/Unstable does work as well.&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 svn co https://plib.svn.sourceforge.net/svnroot/plib/trunk plib&lt;br /&gt;
 cd plib&lt;br /&gt;
 sed s/PLIB_TINY_VERSION\ \ 5/PLIB_TINY_VERSION\ \ 6/ -i src/util/ul.h&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
 ./configure --prefix=$prefix&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Boost Library ===&lt;br /&gt;
Version 1.37 is needed. At least for Lenny/Etch this means getting the sources because this is not available atm on backports.org. Testing/Unstable users may have more luck and a package is available, libboost-1.37-dev or newer.&lt;br /&gt;
&lt;br /&gt;
To build SimGear, FlightGear, fgrun and fgcom some boostlib header files are required, no need to compile and install it. If you have installed a libboost1.37-dev (or higher) package on your system you don't have to bother at all with it. If not, you have to tell each ./configure where the header files are. To do so, add the option &amp;lt;code&amp;gt;CPPFLAGS=-I$prefix/include&amp;lt;/code&amp;gt; to the SimGear, FlightGear and fgrun &amp;lt;code&amp;gt;./configure&amp;lt;/code&amp;gt; commands. We copy the header files to $prefix/include because fgcom will need them there.&lt;br /&gt;
&lt;br /&gt;
Get the newest version tar ball from http://sourceforge.net/projects/boost/files/boost/, extract it into &amp;lt;code&amp;gt;$srcdir&amp;lt;/code&amp;gt; then:&lt;br /&gt;
 cp -R $srcdir/boost-[version]/boost/ $prefix/include/&lt;br /&gt;
&lt;br /&gt;
=== OpenSceneGraph ===&lt;br /&gt;
For FlightGear 2.0.0 one may use the latest (or at least 2.9.6) developer release from http://www.openscenegraph.org/projects/osg/wiki/Downloads/DeveloperReleases and extract it into &amp;lt;code&amp;gt;$srcdir&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Mostly this is ok for FlightGear CVS as well as it is stable. However, sometimes the release is not fresh enough and one have to get the latest developments via SVN:&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 svn co http://www.openscenegraph.org/svn/osg/OpenSceneGraph/trunk OpenSceneGraph&lt;br /&gt;
&lt;br /&gt;
cmake demands a build directory separate to its source directory. So &amp;lt;code&amp;gt;mkdir&amp;lt;/code&amp;gt; one and &amp;lt;code&amp;gt;cd&amp;lt;/code&amp;gt; into it.&lt;br /&gt;
 cmake -D CMAKE_BUILD_TYPE=&amp;quot;Release&amp;quot; -D CMAKE_CXX_FLAGS=&amp;quot;-O3&amp;quot; -D CMAKE_C_FLAGS=&amp;quot;-O3&amp;quot; \&lt;br /&gt;
    -D CMAKE_INSTALL_PREFIX:PATH=&amp;quot;$prefix&amp;quot; $srcdir/OpenSceneGraph[-version]&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SimGear ===&lt;br /&gt;
2.0.0:&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 wget http://mirrors.ibiblio.org/pub/mirrors/simgear/ftp/Source/SimGear-2.0.0.tar.gz&lt;br /&gt;
 tar xzf SimGear-2.0.0.tar.gz&lt;br /&gt;
 cd SimGear-2.0.0&lt;br /&gt;
&lt;br /&gt;
CVS:&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 git clone git://gitorious.org/fg/simgear.git simgear&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
&lt;br /&gt;
2.0.0 and CVS:&lt;br /&gt;
 ./configure --prefix=$prefix [CPPFLAGS=-I$prefix/include LDFLAGS=&amp;quot;-L$prefix/lib -L$prefix/lib64&amp;quot;]&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
=== FlightGear source ===&lt;br /&gt;
2.0.0:&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 wget http://mirrors.ibiblio.org/pub/mirrors/flightgear/ftp/Source/FlightGear-2.0.0.tar.gz&lt;br /&gt;
 tar xzf FlightGear-2.0.0.tar.gz&lt;br /&gt;
 cd FlightGear-2.0.0&lt;br /&gt;
&lt;br /&gt;
CVS:&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 mkdir flightgear&lt;br /&gt;
 cd flightgear&lt;br /&gt;
 cvs -d :pserver:cvsguest@cvs.flightgear.org:/var/cvs/FlightGear-0.9 login&lt;br /&gt;
 #CVS passwd: guest&lt;br /&gt;
 cvs -d :pserver:cvsguest@cvs.flightgear.org:/var/cvs/FlightGear-0.9 co source&lt;br /&gt;
 cd source&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
&lt;br /&gt;
2.0.0 and CVS:&lt;br /&gt;
 ./configure --prefix=$prefix [CPPFLAGS=-I$prefix/include/ LDFLAGS=&amp;quot;-L$prefix/lib -L$prefix/lib64&amp;quot;]&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
=== FlightGear data ===&lt;br /&gt;
2.0.0:&lt;br /&gt;
 cd $prefix&lt;br /&gt;
 wget http://mirrors.ibiblio.org/pub/mirrors/flightgear/ftp/Shared/FlightGear-data-2.0.0.tar.bz2&lt;br /&gt;
 tar xjf FlightGear-data-2.0.0.tar.bz2&lt;br /&gt;
&lt;br /&gt;
CVS:&lt;br /&gt;
 cd $prefix&lt;br /&gt;
 cvs -d :pserver:cvsguest@cvs.flightgear.org:/var/cvs/FlightGear-0.9 co data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Trial run ===&lt;br /&gt;
When all the builds are done and the data download has finished it is time for a test run:&lt;br /&gt;
 export LD_LIBRARY_PATH=$prefix/lib/:$LD_LIBRARY_PATH&lt;br /&gt;
 $prefix/bin/fgfs --fg-root=$prefix/data&lt;br /&gt;
&lt;br /&gt;
For the future, if you want to start FlightGear from command line have a look at [[fgfsrc]], if you prefer a graphical user interface continue with [[#fgrun|compiling fgrun]]. Have in mind that fgfs need to find our self compiled libraries and therefore we have to tell the linker (ld) where to find them. That is what the first line here does.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Optional Software ==&lt;br /&gt;
&lt;br /&gt;
=== fgrun ===&lt;br /&gt;
To build [[fgrun]] two more package is required:&lt;br /&gt;
*libfltk1.1-dev fluid&lt;br /&gt;
&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 svn co http://fgrun.svn.sourceforge.net/svnroot/fgrun/trunk fgrun&lt;br /&gt;
 cd fgrun&lt;br /&gt;
 ./autogen.sh&lt;br /&gt;
 ./configure --prefix=$prefix  [CPPFLAGS=-I$prefix/include/]&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== fgcom ===&lt;br /&gt;
For [[fgcom]] unfortunately there is one more dependency which cannot be solved with packages on Lenny/Etch, see [[#libopenal|libopenal]].&lt;br /&gt;
&lt;br /&gt;
 cd $srcdir&lt;br /&gt;
 svn co https://appfgcom.svn.sourceforge.net/svnroot/fgcom/trunk fgcom&lt;br /&gt;
 cd fgcom/src&lt;br /&gt;
 make INSTALL_BIN=$prefix/bin INSTALL_DIR=$prefix/fgcom \&lt;br /&gt;
    PLIB_PREFIX=$prefix OPENAL_PREFIX=$prefix install&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--== Keeping the CVS version up to date ==&lt;br /&gt;
&lt;br /&gt;
...to be continued. ;-)&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Building}}&lt;br /&gt;
&lt;br /&gt;
[[de:FlightGear_bauen_-_Debian]]&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Livery_over_MP&amp;diff=21529</id>
		<title>Livery over MP</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Livery_over_MP&amp;diff=21529"/>
		<updated>2010-05-16T14:00:30Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: /* Sharing your liveries */ Corrected Typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Livery_selection_dialog.jpg|thumb|270px|The livery selection dialog of the [[Sikorsky S76C]].]]&lt;br /&gt;
&lt;br /&gt;
On this page we describe how you make use of a script to get a '''livery selection dialog''' for a [[Aircraft|plane]] in [[FlightGear]]. To get new liveries into [[FlightGear CVS]], you need to have them availabe with this script.&lt;br /&gt;
&lt;br /&gt;
'''If you want to add a new livery to a plane that already makes use of the livery select system, you'll only have to follow the steps under [[#Models/Liveries|Models/Liveries]].'''&lt;br /&gt;
&lt;br /&gt;
==Files==&lt;br /&gt;
There are a few files we need to make (or edit), namely:&lt;br /&gt;
* &amp;lt;tt&amp;gt;dr400-set.xml&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;Models/dr400.xml&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;Nasal/liveries.nas&amp;lt;/tt&amp;gt;&lt;br /&gt;
We also have to make a new directory to store our liveries in. Let's make it &amp;lt;tt&amp;gt;Aircraft/DR400/Models/Liveries&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Models/Liveries===&lt;br /&gt;
For every livery we need to make a file. Let's say we got a Rescue livery, we then need to make a file called Rescue.xml in our &amp;lt;tt&amp;gt;Models/Liveries&amp;lt;/tt&amp;gt; directory. When a particular livery gets selected, its XML file is copied to the aircraft's property tree. On the pilot's side this is the main property tree &amp;lt;tt&amp;gt;/&amp;lt;/tt&amp;gt;, and on all remote machines on the MP network it's one of the multiplayer branches in &amp;lt;tt&amp;gt;/ai/models/multiplayer[]&amp;lt;/tt&amp;gt;. The structure of livery XML files is completely free. There just has to be a property containing a name for the selection dialog, and &amp;lt;tt&amp;gt;aircraft.livery.init()&amp;lt;/tt&amp;gt; must be told which it is. By default it is &amp;lt;tt&amp;gt;sim/model/livery/name&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;PropertyList&amp;gt;&lt;br /&gt;
  &amp;lt;sim&amp;gt;&lt;br /&gt;
   &amp;lt;model&amp;gt;&lt;br /&gt;
    &amp;lt;livery&amp;gt;&lt;br /&gt;
     &amp;lt;name type=&amp;quot;string&amp;quot;&amp;gt;Default&amp;lt;/name&amp;gt;&lt;br /&gt;
     &amp;lt;texture&amp;gt;texture.rgb&amp;lt;/texture&amp;gt;&lt;br /&gt;
    &amp;lt;/livery&amp;gt;&lt;br /&gt;
   &amp;lt;/model&amp;gt;&lt;br /&gt;
  &amp;lt;/sim&amp;gt;&lt;br /&gt;
 &amp;lt;/PropertyList&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Models/dr400.xml===&lt;br /&gt;
The first part is related to the nasal script. &amp;lt;tt&amp;gt;(&amp;quot;Aircraft/DR400/Models/Liveries&amp;quot;);&amp;lt;/tt&amp;gt; points FlightGear to the directory where we store our liveries. This is a different directory for every plane, but there should be only one folder for one plane, containing all the liveries for that plane. Add the following code to your models .xml file:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nasal&amp;gt;&lt;br /&gt;
  &amp;lt;load&amp;gt;&lt;br /&gt;
   var livery_update = aircraft.livery_update.new(&amp;quot;Aircraft/DR400/Models/Liveries&amp;quot;);&lt;br /&gt;
  &amp;lt;/load&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
  &amp;lt;unload&amp;gt;&lt;br /&gt;
   livery_update.stop();&lt;br /&gt;
  &amp;lt;/unload&amp;gt;&lt;br /&gt;
 &amp;lt;/nasal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The second part is very important and probably the hardest of all. We need to set which parts of the model should change when you select a new livery. To find the object-names, you could make use of software like [[Blender]] or [[AC3D]]. The &amp;lt;tt&amp;gt;&amp;lt;texture&amp;gt;S76livery.rgb&amp;lt;/texture&amp;gt;&amp;lt;/tt&amp;gt; part points FlightGear to the livery that should be shown on startup.&lt;br /&gt;
&lt;br /&gt;
'''Warning: be sure you don't have a slash (/) in front of sim/model/livery in the &amp;lt;property-base&amp;gt; tag! Otherwise, all planes will get the same livery!'''&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;material&amp;lt;/type&amp;gt;&lt;br /&gt;
   &amp;lt;object-name&amp;gt;LHgeardoor&amp;lt;/object-name&amp;gt;&lt;br /&gt;
   &amp;lt;object-name&amp;gt;RHgeardoor&amp;lt;/object-name&amp;gt;&lt;br /&gt;
   &amp;lt;object-name&amp;gt;S76C&amp;lt;/object-name&amp;gt;&lt;br /&gt;
   &amp;lt;object-name&amp;gt;RF.door&amp;lt;/object-name&amp;gt;&lt;br /&gt;
   &amp;lt;object-name&amp;gt;LF.door&amp;lt;/object-name&amp;gt;&lt;br /&gt;
   &amp;lt;object-name&amp;gt;Rr.Door&amp;lt;/object-name&amp;gt;&lt;br /&gt;
   &amp;lt;object-name&amp;gt;Lr.Door&amp;lt;/object-name&amp;gt;&lt;br /&gt;
   &amp;lt;object-name&amp;gt;RHbaggage&amp;lt;/object-name&amp;gt;&lt;br /&gt;
   &amp;lt;object-name&amp;gt;LHbaggage&amp;lt;/object-name&amp;gt;&lt;br /&gt;
   &amp;lt;object-name&amp;gt;RHfrtgeardoor&amp;lt;/object-name&amp;gt;&lt;br /&gt;
   &amp;lt;object-name&amp;gt;LHfrtgeardoor&amp;lt;/object-name&amp;gt;&lt;br /&gt;
   &amp;lt;property-base&amp;gt;sim/model/livery&amp;lt;/property-base&amp;gt;&lt;br /&gt;
   &amp;lt;texture-prop&amp;gt;texture&amp;lt;/texture-prop&amp;gt;&lt;br /&gt;
   &amp;lt;texture&amp;gt;texture.rgb&amp;lt;/texture&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Nasal/liveries.nas===&lt;br /&gt;
The only thing you might change in the nasal file is the directory of the liveries. If you don't have the livery name in &amp;lt;tt&amp;gt;sim/model/livery/name&amp;lt;/tt&amp;gt;, then you have to add this as second function argument.&lt;br /&gt;
&lt;br /&gt;
 aircraft.livery.init(&amp;quot;Aircraft/DR400/Models/Liveries&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
===dr400-set.xml===&lt;br /&gt;
The follow part is really important. If this is not included, the livery changes will not be visible over MP!&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;model&amp;gt;&lt;br /&gt;
  &amp;lt;path&amp;gt;Aircraft/DR400/models/dr400.xml&amp;lt;/path&amp;gt;&lt;br /&gt;
  &amp;lt;livery&amp;gt;&lt;br /&gt;
   &amp;lt;file type=&amp;quot;string&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/livery&amp;gt;&lt;br /&gt;
 &amp;lt;/model&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want the default livery be something else than the first in the list, replace the file type part with the following, containing the Models/Liveries/....xml file name of the approperiate livery.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;file type=&amp;quot;string&amp;quot;&amp;gt;ANA&amp;lt;/file&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make a nice button in the [[menubar]] we need to add the following code, just above the &amp;lt;tt&amp;gt;&amp;lt;/sim&amp;gt;&amp;lt;/tt&amp;gt; tag.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;menubar&amp;gt;&lt;br /&gt;
  &amp;lt;default&amp;gt;&lt;br /&gt;
   &amp;lt;menu n=&amp;quot;100&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;label&amp;gt;Robin DR 400&amp;lt;/label&amp;gt;&lt;br /&gt;
    &amp;lt;enabled type=&amp;quot;bool&amp;quot;&amp;gt;true&amp;lt;/enabled&amp;gt;&lt;br /&gt;
    &amp;lt;item&amp;gt;&lt;br /&gt;
     &amp;lt;label&amp;gt;Select Livery&amp;lt;/label&amp;gt;&lt;br /&gt;
     &amp;lt;binding&amp;gt;&lt;br /&gt;
      &amp;lt;command&amp;gt;nasal&amp;lt;/command&amp;gt;&lt;br /&gt;
      &amp;lt;script&amp;gt;aircraft.livery.dialog.open()&amp;lt;/script&amp;gt;&lt;br /&gt;
     &amp;lt;/binding&amp;gt;&lt;br /&gt;
    &amp;lt;/item&amp;gt;&lt;br /&gt;
   &amp;lt;/menu&amp;gt;&lt;br /&gt;
  &amp;lt;/default&amp;gt;&lt;br /&gt;
 &amp;lt;/menubar&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Multiple texture files per livery==&lt;br /&gt;
Some models use multiple textures file (eg. seperate files for wings and fuselage). Every texture needs it own property. You can add as many textures as you like. &lt;br /&gt;
&lt;br /&gt;
The given examples are based on the [[Boeing 787]].&lt;br /&gt;
&lt;br /&gt;
===Models/Liveries===&lt;br /&gt;
Instead of just one texture we have to deal with multiple ones now. &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;PropertyList&amp;gt;&lt;br /&gt;
  &amp;lt;sim&amp;gt;&lt;br /&gt;
   &amp;lt;model&amp;gt;&lt;br /&gt;
    &amp;lt;livery&amp;gt;&lt;br /&gt;
     &amp;lt;name type=&amp;quot;string&amp;quot;&amp;gt;All Nippon Airways&amp;lt;/name&amp;gt;&lt;br /&gt;
     &amp;lt;texture&amp;gt;ANA-Livery.rgb&amp;lt;/texture&amp;gt;&lt;br /&gt;
    &amp;lt;/livery&amp;gt;&lt;br /&gt;
    &amp;lt;lights&amp;gt;&lt;br /&gt;
     &amp;lt;texture&amp;gt;ANA-Lights.rgb&amp;lt;/texture&amp;gt;&lt;br /&gt;
    &amp;lt;/lights&amp;gt;&lt;br /&gt;
   &amp;lt;/model&amp;gt;&lt;br /&gt;
  &amp;lt;/sim&amp;gt;&lt;br /&gt;
 &amp;lt;/PropertyList&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remember the names (&amp;lt;livery&amp;gt; and &amp;lt;lights&amp;gt;), as you will need them in the model file in the next step.&lt;br /&gt;
&lt;br /&gt;
===Models/787.xml===&lt;br /&gt;
    &amp;lt;animation&amp;gt;&lt;br /&gt;
        &amp;lt;type&amp;gt;material&amp;lt;/type&amp;gt;&lt;br /&gt;
        &amp;lt;object-name&amp;gt;wipers&amp;lt;/object-name&amp;gt;&lt;br /&gt;
        &amp;lt;property-base&amp;gt;sim/model/livery&amp;lt;/property-base&amp;gt;&lt;br /&gt;
        &amp;lt;texture-prop&amp;gt;texture&amp;lt;/texture-prop&amp;gt;&lt;br /&gt;
        &amp;lt;texture&amp;gt;ANA-Livery.rgb&amp;lt;/texture&amp;gt;&lt;br /&gt;
    &amp;lt;/animation&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;animation&amp;gt;&lt;br /&gt;
        &amp;lt;type&amp;gt;material&amp;lt;/type&amp;gt;&lt;br /&gt;
        &amp;lt;object-name&amp;gt;lightedfin_0&amp;lt;/object-name&amp;gt;&lt;br /&gt;
        &amp;lt;property-base&amp;gt;sim/model/lights&amp;lt;/property-base&amp;gt;&lt;br /&gt;
        &amp;lt;texture-prop&amp;gt;texture&amp;lt;/texture-prop&amp;gt;&lt;br /&gt;
        &amp;lt;texture&amp;gt;ANA-Lights.rgb&amp;lt;/texture&amp;gt;&lt;br /&gt;
    &amp;lt;/animation&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Performance Improvements===&lt;br /&gt;
For livery changing it seems to be  important to parent all objects with the same texture. In Blender select all objects and press &amp;quot;ctr-p&amp;quot; to make it parent to the last selected. E.g.: fuselage and doors with the same texture: select at first the doors and then at last the fuselage and press &amp;quot;ctr-p&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Also prevent transparency where possible- it will prevent lags during switching the views. See also the f14b as an very good example!&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
To ensure that your livery setup works correctly over MP, start two instances of FlightGear locally, one with&lt;br /&gt;
&lt;br /&gt;
 fgfs --multiplay=out,10,localhost,5702 --multiplay=in,10,localhost,5701&lt;br /&gt;
&lt;br /&gt;
and one with&lt;br /&gt;
&lt;br /&gt;
 fgfs --multiplay=out,10,localhost,5701 --multiplay=in,10,localhost,5702&lt;br /&gt;
&lt;br /&gt;
==Sharing your liveries==&lt;br /&gt;
Ofcourse you want other people to use and enjoy your liveries as much as you do. Therefore, other users should be able to download them.&lt;br /&gt;
&lt;br /&gt;
We have some FlightGear hosts, where you can upload your liveries to:&lt;br /&gt;
* [http://liveries.flightgear.org FlightGear Liveries] largest FG repository with (almost) all available liveries, based on real aircraft.&lt;br /&gt;
* [http://unitedfreeworld.com UnitedFreeWorld] repository with lots of liveries (and scenery/aircraft), both realistic and fictional.&lt;br /&gt;
&lt;br /&gt;
[[Category:Aircraft enhancement]]&lt;br /&gt;
[[Category:Modeling]]&lt;br /&gt;
[[Category:Menubar]]&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Howto:Implement_wing_flex&amp;diff=21420</id>
		<title>Howto:Implement wing flex</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Howto:Implement_wing_flex&amp;diff=21420"/>
		<updated>2010-05-12T11:31:44Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: /* Animation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:747-400_wing_flex.jpg|thumb|270px|Wing flex as seen on the [[Boeing 747-400]].]]&lt;br /&gt;
&lt;br /&gt;
'''Wing flex''' is the flexing of wings on [[aircraft]], due to lift and fuselage load. [[FlightGear]] is able to show realistic wing flex. Currently the [[Boeing 787]] and [[Boeing 747-400|747-400]] are equipped with flexing wings.&lt;br /&gt;
&lt;br /&gt;
==Model==&lt;br /&gt;
A few edits have to be made to the aircrafts model. Each wing has to be cut into multiple sections. The more sections, the smoother the wing flex. Be carefull that you do not cut through flaps or engines. Naming our wing sections, from fuselage to wing tip: wing.1, wing.2 and wing.3. &lt;br /&gt;
&lt;br /&gt;
Measure the coordinates of the start of each new wing section, you will need them to animate the wings.&lt;br /&gt;
&lt;br /&gt;
==Animation==&lt;br /&gt;
The following lines have to be added to the aircrafts model .xml file. These lines are used with three wing sections, and a [[JSBSim]] [[FDM]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;rotate&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;LeftWing.1&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;LeftWing.2&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;LeftWing.3&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;property&amp;gt;fdm/jsbsim/aero/coefficient/CLalpha&amp;lt;/property&amp;gt;&lt;br /&gt;
  &amp;lt;factor&amp;gt;-0.0000045&amp;lt;/factor&amp;gt;&lt;br /&gt;
  &amp;lt;offset-deg&amp;gt;0&amp;lt;/offset-deg&amp;gt;   &lt;br /&gt;
  &amp;lt;center&amp;gt;&lt;br /&gt;
   &amp;lt;x-m&amp;gt; 0.00&amp;lt;/x-m&amp;gt;&lt;br /&gt;
   &amp;lt;y-m&amp;gt;-4.00&amp;lt;/y-m&amp;gt;&lt;br /&gt;
   &amp;lt;z-m&amp;gt;-1.70&amp;lt;/z-m&amp;gt;&lt;br /&gt;
  &amp;lt;/center&amp;gt;&lt;br /&gt;
  &amp;lt;axis&amp;gt;&lt;br /&gt;
   &amp;lt;x&amp;gt;1.0&amp;lt;/x&amp;gt;&lt;br /&gt;
   &amp;lt;y&amp;gt;0.0&amp;lt;/y&amp;gt;&lt;br /&gt;
   &amp;lt;z&amp;gt;0.0&amp;lt;/z&amp;gt;&lt;br /&gt;
  &amp;lt;/axis&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;rotate&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;LeftWing.2&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;LeftWing.3&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;property&amp;gt;fdm/jsbsim/aero/coefficient/CLalpha&amp;lt;/property&amp;gt;&lt;br /&gt;
  &amp;lt;factor&amp;gt;-0.0000045&amp;lt;/factor&amp;gt;&lt;br /&gt;
  &amp;lt;offset-deg&amp;gt;0&amp;lt;/offset-deg&amp;gt;   &lt;br /&gt;
  &amp;lt;center&amp;gt;&lt;br /&gt;
   &amp;lt;x-m&amp;gt; 0.00&amp;lt;/x-m&amp;gt;&lt;br /&gt;
   &amp;lt;y-m&amp;gt;-8.00&amp;lt;/y-m&amp;gt;&lt;br /&gt;
   &amp;lt;z-m&amp;gt;-1.50&amp;lt;/z-m&amp;gt;&lt;br /&gt;
  &amp;lt;/center&amp;gt;&lt;br /&gt;
  &amp;lt;axis&amp;gt;&lt;br /&gt;
   &amp;lt;x&amp;gt;1.0&amp;lt;/x&amp;gt;&lt;br /&gt;
   &amp;lt;y&amp;gt;0.0&amp;lt;/y&amp;gt;&lt;br /&gt;
   &amp;lt;z&amp;gt;0.0&amp;lt;/z&amp;gt;&lt;br /&gt;
  &amp;lt;/axis&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;animation&amp;gt;&lt;br /&gt;
  &amp;lt;type&amp;gt;rotate&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;object-name&amp;gt;LeftWing.3&amp;lt;/object-name&amp;gt;&lt;br /&gt;
  &amp;lt;property&amp;gt;fdm/jsbsim/aero/coefficient/CLalpha&amp;lt;/property&amp;gt;&lt;br /&gt;
  &amp;lt;factor&amp;gt;-0.0000045&amp;lt;/factor&amp;gt;&lt;br /&gt;
  &amp;lt;offset-deg&amp;gt;0&amp;lt;/offset-deg&amp;gt;&lt;br /&gt;
  &amp;lt;center&amp;gt;&lt;br /&gt;
   &amp;lt;x-m&amp;gt;  0.00&amp;lt;/x-m&amp;gt;&lt;br /&gt;
   &amp;lt;y-m&amp;gt;-12.25&amp;lt;/y-m&amp;gt;&lt;br /&gt;
   &amp;lt;z-m&amp;gt; -1.25&amp;lt;/z-m&amp;gt;&lt;br /&gt;
  &amp;lt;/center&amp;gt;&lt;br /&gt;
  &amp;lt;axis&amp;gt;&lt;br /&gt;
   &amp;lt;x&amp;gt;1.0&amp;lt;/x&amp;gt;&lt;br /&gt;
   &amp;lt;y&amp;gt;0.0&amp;lt;/y&amp;gt;&lt;br /&gt;
   &amp;lt;z&amp;gt;0.0&amp;lt;/z&amp;gt;&lt;br /&gt;
  &amp;lt;/axis&amp;gt;&lt;br /&gt;
 &amp;lt;/animation&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You probably need to add a lot more objects to each section (like engines, flaps, ailerons etc.) and also change the ''center'' coordinates according to your aircraft. For the right wing, just change the sign of the center &amp;lt;y-m&amp;gt; coordinate and the factor value.&lt;br /&gt;
&lt;br /&gt;
===JSBSim===&lt;br /&gt;
[[JSBSim]] calculates the lift force of the aircraft. The lift reacts on the G-forces, the velocity and turbulences. The respective property is: &amp;lt;tt&amp;gt;fdm/jsbsim/aero/coefficient/CLalpha&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===YASim===&lt;br /&gt;
[[YASim]] does not calculate wingflex as nice as JSBSim, but a pretty realistic effect can be reached by using the &amp;lt;tt&amp;gt;accelerations/pilot-g[0]&amp;lt;/tt&amp;gt; property instead.&lt;br /&gt;
&lt;br /&gt;
[[Category:Aircraft enhancement|Implent wing flex]]&lt;br /&gt;
[[Category:Howto|Implent wing flex]]&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
	<entry>
		<id>https://wiki.flightgear.org/w/index.php?title=Advanced_weather&amp;diff=21308</id>
		<title>Advanced weather</title>
		<link rel="alternate" type="text/html" href="https://wiki.flightgear.org/w/index.php?title=Advanced_weather&amp;diff=21308"/>
		<updated>2010-05-06T07:25:12Z</updated>

		<summary type="html">&lt;p&gt;Fahim Dalvi: /* Current development status */ Updated File link.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Status: Apr. 2010&lt;br /&gt;
&lt;br /&gt;
The current weather system of Flightgear can be called global when Flightgear runs offline: Any menu weather setting, be it windspeed, visibility, precipitation or cloud coverage, affects the weather everywhere. It is not possible to fly to a region where the cloud cover is different, or see precipitation from an aircraft flying in sunshine, or to observe a change in atmospheric pressure by flying somewhere else.&lt;br /&gt;
&lt;br /&gt;
When online, the weather system offers a link with METAR servers, which makes the weather locally-determined global: One can change the weather by flying to a different location where a different METAR is available, but the change happens instantaneously everywhere, i.e. there is no transition of for example crossing a rain front or leaving dense clouds behind to emerge in sunshine.&lt;br /&gt;
&lt;br /&gt;
A local weather system in contrast is one in which continuous changes from the weather at one location to the weather in a different location are simulated, i.e. weather phenomena are tied to a specific location. Needless to say, a local weather system is significantly more complicated to simulate than the present system. Below is a conceptual outline how a local weather system for Flightgear could be created using mainly existing technology and code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scales for weather phenomena ==&lt;br /&gt;
&lt;br /&gt;
Real weather phenomena are determined by processes occurring at vastly different size scales. At the large end of the scale is the system of low and high pressure regions and fronts between cold and warm air masses, which have spatial size scales of O(1000) km. At the other end of the scale are very localized phenomena, for instance a dark tarmac surface heated by sunlight acting as the source point of a thermal updraft resulting in a Cumulus cloud. Both size scales are relevant for the Flightgear experience - an airliner on a longhaul flight is able to observe large-scale weather fronts from above, whereas a glider pilot needs a reasonable simulation of local updrafts and sinks tied to terrain features in a credible way for a realistic flight experience. A local weather system therefore needs to&lt;br /&gt;
&lt;br /&gt;
* simulate weather phenomena at different scales&lt;br /&gt;
* ideally work offline as well as online&lt;br /&gt;
* allow modification by the user on various scales&lt;br /&gt;
* be reasonably fast to run in real-time &lt;br /&gt;
&lt;br /&gt;
The actual dynamics of the atmosphere is a very complex problem which even solved approximately needs hours of CPU time on supercomputing clusters. From this, it is clear that a local weather system cannot be an (even approximately)  physically accurate description of processes in the atmosphere, but needs to be a credible mockup of such a description in which heuristic rules replace simulation. &lt;br /&gt;
&lt;br /&gt;
To give an example for what this means, consider the development of Cumulus clouds. Cumulus development is reduced on a hot day under a hazy Cirrus sky. The reason is that the Cirrus sky reflects part of the sunlight, thus the ground is not heated that much by direct sunlight and the convective processes responsible for Cumulus cloud formation are lessened. An accurate simulation would need to start with the energy absorbed from the sunlight on various types of surfaces, then solve the equations governing the heat flux from the ground to the air above, followed by fluid-dynamical equations for the convective currents creating Cumulus clouds. A heuristic rule would simply state that the probability for the placement of a Cumulus cloud into the Flightgear environment is reduced by 50% when a Cirrus cover is present (obviously, the sophistication of the ruleset determines how realistic the weather system will appear).&lt;br /&gt;
&lt;br /&gt;
In the following, the technology for such a local weather system needed at the relevant scales is outlined - first for the situation offline, followed by ideas how it could be connected with the METAR system in online use.&lt;br /&gt;
&lt;br /&gt;
=== Small scale - effect volumes and average conditions ===&lt;br /&gt;
&lt;br /&gt;
To simulate local weather at small scale, effect volumes (EV) are a useful concept. The effect volumes define regions in which the normal weather conditions (wind, turbulence, updraft, visibility, precipitation...) are replaced by ones characteristic for the region. As an example, one would define the inside of a cloud as an effect volume in which visibility is reduced as compared to outside, or the precipitation layer underneath a thunderstorm as an EV in which heavy rain is on, visibility is reduced, the temperature is reduced and some turbulence may be active. &lt;br /&gt;
&lt;br /&gt;
The conditions characteristic for the EV are imposed once the aircraft enters the volume, they are restored to the outside values once the aircraft leaves the region again. The Flightgear AI system already has examples of structures which in essence are EVs - &amp;lt;b&amp;gt;thermal&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;thunderstorm&amp;lt;/b&amp;gt;. The first structure contains an EV in which vertical air motion is active, the second one in which turbulence is present. These structures could be generalized to an AI system &amp;lt;b&amp;gt;weather&amp;lt;/b&amp;gt; in which essentially all weather parameters inside the volume could be set by XML tags. &lt;br /&gt;
&lt;br /&gt;
On the visual side, parts of the EV must also be tied to visible models. The inside of a cloud can be modelled by reduced visibility, but the outside of the cloud must be a model. Similarly, the inside of a rain front appears as rain generated by the Flightgear system, but the outside must be a 3-d model of a precipitation layer. This means that individual 3-d models for various visible atmospheric phenomena (clouds, precipitation, fog, ...) need to be created (see [[Howto: Modelling Clouds]] for a collection of techniques for creating cloud and precipitation models).&lt;br /&gt;
&lt;br /&gt;
Outside the EV, many meteorological parameters may vary in a continuous way, for example visibility may decrease from 5000 to 4000 m when flying 20 km north - but inside the cloud (the EV), it will change in a discontinuous way very suddenly to a low value (say 30 m), to jump back to a large value outside the cloud. Thus, the EVs are used to simulate only discontinuous, local changes in conditions, the larger scale changes in the background need to be taken care of by a different system.&lt;br /&gt;
&lt;br /&gt;
EV's should be implemented such that they can be user-specified, i.e. a user should be able to place any particular combination of weather effects and cloud/precipitation model to a specific location.&lt;br /&gt;
&lt;br /&gt;
=== Mid scale - weather tiles ===&lt;br /&gt;
&lt;br /&gt;
Weather needs to be explicitly simulated about as far as one can see from an aircraft - that naturally leads to the concept of weather tiles (analoguous to scenery tiles)  which would cover a region of, say, 30x30 km or something of that size. Inside tiles, weather is simulated explicitly in terms of EVs and 3-d models. &lt;br /&gt;
&lt;br /&gt;
As experiments will quickly convince anyone, placing a random set of cloud models into a tile does not create a realistic sky appearance. Instead, some cloud types usually occur together, others do not. The underlying reason is of course that there is large scale dynamics of the weather which determines what happens in a given location. For instance, Cirrus clouds are found at the leading edge of a warmfront - and they are usually followed by lower, layered cloud types like Altostratus, but typically not by a thunderstorm front. &lt;br /&gt;
&lt;br /&gt;
Thus, there need to be different 'types' of tiles, each representing a typical snapshot of a development inside the larger system. Tile themes would be something like 'leading edge of warmfront', 'trailing edge of warmfront', 'cold front', 'dry high-pressure region', 'developed tropical thunderstorms' and so on. This has the added benefit that the user can specify the weather locally simply by chosing an appropriate tile from a menu (he does not need to micromanage the weather by placing individual EV and cloud models).&lt;br /&gt;
&lt;br /&gt;
The type of tile then determines the rules for populating the tile with EV and models. A 'leading edge of a warmfront' tile could for example have the rules&lt;br /&gt;
&lt;br /&gt;
* populate the northern part of the tile randomly with 10 Cirrus clouds between 25.000 and 30.000 ft &lt;br /&gt;
* make sure the models are spaced sufficiently far apart&lt;br /&gt;
* make sure the models show the same type of texture (do not mix feathery Cirrus textures with amorphous ones)&lt;br /&gt;
* populate the southern part of the tile with 20 Cirrocumulus clouds between 20.000 and 25.000 ft&lt;br /&gt;
(...)&lt;br /&gt;
&lt;br /&gt;
The values of weather parameters outside the EVs would be set for the tile center and interpolated between neighbouring tiles. &lt;br /&gt;
&lt;br /&gt;
Technically, each tile can be populated by a Nasal script specific for the tile type whenever the tile is needed (probably when it becomes visible). As an example for the development state of the system (March 2010), here is the view for a weather tile representing an approaching cold front with a Stratocumulus layer and occasional Cumulonimbus activity.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:Clouds-coldfront02.jpg|400px]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Large scale - tile placement rules ===&lt;br /&gt;
&lt;br /&gt;
To create a realistic experience for flights beyond a tile, there need to be matching rules for tiles. Since each tile represents a particular development in a larger weather environment, only certain types of tiles match. For instance, one cannot place a 'high-pressure region' tile next to a 'low pressure region' tile without crossing a front. With a moderately large library of different tile types and a set of placement rules, out of which (in offline mode) a credible set of neighbouring tiles is chosen, a more or less realistic long-distance flight experience can result.&lt;br /&gt;
&lt;br /&gt;
If each tile type contains default values for weather parameters (to be overwritten by METAR info if available), the actual value of any parameter such as atmospheric pressure of visibility can be obtained by interpolation between tile centers, and the parameters will vary even in the absence of METAR info simpy due to the tile placement rules mocking up the presence of real large-scale weather systems.&lt;br /&gt;
&lt;br /&gt;
Tile placement rules can be implemented in a Nasal loop which monitors the local position and initializes a new tile as soon as it is needed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Connection with the METAR system ==&lt;br /&gt;
&lt;br /&gt;
Connecting the above concepts with real METAR info is not straightforward. The METAR info should conceptually influence three different things:&lt;br /&gt;
&lt;br /&gt;
* selection of tile type&lt;br /&gt;
* placement of EVs and models inside the tile&lt;br /&gt;
* continuously varying weather parameters&lt;br /&gt;
&lt;br /&gt;
=== Selection of tile type ===&lt;br /&gt;
&lt;br /&gt;
If METAR info is to determine tile type selection, one would need to find an algorithm which gets the METAR from nearby stations and tries to extract a more global weather pattern from that info. For instances, pressure differences and wind direction could be used to locate high and low pressure regions, temperature differences (corrected for elevation) could help to find cold and warm air masses, and based on the most likely weather pattern given these bits of information, the initial tile type as well as the most likely matching neighbouring tiles could be chosen.&lt;br /&gt;
&lt;br /&gt;
=== Placement of EVs and models inside the tile ===&lt;br /&gt;
&lt;br /&gt;
At least some aspects of EV and model placement, such as cloud base, precipitation strength or number of clouds to be placed can more or less be inferred directly from the METAR information. However, in general the tile rules may in details conflict with the METAR info, so the weather system outlined here would not always literally reproduce the METAR (for example, it could happen that the METAR reports rain at an airfield, but that the tile generation does not place a raincloud directly above the airfield).&lt;br /&gt;
&lt;br /&gt;
=== METAR and continuously varying weather parameters ===&lt;br /&gt;
&lt;br /&gt;
If METAR info is available, this (rather than default tile center info) should be used to set parameters like visibility, pressure or temperature. To avoid discontinuous jumps, the info should be linearly interpolated in time for each nearby  position from which a METAR is available. If METAR is updated every 10 minutes, one can use the information at startup for each position for the first 10 minutes of flight, then as soon as the next METAR is available slowly change the value (at each position) within the next 10 minutes to the values just fetched, and continue to do so (in essence creating a 10 minute offset from real to simulated weather).&lt;br /&gt;
&lt;br /&gt;
To interpolate in space, in principle a simple algorithm with inverse distance weighting can be used (there are more accurate but also more complicated solutions): If, say, the pressure &amp;lt;i&amp;gt;p&amp;lt;/i&amp;gt; is known at &amp;lt;i&amp;gt;n&amp;lt;/i&amp;gt; positions, such that the pressure at position &amp;lt;i&amp;gt;i&amp;lt;/i&amp;gt; is &amp;lt;i&amp;gt;p_i&amp;lt;/i&amp;gt; and the distance between aircraft and &amp;lt;i&amp;gt;i&amp;lt;/i&amp;gt; is &amp;lt;i&amp;gt;d_i&amp;lt;/i&amp;gt;, then a good approximation of the local pressure is&lt;br /&gt;
&lt;br /&gt;
p = (sum p_i (1/d_i)) / (sum 1/d_i)&lt;br /&gt;
&lt;br /&gt;
as this will make the pressure at position  &amp;lt;i&amp;gt;i&amp;lt;/i&amp;gt; equal to  &amp;lt;i&amp;gt;p_i&amp;lt;/i&amp;gt; and lead to the average of the individual pressures if the distance to all METAR stations is the same.&lt;br /&gt;
&lt;br /&gt;
== Related Discussions ==&lt;br /&gt;
* [http://flightgear.org/forums/viewtopic.php?f=5&amp;amp;t=6968 New thunderstorm AI scenario alpha release] (02/2010)&lt;br /&gt;
* [http://flightgear.org/forums/viewtopic.php?f=5&amp;amp;t=7107 Cirrus sky (download link in first post)] (02/2010)&lt;br /&gt;
* [http://flightgear.org/forums/viewtopic.php?f=5&amp;amp;t=7358 A local weather system] (03/2010)&lt;br /&gt;
&lt;br /&gt;
== Connection with the Multiplayer system ==&lt;br /&gt;
&lt;br /&gt;
(should be written by someone who knows what the Multiplayer system can and cannot do)&lt;br /&gt;
&lt;br /&gt;
== Feature requests on the C++ side ==&lt;br /&gt;
&lt;br /&gt;
To aid current development, a few features would be nice to have from the C++ side for good performance of the code:&lt;br /&gt;
&lt;br /&gt;
* cloud transformations: Two view-axis based model transformation routines are available with an xml animation tag with the billboard animation. The problem is that neither of those is very useful for cloud models. It would probably help a lot in terms of performance to have more transformations available which are more suitable for cloud models: 1) one-axis position vector based rotation (yaw) 2) two-axis position vector based rotation which does not roll the model (yaw and pitch). Each of those should optionally support the specification of ranges (i.e. pitch only between -20 and +20 deg) and also a minimal distance beyond which the model is not rotated any more. 3) and 4) one and two axis position vector based rotations as above which blend at small distance into view-axis based rotations (these are computationally more expensive, but appear more realistic at small distances). Possibly even more transformations.&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; this can be done inside the shader code very conveniently, so there is probably no need to C++ it after all&lt;br /&gt;
&lt;br /&gt;
* weather properties: Make visibility, wind direction, windspeed, turbulence, thermal lift, pressure, temperature and humidity in an easy way writable from Nasal. Most (except thermal lift) are currently indirectly writable by writing the config and calling environment reinit, but that's not a good solution.&lt;br /&gt;
&lt;br /&gt;
* terrain elevation: For thermal convection and barrier clouds, rapid sampling of terrain elevation is needed. Can there be a way to rapidly receive terrain elevation info only in Nasal for a whole set of pre-specified coordinates which performs better than geoinfo() calls?&lt;br /&gt;
&lt;br /&gt;
* terrain exposure to sun: Again, for thermal convection, a frequent problem involving lots of trigonometry would be - given a coordinate, find a 100 m x 100 m square area around that point. Find the orientation of that area in space (i.e. compute its normal). Given the time and date as input, compute the position of the sun, and based on surface normal and sun angle, compute the amount of thermal energy flux through the surface compared to the maximal one (i.e. when the sun is directly overhead flat terrain, surface normal || sun angle). So, a function f(coordinates, time, date) which returns a number between 0 (no sun exposure, e.g. during night) and 1 (maximal sun exposure). Computing this in Nasal a few 1000 times might be unreasonably expensive...&lt;br /&gt;
&lt;br /&gt;
== Current development status ==&lt;br /&gt;
&lt;br /&gt;
The current version 0.6 supports placement of effect volumes for visibility, rain, snow and thermal lift, as well as interpolation of visibility, pressure, temperature and dewpoint between weather stations. It has a variety of 40x40 km weather tiles with layered and non-layered clouds and weather effects, external models of precipitation and (with a CVS patch) also support for gliders, i.e. it creates thermals below convective clouds. As an example, the picture shows Nimbostratus clouds with precipitation seen from outside.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:Clouds-nimbostratus.jpg|400px]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://www.phy.duke.edu/~trenk/files/local_weather_fgfs2.0.0_v0.6.tgz Local Weather package v0.6(Thorsten)]&lt;br /&gt;
&lt;br /&gt;
[http://www.phy.duke.edu/~trenk/files/README.local_weather.html Documentation]&lt;/div&gt;</summary>
		<author><name>Fahim Dalvi</name></author>
	</entry>
</feed>