FindOpenSceneGraph¶
查找 OpenSceneGraph (OSG),一个 3D 图形应用程序编程接口。
注意
OpenSceneGraph 的开发已大部分转向其后续项目 VulkanSceneGraph,新代码应优先使用 VulkanSceneGraph。有关使用 CMake 与 VulkanSceneGraph 的指南,请参阅上游文档。
本模块搜索 OpenSceneGraph 核心 osg 库、其依赖项 OpenThreads 以及其他 OpenSceneGraph 库(如果指定,其中一些也称为 *NodeKits*)。
使用 OpenSceneGraph 时,其核心库头文件应包含在 C++ 项目源代码中,如下所示:
example.cxx¶#include <osg/PositionAttitudeTransform>
OpenSceneGraph 库和 NodeKits 的头文件遵循类似的包含结构,例如:
example.cxx¶#include <osgAnimation/Animation>
#include <osgDB/DatabasePager>
#include <osgFX/BumpMapping>
// ...
组件¶
OpenSceneGraph 工具包由核心库 osg 和其他库组成,这些库可以选择通过 find_package() 命令指定为组件
find_package(OpenSceneGraph [COMPONENTS <components>...])
支持的组件包括
osg查找核心 osg 库 (
libosg),使用 OpenSceneGraph 所必需。此组件总是自动隐含。OpenThreads通过
FindOpenThreads模块查找依赖的 OpenThreads 库 (libOpenThreads)。此组件总是自动隐含,因为它是使用 OpenSceneGraph 所必需的。osgAnimation查找 osgAnimation 库,该库提供通用的动画实用类。
osgDB查找 osgDB 库,用于支持场景图的读写。
osgFX查找 osgFX NodeKit,它提供了一个实现特效的框架。
osgGA查找 osgGA (GUI Abstraction) 库,它提供与不同窗口系统协同工作的功能。
osgIntrospection查找 osgIntrospection 库,该库提供了一个反射框架,用于在运行时访问和调用类属性和方法,而无需修改类。
注意
自 OpenSceneGraph 3.0 版本起,osgIntrospection 库已从 OpenSceneGraph 工具包中移除。
osgManipulator查找 osgManipulator NodeKit,它提供 3D 交互式操作器的支持。
osgParticle查找 osgParticle NodeKit,它提供粒子效果的支持。
osgPresentation查找 osgPresentation NodeKit,它提供基于 3D 场景图的演示支持。
注意
此 NodeKit 已在 OpenSceneGraph 3.0.0 中添加。
osgProducer查找 osgProducer 实用程序库,它提供窗口管理和事件处理功能。
注意
osgProducer 已从 OpenSceneGraph 工具包的早期 1.x 版本中移除,并已被 osgViewer 库取代。
osgQt查找 osgQt 实用库,它提供各种类以帮助 Qt 的集成。
注意
自 OpenSceneGraph 3.6 版本起,此库已移至其自己的存储库。
osgShadow查找 osgShadow NodeKit,它提供对各种阴影技术的支持。
osgSim查找 osgSim NodeKit,它增加了对导航灯和 OpenFlight 风格的移动控制等仿真功能的支持。
osgTerrain查找 osgTerrain NodeKit,它提供地理特定地形渲染支持。
osgText查找 osgText NodeKit,它提供高质量的文本支持。
osgUtil查找 osgUtil 库,它提供通用实用程序,如更新、剔除和绘制遍历,以及场景图工具,如优化、三角形剥离和细分。
osgViewer查找 osgViewer 库,它提供高级查看器功能。
osgVolume查找 osgVolume NodeKit,它提供体渲染支持。
osgWidget查找 osgWidget NodeKit,它提供对 2D 和 3D GUI 小部件集的支持。
如果未指定组件,则此模块默认搜索 osg 和 OpenThreads 组件。
结果变量¶
此模块定义了以下变量
OpenSceneGraph_FOUND布尔值,指示是否找到了(所请求版本的)OpenSceneGraph 以及所有指定组件。为了向后兼容,
OPENSCENEGRAPH_FOUND变量也设置为相同的值。OPENSCENEGRAPH_VERSION找到的 OSG 版本。
OPENSCENEGRAPH_INCLUDE_DIRS包含使用 OpenSceneGraph 所需头文件的目录。
OPENSCENEGRAPH_LIBRARIES使用 OpenSceneGraph 所需链接的库。
提示¶
此模块接受以下变量
OpenSceneGraph_DEBUG将此变量设置为布尔值 true 以启用此模块的调试输出。
OpenSceneGraph_MARK_AS_ADVANCED将此变量设置为布尔值 true 以自动将此模块的缓存变量标记为高级。
为了帮助此模块在自定义位置找到 OpenSceneGraph 及其各种组件的安装,可以使用 CMAKE_PREFIX_PATH 变量。此外,以下变量也受支持:
<COMPONENT>_DIR环境变量或 CMake 变量,可以设置为 OSG 公共安装的根目录,其中
<COMPONENT>是上面列出的组件的大写形式。例如,OSGVOLUME_DIR用于查找osgVolume组件。OSG_DIR环境变量或 CMake 变量,可用于影响整个 OpenSceneGraph 安装根位置的检测。
OSGDIR环境变量,处理方式与
OSG_DIR相同。OSG_ROOT环境变量,处理方式与
OSG_DIR相同。
示例¶
使用 osgDB 和 osgUtil 库作为组件查找 OpenSceneGraph,并创建一个封装其使用要求的接口 导入目标,用于链接到项目目标
find_package(OpenSceneGraph 2.0.0 REQUIRED COMPONENTS osgDB osgUtil)
if(OpenSceneGraph_FOUND AND NOT TARGET OpenSceneGraph::OpenSceneGraph)
add_library(OpenSceneGraph::OpenSceneGraph INTERFACE IMPORTED)
set_target_properties(
OpenSceneGraph::OpenSceneGraph
PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${OPENSCENEGRAPH_INCLUDE_DIRS}"
INTERFACE_LINK_LIBRARIES "${OPENSCENEGRAPH_LIBRARIES}"
)
endif()
add_executable(example example.cxx)
target_link_libraries(example PRIVATE OpenSceneGraph::OpenSceneGraph)
另请参阅¶
当查找特定的 OpenSceneGraph 组件时,此模块内部使用以下与 OpenSceneGraph 相关的辅助查找模块。这些模块不打算在 find_package(OpenSceneGraph) 的典型使用期间直接包含或调用。但是,对于需要对组件检测进行更精细控制的高级场景,它们可能很有用。例如,显式查找它们并覆盖或绕过特定 OpenSceneGraph 组件的检测:
Findosg模块用于查找核心 osg 库。FindosgAnimation模块用于查找 osgAnimation。FindosgDB模块用于查找 osgDB。FindosgFX模块用于查找 osgDB。FindosgGA模块用于查找 osgGA。FindosgIntrospection模块用于查找 osgIntrospection。FindosgManipulator模块用于查找 osgManipulator。FindosgParticle模块用于查找 osgParticle。FindosgPresentation模块用于查找 osgPresentation。FindosgProducer模块用于查找 osgProducer。FindosgQt模块用于查找 osgQt。FindosgShadow模块用于查找 osgShadow。FindosgSim模块用于查找 osgSim。FindosgTerrain模块用于查找 osgTerrain。FindosgText模块用于查找 osgText。FindosgUtil模块用于查找 osgUtil。FindosgViewer模块用于查找 osgViewer。FindosgVolume模块用于查找 osgVolume。FindosgWidget模块用于查找 osgWidget。