Skybolt:具有Python绑定的C ++行星环境渲染引擎

2020-12-06 20:46:56

Skybolt是一种实时行星环境渲染引擎,旨在用于飞行模拟器,航空航天研发和地理空间应用。 Skybolt用C ++编写,基于OpenSceneGraph,并支持CIGI与主机应用程序进行通信。 Skybolt还具有Python API,可轻松与科学和工程研究工具集成。

Skybolt存储库包括Sprocket,这是一个GUI应用程序,用于创建方案和可视化数据。 Sprocket支持python脚本和基于节点的图形编程。

Matthew Reid创建和维护的Skybolt / Sprocket要提交错误报告,请在GitHub存储库上提出问题。有关其他查询,请使用Piraxus网站上的联系表。

该项目已获得Mozilla Public License 2.0版的许可-有关详细信息,请参见License.txt文件。

//创建引擎自动参数= EngineCommandLineParser :: parse(argc,argv); std :: unique_ptr< EngineRoot>根= EngineRootFactory :: create(params); //创建cameraEntityFactory&实体工厂= * root-> entityFactory; World& world = * root-> simWorld; EntityPtr simCamera = entityFactory.createEntity(" Camera"); world.addEntity(simCamera); //将相机附加到窗口自动窗口= std :: make_unique< StandaloneWindow>(RectI(0,0,1080,720)); osg :: ref_ptr< vis :: RenderTarget> viewport = createAndAddViewportToWindowWithEngine(* window,* root); viewport-> setCamera(getVisCamera(* simCamera)); //创建输入自动inputPlatform = std :: make_shared< InputPlatformOis>(window-> getHandle(),window-> getWidth(),window-> getHeight())); std :: vector< LogicalAxisPtr> axes = CameraInputSystem :: createDefaultAxes(* inputPlatform); root-> systemRegistry-> push_back(std :: make_shared< InputSystem>(inputPlatform,window.get(),axes)); root-> systemRegistry-> push_back(std :: make_shared< CameraInputSystem>(window.get(),simCamera,inputPlatform,axes)); //创建entityworld.addEntity(entityFactory.createEntity(" SunBillboard")); world.addEntity(entityFactory.createEntity(" MoonBillboard")); world.addEntity(entityFactory.createEntity (" Stars")); EntityPtr planet = entityFactory.createEntity(" PlanetEarth"); world.addEntity(planet); //将相机对准行星自动cameraController = simCamera-> getFirstComponentRequired< CameraControllerComponent>()-> cameraController; cameraController-> setTarget(planet.get()); //运行循环runMainLoop(* window,* root,UpdateLoop :: neverExit);

导入skybolt作为sb window = sb。 StandaloneWindow(sb。RectI(0,0,800,600))引擎= sb。 createEngineRootWithDefaults()摄像头=引擎。实体工厂。 createEntity(" Camera")引擎。世界。 addEntity(camera);某人attachCameraToWindowWithEngine(摄像头,窗口,引擎)引擎。世界。 addEntity(engine。entityFactory。createEntity(" SunBillboard"))引擎。世界。 addEntity(engine。entityFactory。createEntity(" MoonBillboard"))引擎。世界。 addEntity(engine。entityFactory。createEntity(" Stars"))earth = engine。实体工厂。 createEntity(" PlanetEarth")引擎。世界。 addEntity(Earth);控制器=相机。 getFirstComponentOfType(" CameraControllerComponent")。 cameraController控制器。 setTarget(Earth)控制器。 selectController(" Globe")sb。 stepOnceAndRenderUntilDone(engine,window,0.1)

该存储库包含多个项目,如下所述,可以在CMake中启用/禁用。每个项目都有一组不同的依赖项。您只需要获取要构建的项目的依赖项。为了方便,可以从SkyboltDependenciesHeaderOnly存储库中获得仅标头的依赖项。

Skybolt插件通过集成Bullet物理引擎为实体提供了刚体动力学组件。

Skybolt插件为主机应用程序提供了一种通过通用图像生成器接口(CIGI)驱动仿真的方法。

Skybolt插件通过集成JSBSim动态引擎为实体提供飞机动力学组件。

使用CMake配置和生成内部版本。可以根据需要使用CMake BUILD_xxx属性启用/禁用存储库中的可选项目。

Skybolt需要运行库资产,该资源不包含在此存储库中。资产分为单独的程序包,可以从https://piraxus.com/downloads/assetpackages.html下载

仅需要Core程序包即可运行,但是其他程序包将增加额外的资产。要安装软件包,请将zip文件解压缩到名为" Assets"的文件夹中。在程序工作目录中。

确保引擎可以在相对于工作目录的Assets / Shaders或Source / Assets / Shaders下找到着色器(包含在此代码存储库中)。

默认情况下,PlanetEarth实体将mapbox用于反照率和高程数据。 要使用mapbox,您必须从https://mapbox.com获取API密钥。如果需要,可以编辑PlanetEarth以使用Bing地图代替反照率。 可以从https://docs.microsoft.com/zh-cn/bingmaps/getting-started/bing-maps-dev-center-help/getting-a-bing-maps-key获取bing密钥