if(WIN32) find_package(OpenSceneGraph REQUIRED COMPONENTS osgViewer osgGA osgText osgDB osgUtil osgFX) set(OSG_INCLUDE_DIR ${OPENSCENEGRAPH_INCLUDE_DIRS}) set(OSG_LIBS ${OPENSCENEGRAPH_LIBRARIES}) else(WIN32) # install OpenSceneGraph with sudo apt install libopenscenegraph-3.4-dev find_package(osg REQUIRED COMPONENTS osgViewer osgGA osgText osgDB osgUtil osgFX) set(OSG_LIBS osg osgViewer osgGA osgText osgDB osgUtil osgFX) endif(WIN32)
时间: 2024-01-31 09:04:10 浏览: 80
这段代码是用来做什么的?
这段代码是用来查找和链接 OpenSceneGraph 库的,其中根据平台不同使用不同的方式进行查找和链接。在 Windows 平台下使用 find_package 命令进行查找,然后设置 OSG_INCLUDE_DIR 和 OSG_LIBS 变量;在其他平台下,需要先安装 OpenSceneGraph 库,然后使用 find_package 命令进行查找并设置 OSG_LIBS 变量。
相关问题
find_package(osg REQUIRED COMPONENTS osgViewer osgGA osgText osgDB osgUtil osgFX) set(OSG_LIBS osg osgViewer osgGA osgText osgDB osgUtil osgFX)默认在哪里找
这段代码的意思是使用CMake的`find_package`命令查找OpenSceneGraph (OSG)库,并且要求其包含`osgViewer`、`osgGA`、`osgText`、`osgDB`、`osgUtil`、`osgFX`这些组件。如果找到了这些组件,则会将其添加到变量`OSG_LIBS`中,这个变量可以用于后续的链接。
在默认情况下,`find_package`命令会在系统路径、CMAKE_PREFIX_PATH环境变量指定的路径、CMAKE_MODULE_PATH变量指定的路径中查找对应的库和头文件。如果需要自定义查找路径,可以通过修改`CMAKE_PREFIX_PATH`或`CMAKE_MODULE_PATH`变量来实现。
osgengine.cpp:278:55: error: no member named 'QUIT_LEAVE_RUNNING' in 'osgViewer::ViewerBase'
`osgViewer::ViewerBase` 类中确实没有 `QUIT_LEAVE_RUNNING` 这个成员,可能是因为你使用的是旧版本的 OpenSceneGraph 库。
在较旧的版本中,可以使用以下方式设置退出模式:
```cpp
viewer.setRunMaxFrameRate(0.0); // 设置每秒最大帧率为0
viewer.realize(); // 实现 Viewer
while (!viewer.done()) {
viewer.frame(); // 每帧渲染
}
```
这里通过设置每秒最大帧率为0来实现退出 Viewer,然后在主循环中使用 `viewer.frame()` 函数渲染每一帧。当 `viewer.done()` 函数返回 true 时,表示 Viewer 已经退出,此时可以关闭程序。
如果你使用的是较新的 OpenSceneGraph 库,可以使用以下方式设置退出模式:
```cpp
viewer.setRunFrameScheme(osgViewer::ViewerBase::FrameScheme::ON_DEMAND);
viewer.stopThreading();
```
这里使用 `setRunFrameScheme()` 函数设置退出模式为 `ON_DEMAND`,然后使用 `stopThreading()` 函数在单线程模式下关闭 Viewer。
希望我的回答能够帮助到你。
阅读全文