最近工作上要用 OSG 来做三维场景,还需要通过 QT 进行开发,网上的教程都非常零散,有些还已经过时了,在这里记录一下安装过程。
所使用的环境:Windows 11 21H2
OSG
这里基本按照官网的教程 Compiling with Visual Studio 进行。
首先下载 OSG 的源码,我使用的是安装时的最新版本 3.6.5。
git clone --branch OpenSceneGraph-3.6.5 https://github.com/openscenegraph/OpenSceneGraph.git
为了后续操作方便,在 D 盘或其它盘的根目录创建一个名为 OpenSceneGraph-VERSION
的文件夹,VERSION
替换为所使用的版本号,我这里就命名为 OpenSceneGraph-3.6.5
,然后把上面下载的源代码文件夹命名为 OpenSceneGraph
放在该目录下。
我们还需要下载第三方依赖库,在官方的 the Dependencies page 下载 Visual Studio 2017 的依赖包,并命名为 3rdParty
同样放在上一步的目录下。
最后下载 OSG 官方提供的模型文件 Data Resources,命名为 data
放在该目录下。
整个文件结构如下:
OpenSceneGraph-3.6.5
└───OpenSceneGraph
└───3rdParty
└───data
接下来需要使用 CMake 来生成 Visual Studio 的解决方案,如果没有安装 CMake,先下载安装 Download | CMake。
打开之后,在 Where is the source code
的位置选择 OpenSceneGraph
也就是源代码文件夹,下面的 Where to build the binaries
我们新建一个 build
文件夹。
之后点击 Configure
,选择 Visual Studio 2017
以及 x64
平台,点击 Finish
。
注意 ACTUAL_3RDPARTY_DIR
的值为我们创建的 3rdparty
目录,并勾选 BUILD_OSG_EXAMPLES
这一项,其它项可以根据自己的需求进行调整,最后点击 Generate
生成解决方案。
生成完成后,使用 VS 2017 打开 build
目录下的 .sln
。
在 VS 的菜单栏选择 生成
- 批生成
,勾选 ALL_BUILD
的 Debug
和 Release
两项,注意在 解决方案配置
需要选择 x64
,如果此处没有 x64
,可在配置管理器中新建。
点击生成,此处需要等一段时间,视电脑配置而定,我这里 i7-7700HQ 的笔记本大概半小时。
确定编译完成且没有报错之后,继续打开批生成,取消刚才勾选的两项,选择 INSTALL
的 Debug
和 Release
两项,点击生成。
最后一步配置环境变量,将 OSG 的安装目录添加进系统变量的 Path
中。
以及最开始下载的官方模型,新建一个 OSG_FILE_PATH
变量,路径就是我们创建的 data
。
到此 OSG 的安装完成,打开命令提示符,输入 osgversion
可显示 OSG 的版本号,输入 osgviewer cow.osg
会出现这头牛,则证明安装成功。
osgQt
首先下载 osgQt 的源码。
git clone git@github.com:openscenegraph/osgQt.git
我这里使用的 QT 版本为 5.12.6,需要事先将 QT 使用的 MSVC 加入环境变量。
使用 CMake 编译 osgQt,步骤和刚才编译 OSG 基本一致,选择 osgQt 的源码目录,并创建一个 build
目录,点击 Configure
,同样选择 Visual Studio 2017
和 x64
,如果刚才环境变量配置正确,这里所有的内容都会自动补充完成,如果有变量显示 not found,请回头检查环境变量再重新 Configure,没问题后点击 Generate
。
之后和编译 OSG 一样,使用 VS 2017 打开解决方案,分别生成 ALL_BUILD
和 INSTALL
,之后应该可以在安装路径找到 osgQt 的安装文件。
为了之后使用方便,直接复制该目录下的所有文件,粘贴合并到 OSG 的安装目录下,这样 osgQt 也就安装完成了。
测试
安装完成之后写一个简单的 QT 程序来测试一下。
新建项目,为了调用 osgQt 库,需要在 pro 文件中加入这两行,注意替换为自己安装时的实际路径。
LIBS += -L'C:\Program Files\OpenSceneGraph\lib' -losg -losgDB -losgViewer -losgGA -losgUtil -lOpenThreads -losgQOpenGL
INCLUDEPATH += 'C:\Program Files\OpenSceneGraph\include'
调用 osgviewer
显示默认模型。
#include <QApplication>
#include <osgViewer/Viewer>
#include <osgDB/ReadFile>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
osgViewer::Viewer viewer;
viewer.setSceneData(osgDB::readNodeFile("cow.osg"));
return viewer.run();
}
如果可以正常显示牛的模型,则证明安装成功。