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。