Ogre 1.8 terrain 和 paging 组件

OgreTerrain.h

这个头文件定义了两个类:Terrain和TerrainGlobalOption,第一个类很明显是存放具体的地形数据的,第二个是存放地形数据的全局选项的,因为一个地形会有很多个Terrain对象组成(每个Terrain表示某种地形的一小片地域),统一的的配置对象就是TerrainGlobalOption了。

OgreTerrainGroup.h

定义了TerrainGroup这个类,按照Ogre的思路部件都是要注册到统一管理的接口的。TerrainGroup把每一片地域(Terrain)连接起来,管理各个Terrain之间的关系。你就可以直接通过配置TerrainGroup一次来配置数目可能会很多的Terrain了。(例如创建、删除、加载、卸载一个Terrain,把所有Terrain保存到硬盘上,总体配置等)


以上两个头文件就可以表示Ogre的地形了。但是LOD技术不知道听说过没有?离你(camera)远的地方细节没那么重要,你快速移动的时候,好多细节也可以忽略。按照这个思想可以对Terrain作出极大的优化。Ogre中支持这个思想的,就是实现LOD的就是Paged Component,分页的思想。这个组件是把要显示的东西分页,然后根据不同情况显示不同的页。例如远处有座山,实际上很精密的一座山,但是你离的远,本来用1w个顶点表示的,现在用100个顶点就可以满足你的视觉。这时那座山就不显示1w个顶点的page,而显示100个顶点的page。page思想还应用在texture中,mipmap应该听说过吧?不同距离选择不同大小的纹理。

Ogre中把page思想抽象成一个component,而Terrain是page思想的主要应用,在Terrain组建里有针对page接口的实例化。

首先介绍下paging component

OgrePage.h

定义了Page类,当然,这就是最基础的一个page了。整个系统都是在决定什么时候什么情况下在哪换下一个page,替上另一个细节程度不同的page.

OgrePageStrategy.h

定义了PageStrategy类。记得policy设计模式吗?一个PageStrategy对象就是一个policy,这个policy的作用是决定哪个page被换上去,什么时候。所以可以有很多policy,也就是很多PageStrategy的派生类。

OgrePagedWorldSection.h

定义了PagedWorldSection类,这个类是整个被分页的世界的一部分,具象讲,比如是Terrain(整个大地图)的东面的山区,或者西面的林区。因为不同地形应该是有不同的LOD策略,也就是可以有不同的PageStrategy。这个类就代表了地图中使用相同PageStrategy的那一部分,当然,策略有了,容器有了,这里面肯定存的就是Page类啦~~~

OgrePagedWorld.h

定义了类PagedWorld,终于到最上层了。这里面肯定就是一大堆PagedWorldSection组成的啦~~~~~所以逻辑上,整个Terrain(抽象成PagedWorld),包含好多块不同的区域,有西面的一片山地,东面的一片林地(抽象成PagedWorldSection),每一片区域根据你的距离和速度使用不同的LOD策略(抽象成PageStrategy),来选择不同细节程度的模型(抽象成Page)进行显示。


其实呢,上面只是说了个大概。还有Page的组成里,还有更细节的几个头文件在这里介绍。

OgrePageContent.h

有没有想过Page里是怎么存放东西的?你想啊,就算是一小片花丛也有各种花,各种石头,各种泥土,不同的区域块存在的。表达一个page里的最小组成但愿的就是这个头文件定义的PageContent类。

OgrePageContentCollection.h

其实啊,一个Page里有的不是一大堆乱放的PageContent,而是一些按照不同属性的PageContent分类的PageContentCollention。这个头文件定义的就是PageContentCollection。

还有两个与这个话题相关的头文件,是设计模式的abstractFactory的实现。

OgrePageContentFactory.h, OgrePageContentCollectionFactory.h

如果你知道设计模式的话,很容易就想到这个是用来创建不同PageContent和PageContentCollection的AbstractFactory接口。


以上几个类描述了分页的世界组成。接下来是管理。

OgrePageManager.h

PageManager类。这个很容易理解了,整个page世界是怎样组合的,管理不同的PageWorld(注意,可能你同时只需要显示一个PageWorld,但是整个游戏有不止一个PageWorld需要管理和注册、加载、删除),这个类就是整个PageWorld的最上层管理接口。


下面就回到Terrain啦~~最早说过,Terrain可以不同page直接实现。利用page可以增加LOD功能。以下俩头文件主要完成Terrain的page化操作

OgreTerrainPagedWorldSection.h

我们知道Page的世界要用PageManager来管理。在具化到Terrain时,也要有个PageManager来管理整个PagedWorld。而PageWorld的组成PageWorldSection则被继承特化成TerrainPagedWorldSection。这个TerrainPageWorldSection及就是在这个头文件定义的。

并且啊,这个类还给你固定选择了LOD采用的policy。现在这个PagedWorld就是由TerrainPagedWorldSection组成的,并且每个Section都采用了选定的LOD策略来挂载删除不同的Page。


OgreTerrainPaging.h

这个定义了TerrainPaging类,其实是重新实现了PageManager的创造函数。因为Terrain和TerrainGroup都没有继承PageContent或Page,所以把俩融合在一起得做好多配置,干这个活的就是TerrainPaging类。这个重新实现了createWorldSection函数,让PagedWorld里的元素都由Terrain元素填充。



ubuntu@ubuntu:~/PX4_Firmware$ make px4_sitl_default gazebo [0/6] Performing configure step for 'sitl_gazebo' -- install-prefix: /usr/local -- Using C++17 compiler -- Found Boost: /usr/include (found suitable version "1.65.1", minimum required is "1.58") found components: system thread filesystem chrono date_time atomic CMake Warning (dev) at /usr/share/cmake-3.25/Modules/FindPackageHandleStandardArgs.cmake:438 (message): The package name passed to `find_package_handle_standard_args` (PkgConfig) does not match the name of the calling package (gazebo). This can lead to problems in calling code that expects `find_package` result variables (e.g., `_FOUND`) to follow a certain pattern. Call Stack (most recent call first): /usr/share/cmake-3.25/Modules/FindPkgConfig.cmake:99 (find_package_handle_standard_args) /usr/lib/x86_64-linux-gnu/cmake/gazebo/gazebo-config.cmake:30 (include) CMakeLists.txt:32 (find_package) This warning is for project developers. Use -Wno-dev to suppress it. -- Found Boost: /usr/include (found suitable version "1.65.1", minimum required is "1.40.0") found components: thread system filesystem program_options regex iostreams date_time chrono atomic -- Found Protobuf: /usr/lib/x86_64-linux-gnu/libprotobuf.so;-lpthread (found version "3.0.0") -- Found Boost: /usr/include (found version "1.65.1") -- Looking for OGRE... -- Found Ogre Ghadamon (1.9.0) -- Found OGRE: optimized;/usr/lib/x86_64-linux-gnu/libOgreMain.so;debug;/usr/lib/x86_64-linux-gnu/libOgreMain.so -- Looking for OGRE_Paging... -- Found OGRE_Paging: optimized;/usr/lib/x86_64-linux-gnu/libOgrePaging.so;debug;/usr/lib/x86_64-linux-gnu/libOgrePaging.so -- Looking for OGRE_Terrain... -- Found OGRE_Terrain: optimized;/usr/lib/x86_64-linux-gnu/libOgreTerrain.so;debug;/usr/lib/x86_64-linux-gnu/libOgreTerrain.so -- Looking for OGRE_Property... -- Found OGRE_Property: optimized;/usr/lib/x86_64-linux-gnu/libOgreProperty.so;debug;/usr/lib/x86_64-linux-gnu/libOgreProperty.so -- Look
03-17
lixing@lixing:~/PX4-Autopilot$ make px4_sitl gazebo [0/1072] git submodule src/drivers/gps/devices [10/1072] git submodule src/modules/mavlink/mavlink [12/1072] git submodule Tools/simulation/gazebo-classic/sitl_gazebo-classic [13/1072] git submodule src/modules/uxrce_dds_client/Micro-XRCE-DDS-Client [18/1072] Performing configure step for 'sitl_gazebo-classic' -- install-prefix: /usr/local -- cmake build type: RelWithDebInfo -- Using C++17 standard -- ccache enabled (export CCACHE_DISABLE=1 to disable) -- Found Boost: /usr/lib/x86_64-linux-gnu/cmake/Boost-1.71.0/BoostConfig.cmake (found suitable version "1.71.0", minimum required is "1.58") found components: system thread filesystem -- Found DART: /usr/include (Required is at least version "6.6") found components: dart -- Found Boost: /usr/lib/x86_64-linux-gnu/cmake/Boost-1.71.0/BoostConfig.cmake (found suitable version "1.71.0", minimum required is "1.40.0") found components: thread system filesystem program_options regex iostreams date_time -- Looking for ignition-math6 -- found version 6.15.1 -- Searching for dependencies of ignition-math6 -- Looking for OGRE... -- Found Ogre Ghadamon (1.9.0) -- Looking for OGRE_Paging... -- Found OGRE_Paging: optimized;/usr/lib/x86_64-linux-gnu/libOgrePaging.so;debug;/usr/lib/x86_64-linux-gnu/libOgrePaging.so -- Looking for OGRE_Terrain... -- Found OGRE_Terrain: optimized;/usr/lib/x86_64-linux-gnu/libOgreTerrain.so;debug;/usr/lib/x86_64-linux-gnu/libOgreTerrain.so -- Looking for OGRE_Property... -- Found OGRE_Property: optimized;/usr/lib/x86_64-linux-gnu/libOgreProperty.so;debug;/usr/lib/x86_64-linux-gnu/libOgreProperty.so -- Looking for OGRE_RTShaderSystem... -- Found OGRE_RTShaderSystem: optimized;/usr/lib/x86_64-linux-gnu/libOgreRTShaderSystem.so;debug;/usr/lib/x86_64-linux-gnu/libOgreRTShaderSystem.so -- Looking for OGRE_Volume... -- Found OGRE_Volume: optimized;/usr/lib/x86_64-linux-gnu/libOgreVolume.so;debug;/usr/lib/x86_64-linux-gnu/libOgreVolume.so -- Looking for OGRE_Overlay... -- Found OGRE_Overlay: optimized;/usr/lib/x86_64-linux-gnu/libOgreOverlay.so;debug;/usr/lib/x86_64-linux-gnu/libOgreOverlay.so -- Looking for ignition-math6 -- found version 6.15.1 -- Looking for ignition-transport8 -- found version 8.5.0 -- Searching for dependencies of ignition-transport8 -- Config-file not installed for ZeroMQ -- checking for pkg-config -- Checking for module 'libzmq >= 4' -- Found libzmq , version 4.3.2 -- Checking for module 'uuid' -- Found uuid, version 2.34.0 -- Looking for ignition-msgs5 -- found version 5.11.0 -- Searching for dependencies of ignition-msgs5 -- Found Protobuf: /usr/lib/x86_64-linux-gnu/libprotobuf.so;-lpthread (found suitable version "3.6.1", minimum required is "3") -- Looking for ignition-math6 -- found version 6.15.1 -- Checking for module 'tinyxml2' -- Found tinyxml2, version 6.2.0 -- Looking for ignition-msgs5 -- found version 5.11.0 -- Looking for ignition-common3 -- found version 3.17.0 -- Searching for dependencies of ignition-common3 -- Looking for dlfcn.h - found -- Looking for libdl - found -- Searching for <ignition-common3> component [graphics] -- Looking for ignition-common3-graphics -- found version 3.17.0 -- Searching for dependencies of ignition-common3-graphics -- Looking for ignition-math6 -- found version 6.15.1 -- Looking for ignition-fuel_tools4 -- found version 4.9.1 -- Searching for dependencies of ignition-fuel_tools4 -- Checking for module 'jsoncpp' -- Found jsoncpp, version 1.7.4 -- Checking for module 'yaml-0.1' -- Found yaml-0.1, version 0.2.2 -- Checking for module 'libzip' -- Found libzip, version 1.5.1 -- Looking for ignition-common3 -- found version 3.17.0 -- Looking for ignition-math6 -- found version 6.15.1 -- Looking for ignition-msgs5 -- found version 5.11.0 -- Building klt_feature_tracker without catkin -- Building OpticalFlow with OpenCV -- catkin DISABLED -- Found Protobuf: /usr/lib/x86_64-linux-gnu/libprotobuf.so;-lpthread (found version "3.6.1") -- Gazebo version: 11.15 -- Found GStreamer: adding gst_camera_plugin -- Found GStreamer: adding gst_video_stream_widget -- Configuring done -- Generating done -- Build files have been written to: /home/lixing/PX4-Autopilot/build/px4_sitl_default/build_gazebo-classic [68/1072] Performing configure step for 'libmicroxrceddsclient_project' -- libmicroxrceddsclient_project configure command succeeded. See also /home/lixing/PX4-Autopilot/build/px4_sitl_default/src/modules/uxrce_dds_client/src/libmicroxrceddsclient_project-stamp/libmicroxrceddsclient_project-configure-*.log [69/1072] Performing build step for 'libmicroxrceddsclient_project' -- libmicroxrceddsclient_project build command succeeded. See also /home/lixing/PX4-Autopilot/build/px4_sitl_default/src/modules/uxrce_dds_client/src/libmicroxrceddsclient_project-stamp/libmicroxrceddsclient_project-build-*.log [70/1072] Performing install step for 'libmicroxrceddsclient_project' -- libmicroxrceddsclient_project install command succeeded. See also /home/lixing/PX4-Autopilot/build/px4_sitl_default/src/modules/uxrce_dds_client/src/libmicroxrceddsclient_project-stamp/libmicroxrceddsclient_project-install-*.log [884/1072] Performing build step for 'sitl_gazebo-classic' [38/115] Generating /home/lixing/PX4-A...dels/quadtailsitter/quadtailsitter.sdf /home/lixing/PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic/models/quadtailsitter/quadtailsitter.sdf.jinja -> /home/lixing/PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic/models/quadtailsitter/quadtailsitter.sdf [40/115] Generating /home/lixing/PX4-A..._gazebo-classic/models/plane/plane.sdf /home/lixing/PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic/models/plane/plane.sdf.jinja -> /home/lixing/PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic/models/plane/plane.sdf [46/115] Generating /home/lixing/PX4-A...ebo-classic/models/px4flow/px4flow.sdf /home/lixing/PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic/models/px4flow/px4flow.sdf.jinja -> /home/lixing/PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic/models/px4flow/px4flow.sdf [66/115] Building CXX object CMakeFile...ugin.dir/src/gazebo_aruco_plugin.cpp.o FAILED: CMakeFiles/gazebo_aruco_plugin.dir/src/gazebo_aruco_plugin.cpp.o /usr/bin/ccache /usr/bin/c++ -DBOOST_ALL_NO_LIB -DBOOST_ATOMIC_DYN_LINK -DBOOST_DATE_TIME_DYN_LINK -DBOOST_FILESYSTEM_DYN_LINK -DBOOST_IOSTREAMS_DYN_LINK -DBOOST_PROGRAM_OPTIONS_DYN_LINK -DBOOST_REGEX_DYN_LINK -DBOOST_SYSTEM_DYN_LINK -DBOOST_TEST_DYN_LINK -DBOOST_THREAD_DYN_LINK -DLIBBULLET_VERSION=2.88 -DLIBBULLET_VERSION_GT_282 -Dgazebo_aruco_plugin_EXPORTS -I/home/lixing/PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic/include -I. -I/usr/local/include/eigen3/eigen3 -I/usr/include/gazebo-11/gazebo/msgs -I/home/lixing/PX4-Autopilot/build/px4_sitl_default/mavlink -I/home/lixing/PX4-Autopilot/build/px4_sitl_default/mavlink/mavlink/v2.0 -I/usr/include/Paging -I/home/lixing/PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic/external/OpticalFlow/include -I/usr/include/gstreamer-1.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -isystem /usr/include/gazebo-11 -isystem /usr/include/bullet -isystem /usr/include/simbody -isystem /usr/include/sdformat-9.10 -isystem /usr/include/ignition/math6 -isystem /usr/include/OGRE -isystem /usr/include/OGRE/Terrain -isystem /usr/include/OGRE/Paging -isystem /usr/include/ignition/transport8 -isystem /usr/include/ignition/msgs5 -isystem /usr/include/ignition/common3 -isystem /usr/include/ignition/fuel_tools4 -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -isystem /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -isystem /usr/local/include/eigen3 -isystem /usr/local/opencv3.4/include/opencv4 -isystem /usr/include/sdformat-9.10/sdf/.. -isystem /usr/include/ignition/cmake2 -isystem /usr/include/uuid -O2 -g -DNDEBUG -fPIC -Wno-deprecated-declarations -Wno-address-of-packed-member -I/usr/include/uuid -std=gnu++17 -MD -MT CMakeFiles/gazebo_aruco_plugin.dir/src/gazebo_aruco_plugin.cpp.o -MF CMakeFiles/gazebo_aruco_plugin.dir/src/gazebo_aruco_plugin.cpp.o.d -o CMakeFiles/gazebo_aruco_plugin.dir/src/gazebo_aruco_plugin.cpp.o -c /home/lixing/PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic/src/gazebo_aruco_plugin.cpp In file included from /home/lixing/PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic/src/gazebo_aruco_plugin.cpp:31: /home/lixing/PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic/include/gazebo_aruco_plugin.h:42:10: fatal error: opencv2/aruco.hpp: 没有那个文件或目录 42 | #include <opencv2/aruco.hpp> | ^~~~~~~~~~~~~~~~~~~ compilation terminated. [77/115] Building CXX object CMakeFile...ir/src/gazebo_user_camera_plugin.cpp.o ninja: build stopped: subcommand failed. [1068/1072] Linking CXX executable bin/px4 FAILED: external/Stamp/sitl_gazebo-classic/sitl_gazebo-classic-build cd /home/lixing/PX4-Autopilot/build/px4_sitl_default/build_gazebo-classic && /usr/bin/cmake --build /home/lixing/PX4-Autopilot/build/px4_sitl_default/build_gazebo-classic -- -j 12 ninja: build stopped: subcommand failed. make: *** [Makefile:227:px4_sitl] 错误 1 lixing@lixing:~/PX4-Autopilot$
最新发布
07-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值