本文描述flightgear vs2013编译调试可运行。以前也写过fg3.4的编译,如果想去看的请参考http://www.freeyun.com/flightgear-3-2-0-generation-debug.html

最早的fg2.6的编译已删除,因存在一定的误导性。适用3.4以上面的版本,注意看osg要求的版本。

必备软件

下载安装解压cmake、osg、3rdParty:http://pan.baidu.com/s/1qW9WOES

如果想自己编译osg的参考osg编译

新建环境变量OSG_DIR  D:Program Files (x86)OpenSceneGraph

flightgear simgear 开发的版本:http://sourceforge.net/p/flightgear/_list/git?source=navbar

flightgear simgear 稳定的版本:http://www.flightgear.org/download/source-code/

编译的目录说明

《flightgear vs2013》

3rdParty:第三方库

flightgear-build:FG的生成vs2013目录

simgear-build:SG的生成vs2013目录

simgear及flightgear:源代码目录

bin:里面放了3rdParty的bin,和osg的bin目录,同时也需要指定fgfs.exe,比如我指定的vs2013的工作目录D:FlightGear-devbin。还有一种方法就是吧3rdParty和osg两者bin都添加到环境变量Path。

data:顾名思义就是fg的资源目录,你可以下载我提供的,那个是当前最新仓,当然你sim和fg也得是最新仓的,解压出来后,可以直接在我上面更新,省下很多时间,如你用了指定版本的,可以用安装版的data。

terrasync-dir:这个目录是空的,用于存放联网下载更新机场地景等等目录。

关于其他目录,不在这个范围之内就不解释。

Cmake简单三步

点击configure->选择编译器->点击Generate

编译simgear

修改simgearsimgearprops下面的PropertyInterpolationMgr.cxx函数

void PropertyInterpolationMgr::update(double dt)

,这个是一个bug,操作容器出错,

void PropertyInterpolationMgr::update(double dt)
  {
    if( _rt_prop )
      dt = _rt_prop->getDoubleValue();

	for (InterpolatorList::iterator it = _interpolators.begin();
		it != _interpolators.end();
		)
	{
		for (double unused_time = dt;;)
		{
			PropertyInterpolatorRef interp = it->second;
			unused_time = interp->update(*it->first, unused_time);

			if (unused_time <= 0.0)
				// No time left for next animation
			{
				++it;
				break;
			}
			if (interp->_next)
			{
				// Step to next animation. Note that we do not invalidate or delete
				// the current interpolator to allow for looped animations.
				it->second = interp->_next;
				++it;
			}
			else
			{
				// No more animations so just remove it
				it = _interpolators.erase(it);
				break;
			}
		}
	}
}

source code:D:/FlightGear-dev/simgear

the binaries:D:/FlightGear-dev/simgear-build

CMAKE_INSTALL_PRE:d:/Program Files (x86)/SimGear

打开sln文件, 编译INSTALL项目

新建环境变量SIMGEAR_DIR d:/Program Files (x86)/SimGear

编译flightgear

source code:D:/FlightGear-dev/flightgear

the binaries:D:/FlightGear-dev/flightgear-build

运行调试

设置fgfs启动项目并添加调试参数(选择fgfs->右键属性->调试->命令参数)

--fg-root="D:FlightGear-devdata" --geometry=800x600 --terrasync-dir="D:FlightGear-devterrasync-dir" --disable-ai-traffic --multiplay=out,10,127.0.0.1,5000 --multiplay=in,10,127.0.0.1,5001 --enable-terrasync  --log-level=debug

指定了data资源目录(如果按照目录结构也可以省掉fg-root参数) 分辨率 地景更新目录,关闭AI,联网的操作,然后你看你的网速了,会联网更新地景,进入到飞机画面,如果你想启动其他飞机,你也需要

--fg-aircraft=“飞机的目录名字(D:FlightGear-devdataAircraft)”比如 --aircraft="c172p"。

关于更多的参数请看手册。

最新飞机下载:https://svn.code.sf.net/p/flightgear/fgaddon/trunk/Aircraft/

图flightgear vs2013运行后

《flightgear vs2013》

 

总结

如果你发现出现问题了,请重复查看是否漏了那些步骤。

本文写的在后面,flightgear也一直在更新,更多的信息推荐去看wiki.flightgear.org,如果你对最新版本的感兴趣也去下载git仓,sf.net上,由于之前的git仓也已移到sf.net上面。如果你只需要制作飞机地景,就不需要编译FG,因为它有提供专门的工具制作,直接运行FG起来看效果,前提是你要知道怎么使用。作为开源的项目可能代码写的不好,可以去修改它。用的是3.7的版本号,已经有QT 5.0在里面。用来代替fgrun的那个图形启动界面。