FindOpenSceneGraph¶
查找 OpenSceneGraph (OSG),一个 3D 图形应用程序编程接口
find_package(OpenSceneGraph [<version>] [COMPONENTS <components>...] [...])
注意
OpenSceneGraph 的开发已很大程度上迁移到其后继项目 VulkanSceneGraph,新代码应优先选择后者。有关将 VulkanSceneGraph 与 CMake 结合使用的指导,请参阅上游文档。
此模块搜索 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查找使用 OpenSceneGraph 所必需的核心 osg 库(
libosg)。此组件始终自动隐含。OpenThreads通过
FindOpenThreads模块查找依赖项 OpenThreads 库(libOpenThreads)。由于使用 OpenSceneGraph 需要它,因此此组件始终自动隐含。osgAnimation查找 osgAnimation 库,它提供通用的动画工具类。
osgDB查找 osgDB 库,用于读取和写入场景图支持。
osgFX查找 osgFX NodeKit,它提供了一个用于实现特殊效果的框架。
osgGA查找 osgGA(GUI Abstraction)库,它提供了与各种窗口系统交互的设施。
osgIntrospection查找 osgIntrospection 库,它提供了一个反射框架,用于在运行时访问和调用类属性和方法,而无需修改类。
注意
osgIntrospection 库已从 OpenSceneGraph 版本 3.0 开始从 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_FOUND3.3 版本中新增。
一个布尔值,指示是否找到(所请求版本的)OpenSceneGraph 及其所有指定的组件。
OpenSceneGraph_VERSION版本 4.2 中添加。
找到的 OpenSceneGraph 的版本。
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相同。
已弃用变量¶
以下变量提供用于向后兼容性
OPENSCENEGRAPH_FOUND版本 4.2 已弃用: 使用
OpenSceneGraph_FOUND,其值相同。一个布尔值,指示是否找到(所请求版本的)OpenSceneGraph 及其所有指定的组件。
OPENSCENEGRAPH_VERSION版本 4.2 已弃用: 被
OpenSceneGraph_VERSION取代。找到的 OpenSceneGraph 的版本。
示例¶
查找 OpenSceneGraph,并指定 osgDB 和 osgUtil 库作为组件,然后创建一个导入目标(imported target)来封装链接到项目目标的使用要求
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 组件的检测
查找核心 osg 库的
Findosg模块。查找 osgAnimation 的
FindosgAnimation模块。查找 osgDB 的
FindosgDB模块。查找 osgDB 的
FindosgFX模块。查找 osgGA 的
FindosgGA模块。查找 osgIntrospection 的
FindosgIntrospection模块。查找 osgManipulator 的
FindosgManipulator模块。查找 osgParticle 的
FindosgParticle模块。查找 osgPresentation 的
FindosgPresentation模块。查找 osgProducer 的
FindosgProducer模块。查找 osgQt 的
FindosgQt模块。查找 osgShadow 的
FindosgShadow模块。查找 osgSim 的
FindosgSim模块。查找 osgTerrain 的
FindosgTerrain模块。查找 osgText 的
FindosgText模块。查找 osgUtil 的
FindosgUtil模块。查找 osgViewer 的
FindosgViewer模块。查找 osgVolume 的
FindosgVolume模块。查找 osgWidget 的
FindosgWidget模块。