都下最新的就行
E盘下建立OSG文件夹,分别建立如下三个文件夹(文件夹名称随自己,能分清即可)
OpenSceneGraph_3.6.5:存放解压后的OpenSceneGraph-3.6.5文件
3rdParty_x64:用于存放解压后的3rdParty_VS2017_v141_x64_V11_full文件
Data:用于存放解压后的OpenSceneGraph-Data-3.4.0.zip
bulid:用于存放编译后的文件
(1)OSG源码下载
OpenSceneSraph官网:
Stable releases
下载OpenSceneGraph-3.6.5.zip
(2)编译工具下载(CMake)
编译工具选择CMake
官网下载
Download | CMake
下载 cmake-3.24.1-windows-x86_64.msi
(3)第三方库下载
下载自己需要的即可,最好与编译器版本一致
但没有VS2022对应的,只好下载最新的2017版
Dependencies
下载3rdParty_VS2017_v141_x64_V11_full.7z
(4)数据包下载
Data Resources
下载OpenSceneGraph-Data-3.4.0.zip
(1)安装CMake默认安装即可(也可以改位置)
(2)构建
构建时建议配合阅读 “5.测试是否安装配置成功中的错误解决 1)2)",否则待会要编译两次ALL_BUILD,非常痛苦
(题外话,所以看的教程比较短的话最好先阅读一遍,大体了解一下,再进行操作,不要太着急,我来来回回配置了五个多小时,可以说是非常痛苦~)
点击“Configure”按钮进入如下界面,如图所示进行配置
修改ACTUAL_3RDPARIT_DIR的值为E:/OSG/3rdparty
BUILD_OSG_EXAMPLES打勾
CMAKE_INSTALL_PREFIX的值设置为build文件夹路径
再次点击“Configure”按钮
还有红色选项,BULID_MFC_EXAMPLE打勾(VS一定要安装MFC开发组件)
再次点击“Configure”按钮
没有红色选项了
然后点击“Generate”按钮进行生成
注意:编译前一定要安装MFC组件
(1)ALL_BUILD编译
在build目录中,找到生成的OpenSceneGraph.sln文件,然后用VS2022打开:
选择生成-->批生成,在弹出窗口选择ALL BUILD 的 Debug和Release:
点击“生成”
这一步应该会花费较久的时间(15:11~17:00)
如果前面配置无误,此时不会报错
注意:
1、ALL BUILD之前必须安装安装MFC组件
直接去VS2022Community下载,修改-->使用C++的桌面开发-->勾选MFC组件-->修改
2、注意版本,例如afxwin.h类文件中出现很多错误,不要慌!经过观察,出问题的文件基本是afxwin.h,在Examples osgviewerMFC工程中,这个是库文件,一般不会有错误。一般来说,这种问题是MFC编译平台的问题。可以看到改工程的目标编译平台为
其中的_WIN32_WINNT=0x0A00,表明目标平台是Win10的,对应关系如下所示:
参考:使用Windows标头 - Win32 apps | Microsoft Docs
但该工程的定义是0x0501
此定义在该工程下的stdafx.h头文件下
改成如下:
#define WINVER 0x0501 //代表面向XP系统,需要修改,我们是win10系统
#define WINVER 0x0A00 //代表面向Win10系统
改好后保存,再重新ALL_BUILD一下,应该就没有错误了(别担心,这次很快)
(2)INSTALL编译
ALL_BUILD编译完成后,需要进行INSTALL编译
打开生成-->批生成,选择INSTALL的Debug和Rslease,点击“生成”
这个很快
右键计算机-->属性-->高级系统设置-->高级-->环境变量
添加系统环境变量OSG_FILE_PATH,值为前面的Data的目录(E:\OSG\Data)
然后在Path变量中添加前面生成目录build目录中的bin目录(E:\OSG\build\bin)
配置完最好重启一下电脑
(1)命令行测试
Win+R打开命令行窗口
可以看出,有些问题
可以进行拖动,缩放,旋转等操作,但图形渲染有问题,并且logo右边彩色框里的地球没有显示。
不要急,让我们一步一步来解决。
错误解决
1)解决Error reading file E:\OSG\Data\fonts\arial.ttf: file not handled
打开CMake
取消勾选OSG_TEXT_USE_FONTCONFIG,如下图:
配置freetype路径:在我们的E:/OSG/3drParty_x64/x64/ 中
FREETYPE_INCLUDE_DIR_freetype2------include
FREETYPE_INCLUDE_DIR_ft2build------include
FREETYPE_LIBRARY_DEBUG-----------/lib/freetypr271d.lib
FREETYPE_LIBRARY_RELEASE-----------/lib/freetypr271.lib
Configure-->Generate,然后重新打开 .sln解决方案,生成-->批生成,和上边一样,先ALL_BUILD(还是挺慢的,太痛苦了)再INSTALL.然后在命令行再次运行osglogo
解决了,但没有完全解决,还少一个左边框框里的自转的地球,下面解决无法读取jpg文件
2)解决无法读取jpg图片,Error reading file Images/land_shallow_topo_2048.jpg: read error (Could not find plugin to read objects from file "Images/land_shallow_topo_2048.jpg".)
应该是缺少了读取.jpg文件的库
再次CMake配置一下,所以说我为什么没有在第一次配好(大哭)
修改JPEG路径 E:/OSG/3rdParty_x64/x64
JPEG_INCLUDE_DIR---------include
JPEG_LIBRARY_DEBUG-------------lib/jpegd.lib
JPEG_LIBRARY_RELEASE----------lib/jpeg.lib
Configure-->Generate,然后再打开 .sln 解决方案,生成-->批生成,先ALL_BULID,然后再INSTALL,再重新运行
命令行输入osglogo
ohhhhhhhhhhhhhhhhh成功了!!!放鞭炮放鞭炮~
接下来是在VS2022创建项目进行测试
(1)新建与配置
1)C++附加库目录
在VS2022中新建C++空项目,记得要先加上mian.cpp属性里才有C/C++
右键项目名-->属性-->C/C++-->常规-->附加包含目录-->bulid目录下的include目录(对我来说是E:\OSG\build\include),如图:
2)链接库配置
配置链接库目录:
右键项目名-->属性-->链接器-->常规-->附加目录-->bulid下的lib目录(对我来说是E:\OSG\build\lib)
右键项目名-->属性-->链接器-->输入-->附加依赖项,添加如下:
OpenThreadsd.lib osgd.lib osgDBd.lib osgUtild.lib osgGAd.lib osgViewerd.lib osgTextd.lib
注意:在编译生成的lib文件中,每个lib文件有一对名称相似的文件,其中文件名最后一个字母为“d”的为Debug版本所使用的,没有“d”的为Release版本所使用的。
3)定义预处理器
右键项目名-->属性-->C/C++-->预处理器-->预处理器定义,添加WIN32
以上也可以在程序所有头文件最上边加上
#include
(2)代码
#include#include int main() { osgViewer::Viewer viewer; viewer.setSceneData(osgDB::readNodeFile("cow.osg")); return viewer.run(); }
成功!!!
参考文章:
CSDN【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)