这是我的第一篇博文,最近在学习QGIS和OSG,在开源软件编译及环境搭建中遇到了一系列的问题,因此也查询学习了网上的很多教程,在几次试验后终于完成了源码的编译和环境配置,写下这篇博文,希望对大家学习如何搭建OSG开发环境有所帮助。
首先介绍一下我的系统环境:我是在WIN10系统下使用VS2010的编译器完成源码的编译,因为OSG有Qt模块,在CMAKE时需要选择选择qmake,我这里编译使用的QT版本是qt4.8.7-vs2010。
1、相关文件
OSG源码:OpenSceneGraph-3.4.0.zip
OSG第三方库:3rdParty_VC10_x86_x64.zip
OSG数据包:OpenSceneGraph-Data-3.4.0.zip
CMake版本:我使用的CMake3.9.3(当前最新版本:cmake-3.10.0-rc2-win32-x86.msi)
其中3rdParty_VC10_x86_x64.zip下载解压后有两个版本x86和x64,由于使用的vs2010是32位,且编译时选择编译32位版本,所以源码编译时第三方库选择x86版本,x64版本可以删除。
2、编译准备
(1)在E盘新建一个OSG文件夹,将上面下载的三个文件解压,解压后的文件夹分别改为:OpenSceneGraph-3.4.0、3rdParty、data并放到OSG文件夹下,将3rdParty文件夹下x64版本删除,在OpenSceneGraph-3.4.0目录下新建build文件夹,之后CMake编译都在此文件夹下进行,如图所示:
(2)打开CMake(cmake-gui),将OpenSceneGraph-3.4.0文件夹下的CMakeLists.txt文件拖到CMake中,然后更改编译路径,如下图所示:
(3)点击Configure按钮,然后在弹出的对话框中选择Visual Studio 102010,Use default native compilers,如下图所示:
(4)点击Finish后,CMake会出现大片红色警告,不用担心,这里的错误大多是路径问题,我们只需要依据Name修改Value正确的路径即可,注意,此处如果路径配置有问题,编译可能会不能通过,或者编译后缺少第三方库等不能打开文件如png等:
(5)修改ACTUAL_3RDPARTY_DIR目录为:E:/OSG/3rdParty/x86,注意:如果不更改目录而由CMake默认,许多其他的第三方插件可能会不能使用,比如不能读取图片和字体等。然后修改CMAKE_INSTALL_PREFIX安装目录,在后续的编译中会将编译结果(bin、include、lib)拷到CMAKE_INSTALL_PREFIX指定的地方,如果这个构建出错,就需要我们手工拷贝库文件头文件等,这里指定目录:E:/OSG/OpenSceneGraph。修改QT_QMAKE_EXECUTABLE的路径到qmake.exe的路径,在本机下为:E:/QT/4.8.7/bin/qmake.exe,并且将BUILD_OSG_EXAMPLES打上对勾,配置如下图所示:
(6)点击Configure之后又出现一堆问题,不要紧,因为这些库不影响我们进行一般的三维开发,只要将BUILD_MFC_EXAMPLE和Advanced打上对勾,如下图所示:
(7)再点击configure,就没有报错了,如图:
(8)最后点击Generate按钮,即在E:\OSG\OpenSceneGraph-3.4.0\build文件夹下可生成相应的工程,如下图所示:
3、编译工程
3.1、使用vs2010打开项目文件OpenSceneGraph.sln,使用vs的生成—批生成工具对项目进行编译,选择ALL_BUILD的Debug和Release,如下图所示,然后选择生成:
3.2、点击生成之后就进入了编译,整个编译过程大概要4个小时,视电脑配置而定,如下图所示,编译全部成功:
3.3、编译完成之后再次打开批处理,将ALL_BUILD的Debug和Release对勾去掉,然后选择INSTALL的Debug和Release版本,点击生成,这个编译会很快,如下图所示:
至此,整个OSG源码编译的过程就完成了。
4、环境配置
如果上述CMAKE_INSTALL_PREFIX指定正确,编译后会在:E:/OSG下新建OpenSceneGraph文件夹,编译生成的bin、include、lib会被拷贝到此文件夹下,为了方便使用我们编译的开发包,将OSG下的data文件夹移动到OpenSceneGraph目录下。我们要使用这些库文件头文件进行二次开发,只需正确的设置环境变量并配置工程附加依赖库即可。
4.1、添加环境变量(此电脑-属性-高级系统设置-高级-环境变量)
新建系统变量:OSG_FILE_PATH:E:\OSG\OpenSceneGraph\data
追加系统变量:PATH:E:\OSG\ OpenSceneGraph\bin
4.2、项目中配置OSG开发库
4.2.1使用VS2010新建C++ WIN32控制台程序,添加一个cpp文件。
4.2.2右键项目,选择“属性”,选择“VC++目录”,在包含目录添加:E:\OSG\OpenSceneGraph \include在库目录添加:D:\OSG\OpenSceneGraph \lib。
4.2.3打开项目属性的链接器-输入里,附加依赖项加上: OpenThreadsd.lib、osgd.lib、osgDBd.lib、osgUtild.lib、osgGAd.lib、osgViewerd.lib、
osgTextd.lib ,在lib文件夹内,每一个库文件均有一个release版本和一个debug版本,库文件名后面带d的如osgd.lib是debug版本,不带d的如osg.lib是release版本。
4.2.4在cpp文件内输入以下代码测试:
#include <osgViewer/Viewer>
#include <osgDB/ReadFile>
int main(int argc, char **argv)
{
osg::ref_ptr<osg::LightSource> ls= new osg::LightSource();
osg::ref_ptr< osg::Light> lt = new osg::Light;
lt->setLightNum(0);
lt->setPosition(osg::Vec4(1.0, -1.0, -1.0, 0));
lt->setAmbient(osg::Vec4(0.2, 0.2, 0.2, 1.0));
lt->setDiffuse(osg::Vec4(1.0, 1.0, 1.0, 1.0));
osgViewer::Viewer viewer;
viewer.getCamera()->setClearColor(osg::Vec4(0,1,1,1));
viewer.setSceneData(osgDB::readNodeFile("glider.osg"));
viewer.setUpViewInWindow(300,100,800,600);
viewer.setLight(lt);
return viewer.run();
}
编译成功运行:
以上就是OSG编译到二次开发环境配置的全过程。