Windows10编译安装OpenSceneGraph(OSG)
说明:
前提条件
操作系统为Windows10,并且已经安装了:
准备工作
-
克隆OSG源码:
git clone https://github.com/openscenegraph/OpenSceneGraph.git
-
下载第三方依赖(选择VisualStudio 2017 - Full package for 64 bit)
-
下载示例项目的模型数据
一、组织文件目录树
按照下面方式组织下载好的内容:
-
D:\OSG
-
OpenSceneGraph
-
CMakeLists.txt等其它源码内容
-
build(自己新建,编译目录)
-
install(自己新建,安装目录)
-
-
3rdParty
- bin、gdal-data等第三方依赖内容
-
OpenSceneGraph-Data
- Catch、Configuration等模型数据内容
-
二、使用CMake生成VS解决方案
-
打开CMake(cmake-gui)程序,
-
源码目录填写
D:/OSG/OpenSceneGraph
-
构建目录填写
D:/OSG/OpenSceneGraph/build
-
-
点击Configure,在弹出的窗口中选择:
-
Visual Studio 15 2017
-
x64
-
-
出现很多行红色底纹的配置项,更改其中两处:
-
勾选
BUILD_OSG_EXAMPLES
-
CMAKE_INSTALL_PREFIX
改为D:/OSG/OpenSceneGraph/install
-
-
继续点击Configure,直到红色底纹消失。
-
点击Generate,生成VS解决方案。完成后,关闭CMake。
三、使用Visual Studio编译并安装
-
使用Visual Studio 2017打开
D:\OSG\OpenSceneGraph\build\OpenSceneGraph.sln
。 -
菜单
生成
→批生成
,勾选项目ALL_BUILD
对应的Debug
和Release
,点击生成。此过程大约需要2小时。
-
右击解决方案资源管理器里的
INSTALL
,点击生成
。完成后关闭Visual Studio。
四、添加环境变量
-
添加如下环境变量:
变量名 值 OSG_ROOT D:\OSG\OpenSceneGraph OSG_BIN_PATH %OSG_ROOT%\install\bin OSG_INCLUDE_PATH %OSG_ROOT%\install\include OSG_LIB_PATH %OSG_ROOT%\install\lib OSG_SAMPLES_PATH %OSG_ROOT%\install\share\OpenSceneGraph\bin OSG_FILE_PATH D:\OSG\OpenSceneGraph-Data -
在PATH环境变量中添加:
-
%OSG_BIN_PATH%
-
%OSG_SAMPLES_PATH%
-
五、测试是否安装成功
在PowerShell中使用以下命令进行测试:
-
osgversion
-
osglogo
-
osgviewer cow.osg
说明:以上命令均为Release版,Debug版的命令需要在最后加个d
,如osgversiond
。
常见问题:
如果可以查看OSG版本,但无法显示Logo,需要将D:\OSG\3rdParty\bin
目录下的zlib.dll
和zlibd.dll
复制到D:\OSG\OpenSceneGraph\install\bin
目录下。
六、HelloWorld
接下来使用Visual Studio 2017创建一个最基本的OSG项目。
-
菜单
文件
→新建
→项目
,选择Visual C++的空项目,确定。 -
工具栏中选择
Debug
、x64
。 -
新建源文件
main.cpp
,写一个空的main函数,运行一下。 -
更改项目属性:
-
C/C++ - 常规 - 附加包含目录:
$(OSG_INCLUDE_PATH)
-
C/C++ - 预处理器 - 预处理器定义:
WIN32
、_WIN32
、NDEBUG
(回车符分隔) -
链接器 - 常规 - 附加库目录:
$(OSG_LIB_PATH)
-
链接器 - 输入 - 附加依赖项:
osgd.lib
、osgGAd.lib
、osgDBd.lib
、osgViewerd.lib
、osgTextd.lib
、osgUtild.lib
、OpenThreadsd.lib
(回车符分隔)
-
-
main.cpp内容:
#include <osgViewer/Viewer>
#include <osgDB/ReadFile>
int main() {
osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer; //创建查看器
osg::ref_ptr<osg::Node> node = osgDB::readNodeFile("glider.osg"); //读取模型文件,赋值给节点指针
viewer->setSceneData(node.get()); //查看器中添加该节点
return viewer->run(); //运行查看器
}
- 运行,会出现一个全屏的滑翔机。按
Esc
可以退出。