1. 数据资源准备

OSG官方网站上下载最新的源码包。一般要求下载三个包:

  1. OpenSceneGraph-3.6.3,OSG的源码包。
  2. osg-3rdparty-cmake-master.zip,源码包依赖的第三方库。
  3. OpenSceneGraph-Data-3.4.0.zip,自带的一些数据资源文件。

同时还需要提前安装好VisualStudio环境,我这里用的VS2015;以及cmake,用来生成VS工程,我这里用的最新的cmake3.13.3。

2. 编译第三方库

在VS2015下官方并没有提供编译好的包,只能自己编译,这一步如果有已经编译好的第三方库则可以跳过。建议没库编译经验的同学用其他VS版本跳过这一步,或者找已经编译好的版本(本文最后提供已经编译好的版本)。

解压下载好的第三方库包osg-3rdparty-cmake-master,就会发现里面有个download_dependencies.bat,用记事本打开:

也就是说第三方库源代码需要通过这个批处理文件来获取,最后会下载到C:\3rdparty这个文件夹(不想下载可以从本文最后处地址获取)。里面有三个cmd不识别的命令:git、curl以及7z。可以参考《Git安装教程(windows)》来安装git;参考《windows(64位)下使用curl安装》来安装curl;至于7z可以安装7-Zip

都安装好以后,将download_dependencies.bat加载cmd里面运行,等待下载完成就可以了,注意在cmd里面检查批处理命令的输出结果。

下载完成以后,打开cmake,填入source目录以及build目录,点击configure,选择VS2015-64位编译器,configure完成后,按照如下配置进行再次configure,直到没有红色高亮显示。

点击Generate生成VS工程,用VS2015打开,生成解决方案,等待编译完成就可以了。编译完成后单独生成INSTALL工程,编译结果就会自动安装到CMAKE_INSTALL_PREFIX设置的文件夹。

3. 编译GDAL

可参看我的另外一篇文章《Win64下编译集成GEOS和Proj4的GDAL》。建议不熟悉GDAL的同学直接找编译好的版本就可以了。或者直接略过,GDAL应该只是可选的编译项之一。

4. 编译OSG

解压源码包,文件夹重命名为OpenSceneGraph-3.6.3。启动cmake,填入源代码路径和编译路径,点击Configure,界面就会出现一些编译选项。

之前很多资料说多Configure几次,cmake会把有问题的地方红色高亮显示。但是到我这里最后红色高亮却消失了,只是会提示找不到对应的类库。以防万一我还是将这些依赖库一一配置进去了。注意配置以下几个选项:

1) CMAKE_INSTALL_PREFIX:

cmake得到的工程都有install工程,生成之后就会自动把需要的头文件、lib还有dll复制到对应的目录中去,这样方便我们管理。可以把这里设置成一个我们想要的目录,我这里设置的是D:\Work\OSGBuild\OpenSceneGraph-3.6.3\install。

2) BUILD_OSG_EXAMPLES/BUILD_MFC_ EXAMPLE:

这两个都是OSG的示例,可以勾选编译进去方便以后学习。

3) ACTUAL_3RDPARTY_DIR

这里设置成第三方库的路径,我这里设置成上面编译好的第三方库安装路径:D:\Work\OSGBuild\osg-3rdparty-cmake-master\install。当然这里也可以是下载的已经编译好的第三方路径。

设置好这三项,再次Configure。第三方库有9个:zlib、libpng、libjpeg、libtiff、FreeType、GLUT、GIFLIB、MINIZIP、curl,再加上一个GDAL。仔细看输出,如果存在库没找到,则会提示对应的库Could NOT find。

如果一旦发现没找到对应的库,可以回头找对应的配置项。勾选Grouped和Advanced可以方便查找,以下是我自己配置的路径。

仔细看就会知道万变不离其宗,简单来说就是include找头文件,library找.lib,debug找debug的.lib,release找release的.lib。

4) BUILD_DOCUMENTATION

勾选这个,可以生成编译OSG帮助文档的工程,可参照这篇文章《VS2010+64+OSG3.2.1之一帮助文档的生成》。注意这篇文章的第三个设置好像没必要了,可以直接生成chm。

5) 编译过程的问题

修改以上配置Configure没有问题之后,点击Generate,就可以生成工程文件。用VS2015打开工程,生成解决方案,剩下的就是漫长的等待了。编译完成之后有个osgviewerMFC生成错误:

在网上查找解决方案,原因是VS2015已经不支持太远古的VC了。在这个项目的stdafx.h文件中,找到WINVER和_WIN32_WINNT的宏定义,修改为

// Modify the following defines if you have to target a platform prior to the ones specified below.
// Refer to MSDN for the latest info on corresponding values for different platforms.
#ifndef WINVER // Allow use of features specific to Windows XP or later.
#define WINVER 0x0601 // Change this to the appropriate value to target other versions of Windows.
#endif #ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later.
#define _WIN32_WINNT 0x0601 // Change this to the appropriate value to target other versions of Windows.
#endif

也就是将0x501修改为0x0601,这段的含义也就是指定需要win7及以上版本的windows来运行。

再次生成解决方案,编译就没有问题了。

6) 安装

分别仅单独生成doc_openscenegraph和doc_openthreads,就会生成帮助文档。仅单独生成INSTALL,OSG的所有依赖、文档就会发送到CMAKE_INSTALL_PREFIX设置的目录中。最后目录中的结果:

5. 测试环境

看了很多资料基本上都是在安装绝对环境,好处是配置好了本机哪里都可以通过文件名调用,不过坏处是一旦存在相同的dll环境或者换了电脑就麻烦了。我这里习惯配置相对环境,只要拷贝好代码,在任何电脑都可以直接使用,不用费心再配置一次。

如下图所示,建立文件夹:

将我们刚刚编译的OSG的dll拷贝到bin/bin_D目录里面,带_D的表示是debug版本,注意第三方库的dll也应该拷贝进去。include文件夹就是OSG安装的include文件夹,里面是OSG的头文件。lib/lib_D则放入OSG的lib文件。HelloOSG就是我们用VS2015新建的空白win32控制台工程。

在新建main.cpp文件,编写下面代码:

//main.cpp

#include <iostream>
#include <Windows.h> #include <osgViewer/Viewer>
#include <osgDB/ReadFile> using namespace std; int main()
{
//这里修改成OSG数据包里面的实例数据
string osgPath = "D:\\Work\\OSGBuild\\OpenSceneGraph-Data\\cow.osg"; osgViewer::Viewer viewer;
osg::Node * node = new osg::Node;
node = osgDB::readNodeFile(osgPath);
viewer.setSceneData(node);
return viewer.run();
}

在工程属性中,按照如下设置:

  1. 指定头文件文件夹

  2. 指定lib文件夹

  3. 指定lib文件

  4. 指定dll的文件夹

大家可以配置一个选项然后编译运行试试,就可以体会到程序具体是如何使用C/C++动态库的。注意debug设置debug目录,release设置release目录。由于我这里都是设置的相对目录,即使换了电脑仍然可以使用。最后运行的结果:

6. 资源下载

全套的编译资源(包含编译的chm帮助)都已经上传到网盘:https://pan.baidu.com/s/1V5c2_XO1167y3yg1S9OEFA ,密码:70fh。

其中第一个文件夹内就是第2节提到的bat命令下载的第三方源码。所有的动态库都是VS2015-64位编译的,包含了debug和release两套dll。

7. 参考文献

  1. OSG环境搭建(OSG3.6.2+VS2017+Qt5.10.1)
  2. VS2015+OSG3.6.1编译问题
  3. OSG3.4.0+VS2010+WIN10编译及二次开发环境搭建
  4. VS2010+64+OSG3.2.1之一帮助文档的生成

Win64下编译OSG详细过程(Win10+VS2015+OSG3.6.3)的更多相关文章

  1. Linux系统CentOS6.2版本下安装JDK7详细过程

    Linux系统CentOS6.2版本下安装JDK7详细过程 分类: Linux 2014-08-25 09:17 1933人阅读 评论(0) 收藏 举报 前言:        java 是一种可以撰写 ...

  2. 在Windows下编译FFmpeg详细说明

    MinGW:一个可自由使用和自由发布的Windows特定头文件和使用GNC工具集导入库的集合,允许你生成本地的Windows程序而不需要第三方C运行时 MinGW,即 Minimalist GNU F ...

  3. Linux下安装mongodb详细过程

    本次安装mongodb使用yum.repo方式.详细过程请参考,也列出一些安装过程中的错误,欢迎指正. mongodb版本:3.0 先在linux下cd 到 /etc/yum.repos.d/ 新建脚 ...

  4. Win10下安装tensorflow详细过程

    首先声明几点: 安装tensorflow是基于Python的,并且需要从Anaconda仓库中下载. 所以我们的步骤是:先下载Anaconda,再在Anaconda中安装一个Python,(你的电脑里 ...

  5. Win64下编译集成GEOS和Proj4的GDAL

    目录 1.编译GEOS 2.编译Proj4 3.GDAL集成Proj4和GEOS 1) 修改安装的目录 2) 配置Proj4 3) 配置GEOS 4) 自定义动态库名称(可跳过) 5) 编译 1.编译 ...

  6. FFMPEG在windows平台编译的详细过程,包括环境安装

    下面开始: 由于FFMpeg是基于Linux开发的开源项目,源代码和Windows下最常见的Visual Studio提供的C/C++编译器不兼容,因此它不能使用MSVC++编译.要想使用FFMpeg ...

  7. android build 编译打印详细过程

    我们在make otapackage编译android代码的时候,有时候需要跟踪详细的过程,包括所有的过程,可以修改build/core/Makefile,赋值hide := 为空即可

  8. JAVA java调用C++动态链接库dll,有详细过程。VS2015+Eclipse以及失败解决方案

    一.新建Java工程,在Java类中声明一个native的方法 新建Java项目 在新建的项目中创建packet(包),并且在包下创建一个Class(类). 接下来,在该类中添加如下代码: ? 1 2 ...

  9. aarch64架构下安装tensorflow详细过程

    本人使用的是: EAIDK-610开发板,Redhat的Linux系统,arm64架构,python3.6环境. 重要的: 一定要下载符合自己环境架构相同的tensorflow安装包. 三种架构: x ...

随机推荐

  1. 使用XHProf分析PHP性能瓶颈(二)

    上一篇文章里,我们介绍了如何基于xhprof扩展来分析PHP性能,并记录到日志里,最后使用xhprof扩展自带的UI在web里展示出来.本篇文章将讲述2个知识点: 使用xhgui代替xhprof的默认 ...

  2. Python(1)

    Python 学习 Part1 1. 斐波那契数序列 >>> a,b=0,1 >>> a 0 >>> b 1 >>> while ...

  3. 微信小程序-获取经纬度

    微信小程序-获取经纬度 最近公司新功能 要求在外的市场人员 发送位置信息回来. 用的还是微信小程序开发.... 微信小程序 提供一个接口 getLocation 这个接口反回来的位置 相对实际位置 相 ...

  4. Vim手册

    什么是 vim? Vim是从 vi 发展出来的一个文本编辑器.代码补完.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用. 简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是 ...

  5. 你不知道的JavaScript--Item3 隐式强制转换

    JavaScript的数据类型分为六种,分别为null,undefined,boolean,string,number,object. object是引用类型,其它的五种是基本类型或者是原始类型.我们 ...

  6. BITE

    <Google软件测试之道> 读后感言: p147 提到的BITE实在是太让人心动了, 一个简单的动作即可提交一个信息齐全的bug,连非专业测试人员也能轻松做到.身边很多人也都碰到过提交b ...

  7. 不吹不擂,你想要的Python面试都在这里了【315+道题】

    写在前面 近日恰逢老男孩全栈8期毕业季,课程后期大家“期待+苦逼”的时刻莫过于每天早上内容回顾和面试题问答部分[临近毕业每天课前用40-60分钟对之前内容回顾.提问和补充,专挑班里不爱说话就的同学回答 ...

  8. BZOJ_4804_欧拉心算_欧拉函数

    BZOJ_4804_欧拉心算_欧拉函数 Description 给出一个数字N Input 第一行为一个正整数T,表示数据组数. 接下来T行为询问,每行包含一个正整数N. T<=5000,N&l ...

  9. BZOJ_3524_[Poi2014]Couriers_主席树

    BZOJ_3524_[Poi2014]Couriers_主席树 题意:给一个长度为n的序列a.1≤a[i]≤n. m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r- ...

  10. BZOJ_5249_Luogu_P4364_[2018多省省队联测]_IIIDX_九省联考2018_JLOI2018_线段树

    BZOJ_5249_[2018多省省队联测]IIIDX_线段树 Description [题目背景] Osu听过没?那是Konano最喜欢的一款音乐游戏,而他的梦想就是有一天自己也能做个独特酷炫的音乐 ...