VS2017 x64 编译OSG 3.7.0 + FFmpeg + OSGEarth 3.4

  • 所有源码、工具下载都需要科学上网,自行解决

一、FFmpeg编译

1、配置msys2环境

  • msys2官网中下载msys2-x86_64-{date}.exe安装
  • 修改msys64/msys2_shell.cmd文件中rem MSYS2_PATH_TYPE=inherit为set MSYS2_PATH_TYPE=inherit,记得备份
  • 打开vs x64命令行提示符工具,运行msys2_shell.cmd,输入以下命令初始化环境
pacman -Syu
pacman -S make
pacman -S diffutils
pacman -S yasm
pacman -S nasm

mv /usr/bin/link.exe /usr/bin/link.exe.bak

2、编译x264源码

  • (注意提前进入某个目录创建一个FFmpeg_Build目录,源码解压在同级目录下)
  • https://github.com/mirror/x264拉下来
  • msys64进入x264目录,执行命令:
curl "http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD" > config.guess
sed -i 's/host_os = mingw/host_os = msys/' configure
  • 开始编译x264,执行以下命令
CC=cl ./configure --prefix=./../FFmpeg_Build --enable-shared
make -j 16 && make install
mv ./../FFmpeg_Build/lib/libx264.dll.lib ./../FFmpeg_Build/lib/libx264.lib

3、编译FFmpeg源码

export CC=cl
 
             ./configure \
             --prefix=./../FFmpeg_Build \
             --toolchain=msvc \
             --arch=x86_64 \
             --enable-yasm  \
             --enable-asm \
             --enable-shared \
             --disable-static \
             --disable-programs \
             --enable-avresample \
             --enable-libx264 \
             --enable-gpl \
             --extra-ldflags="-LIBPATH:./../FFmpeg_Build/lib/" \
             --extra-cflags="-I./../FFmpeg_Build/include/"
make -j 16 && make install
  • 至此FFmpeg编译完成,所有文件都在FFmpeg_Build下

二、编译OSG源码

1、下载源码及数据

  • 源码在OSG Git地址直接拉取
  • 3rdParty_VS2017_v141_x64_V11_fullOpenSceneGraph-Data-3.4.0osg官网下载

2、使用CMake编译

  • 创建一个OSG-3.7.0+OSGEARTH-3.4目录,将源码都解压在同级目录下,并且多创建一个OSG-3.7.0+OSGEARTH-3.4用于存放编译后的文件,目录下分别创建OSG、OSGEarth目录,方便区分
  • 建议打开CMake前将3rdParty_x64\x64目录设置为环境变量
  • 打开CMake、选择OSG的源码根目录,点击Configure,第一栏选择vs2017,第二栏选择x64。然后选择Finish开始加载
  • 搜索ACTUAL_3RDPARTY_DIR,将值设置为3rdParty_x64\x64路径
  • 搜索BUILD_OSG_EXAMPLES,勾选为选中
  • 搜索CMAKE_INSTALL_PREFIX,值设置为OSG-3.7.0+OSGEARTH-3.4/OSG-3.7.0+OSGEARTH-3.4/Osg
  • 点击OPENGL选项展开,修改OPENGL_HEADER1项为#include <GL/glcorearb.h>,修改OPENGL_PROFILE项为GL3
  • 注意: OSGEarth3.3版本必须要OSG支持GL3,所以需要下载另外的GL API文件
  • OpenGL-RegistryEGL-Registry 将OpenGL的GL文件夹和EGL的KHR文件夹复制到OSG源码的include目录下
  • 点击OSG项展开,选中
OSG_GL3_AVAILABLE
  • 取消选中
OSG_GL1_AVAILABLE
OSG_GL2_AVAILABLE
OSG_GLES1_AVAILABLE
OSG_GLES2_AVAILABLE
OSG_GL_DISPLAYLISTS_AVAILABLE
OSG_GL_FIXED_FUNCTION_AVAILABLE
OSG_GL_MATRICES_AVAILABLE
OSG_GL_VERTEX_ARRAY_FUNCS_AVAILABLE
OSG_GL_VERTEX_FUNCS_AVAILABLE
  • 修改OSG_GL_CONTEXT_VERSION项为3.3
  • 然后检查一下你需要使用的库目录是否正常,有可能会找不到lib文件,排查完之后点击Configure,没问题之后点击Generate、Open Project

3、使用VS2017编译源码

  • 编译前先进入osg/Texture头文件,将第60行和第69行注释掉,进入Texture.cpp 添加 #include <algorithm>
  • 选择Release和x64,右击ALL_BUILD开始编译,Debug模式自行选择,等待编译完成,我已经生成过了,过程比较漫长,就随便截图了
  • 然后点击INSTALL安装到之前选择的目录中,注意:这个目录的include中是不带之前的GL和KHR文件夹的,记得手动复制过来
  • 测试代码就不搞了,自行编写或者直接运行osg_viewer.exe cow.osg, 模型在OpenSceneGraph-Data\data中有
  • 将OSG安装目录设为环境变量方便下面的编译

编译OSGEarth源码

1、 下载源码

  • 进入OSGEarth Git地址中release里下载3.4的源码
  • 注意:在src/third_party下三个蓝色链接的项目需要手动下载然后拷贝到此目录下

1.1、 下载并编译需要的库

  • 下载SQLite3源码并编译Release版本
  • 下载glew源码,进入glew-2.1.0\build\vc12打开sln升级到vs2017,编译Release版本

2、 CMake编译源码

  • 步骤与OSG一致,目录选择OSGEarth源码目录
  • 由于设置了环境变量,所以应该不会报错
  • 搜索CMAKE_INSTALL_PREFIX,值设置为OSG-3.7.0+OSGEARTH-3.4/OSG-3.7.0+OSGEARTH-3.4/Earth
  • 然后把SQLite3和GLEW的目录设置进去
  • 展开OSGEARTH选项,勾选OSGEARTH_INSTALL_SHADERS,其中有各种三方插件,按需勾选即可,我这用上了Triton和Silverlining,也建议勾选上,不然后面用到也要再编译
  • 最后点击Generate生成,等待编译完成

3、 使用vs2017编译源码

  • TritonDrawable.cpp 中修改的代码
// 第139行
osgEarth::NativeProgramAdapterCollection& adapters = _adapters[ state->getContextID() ];
// 修改为
auto cid = GLUtils::getSharedContextID(*state);
osgEarth::NativeProgramAdapterCollection& adapters = _adapters[cid];
// 第261行
(::Triton::TextureHandle)_cubeMap->getTextureObject( state->getContextID() )->id(),
// 修改为
(::Triton::TextureHandle)_cubeMap->getTextureObject(cid)->id(),
// 第274行
(::Triton::TextureHandle)_planarReflectionMap->getTextureObject( state->getContextID() )->id(),
// 修改为
(::Triton::TextureHandle)_planarReflectionMap->getTextureObject(cid)->id(),
// 第283行
osg::GLExtensions* ext = osg::GLExtensions::Get(state->getContextID(), true);
// 修改为
osg::GLExtensions* ext = osg::GLExtensions::Get(cid, true);
  • TritonHeightMap.cpp 中修改的代码
// 第225行
osg::GLExtensions* ext = osg::GLExtensions::Get(state.getContextID(), true);
// 修改为
auto cid = GLUtils::getSharedContextID(state);
osg::GLExtensions* ext = osg::GLExtensions::Get(cid, true);
// 第429行
osg::Texture::TextureObject* obj = local._tex->getTextureObject(ri.getContextID());
// 修改为
auto cid = GLUtils::getSharedContextID(*ri.getState());
osg::Texture::TextureObject* obj = local._tex->getTextureObject(cid);
  • SilverLiningCloudsDrawable.cpp中修改
// 第64行
osgEarth::NativeProgramAdapterCollection& adapters = _adapters[ state->getContextID() ];
// 修改为
auto cid = GLUtils::getSharedContextID(*state);
osgEarth::NativeProgramAdapterCollection& adapters = _adapters[cid]; // thread safe.
// 第74行
// 添加
#if ((SILVERLINING_MAJOR_VERSION > 6) || (SILVERLINING_MAJOR_VERSION == 6 && SILVERLINING_MINOR_VERSION >= 24))
            adapters.push_back(new osgEarth::NativeProgramAdapter(state, _SL->getAtmosphere()->GetBillboardShaderInstanced(), NULL, "BillboardShaderInstanced"));
#endif
  • SilverLiningContext.cpp中修改
// 第272行
osg::Vec3d north = osg::Vec3d(0, 1, 0);
// 修改为
osg::Vec3d north = _srs->isGeographic() ? osg::Vec3d(0, 0, 1) : osg::Vec3d(0, 1, 0);
  • SilverLiningAPIWrapper中AtmosphericConditions类GetLocation函数下添加void SetTime(tm* local_time);cpp中添加以下代码设置时区
void AtmosphericConditions::SetTime(tm* local_time)
{
        ::SilverLining::LocalTime lt;
        lt.SetHour(local_time->tm_hour);
        lt.SetMinutes(local_time->tm_min);
        lt.SetSeconds(local_time->tm_sec);
        lt.SetDay(local_time->tm_mday);
        lt.SetMonth(local_time->tm_mon + 1);
        lt.SetYear(local_time->tm_year + 1900);
        HANDLE->SetTime(lt);
}
  • 然后选择Release、x64右击ALL_BUILD编译,编译完成后INSTALL,完成之后所有文件就都在earth目录中了
  • 最后把所有的Bin、Include、Lib文件夹合并,再清除编译用的环境变量,把合并后的目录设置为环境变量,vs中添加即可使用

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
使用VS2019编译OSG 3.7.0、OSGEarth 3.3和OSGQt需要按照以下步骤进行操作: 1. 首先,确保你已经安装了Visual Studio 2019。可以从官方网站上下载并按照指南进行安装。 2. 接下来,下载OSG 3.7.0的源代码。可以从OSG的官方网站上找到源代码的下载链接。 3. 在Visual Studio 2019中创建一个新的空白项目。选择合适的项目类型,例如Win32控制台应用程序。 4. 将下载的OSG 3.7.0源代码解压缩到项目文件夹中。在Visual Studio 2019中添加这些源代码文件到项目中。 5. 打开项目的属性窗口。在“配置属性”部分,选择“所有配置”和“所有平台”,然后选择“C/C++”项。 6. 添加OSG的头文件目录和库文件目录到“附加包含目录”和“附加库目录”中。 7. 编译项目,并确保没有错误或警告。 8. 下载OSGEarth 3.3的源代码。可以从OSGEarth的官方网站上找到源代码的下载链接。 9. 将下载的OSGEarth 3.3源代码解压缩到项目文件夹中。在Visual Studio 2019中添加这些源代码文件到项目中。 10. 打开项目的属性窗口。在“配置属性”部分,选择“所有配置”和“所有平台”,然后选择“C/C++”项。 11. 添加OSGEarth的头文件目录和库文件目录到“附加包含目录”和“附加库目录”中。 12. 编译项目,并确保没有错误或警告。 13. 最后,下载OSGQt的源代码。可以从OSGQt的官方网站上找到源代码的下载链接。 14. 将下载的OSGQt源代码解压缩到项目文件夹中。在Visual Studio 2019中添加这些源代码文件到项目中。 15. 打开项目的属性窗口。在“配置属性”部分,选择“所有配置”和“所有平台”,然后选择“C/C++”项。 16. 添加OSGQt的头文件目录和库文件目录到“附加包含目录”和“附加库目录”中。 17. 编译项目,并确保没有错误或警告。 以上是使用VS2019编译OSG 3.7.0、OSGEarth 3.3和OSGQt的大致步骤。请根据具体环境和需求进行相应的设置和调整。如果出现问题,可以参考相关的文档和论坛进行进一步的解决。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值