说明:
前提条件
操作系统为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 2017x64
-
出现很多行红色底纹的配置项,更改其中两处:
勾选
BUILD_OSG_EXAMPLESCMAKE_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可以退出。




