• HoloLens第三视角开发【保姆级教程】【踩坑记录】


    实验设备及运行环境

    • Hololens 2
    • Windows 10
    • VS 2019
    • Unity 2020(其他版本应该都行)

    实施步骤

    官方教程

    https://github.com/microsoft/MixedReality-SpectatorView/tree/v1.1.0

    下面根据官方教程和自己的实际经验来说明:

    一、获取官方的第三视角工程

    1. 下载Git
    2. 在自己的Github账号下新建一个repository,有关如何设置存储库的更多信息,请参见这里
    3. 使用管理员模式打开cmd
    4. 克隆自己的工程到本地文件夹(anywhere)

    git clone https://github.com/your_github_name/你刚才新建的repository的名字.git

    在这里插入图片描述
    5. 在cmd中将路径切换到新建的本地文件夹下
    6. 将MixedReality-SpectatorView代码基作为项目的子模块。在cmd中输入

    https://github.com/microsoft/MixedReality-SpectatorView.git sv

    1. 步骤6中的子模块的名字叫sv。仙子在cmd中将目录更改为sv文件夹下。
    2. 选择MixedReality-SpectatorView工程项目分支,这里我们选择1.1.0

    i. git fetch origin release/1.1.0
    ii. git checkout release/1.1.0
    iii. git branch

    二、本地环境设置

    1. 新建一个Unity工程(比如UnitySpectator),将这个工程和刚才下载好的sv文件夹放在同级目录下。
    2. 在您的 PC 上以管理员身份运行cmd,并输入’Your_sv_file_location/tools/Scripts/SetupRepository.bat’(或者直接手动双击打开bat文件)
      在这里插入图片描述
    3. 关闭所有Unity工程
    4. 现在,将cmd的路径切换至包含sv和Unity工程(比如UnitySpectator)的文件夹下
      在这里插入图片描述

    1. 在cmd中输入
      sv\tools\Scripts\AddDependencies.bat -AssetPath "UnitySpectator\Assets" -SVPath "sv"
      总之,这里都是相对路径,大家可以根据自己情况来。

    2. 现在,当您在 Unity 中重新打开项目时,第三视角相关文件夹应该出现在项目的 Assets 文件夹中。

    三、Unity工程依赖的第三视角dll生成

    1. 确保您拥有构建和使用 Spectator View 所需的所有软件和硬件。
    2. 将空间对齐所需的依赖项添加到 Unity 项目中。这一步坑比较多,上链接

    我们选择的是基于QR Code的检测方式。这一步,我需要花点版面来填一下坑。
    在这里插入图片描述
    根据上图及相关链接:

    • 下载QR APIs库 ,链接
    • 构建SpectatorView.WinRTExtensions.dll的 x86 Release 版本,并将关联的 dll 包含在您的 Unity 项目中。链接
      这一步的目的是为了让SpectatorView.Native.sln工程能够运行成功,并生成下面几个dll
      在这里插入图片描述
    1. 下载 DeckLink相关软件和SDK,下载链接
      注意:下载10.9.11版本的。
    2. 软件傻瓜式安装,SDK压缩包可以解压至任何位置。
    3. 打开下面这个sv里面的dependencies.props文件,换一下 DeckLink的头文件
      在这里插入图片描述
      在这里插入图片描述
    4. 下载Elgato Capture Card相关库。具体方法为:新建一个文件夹,将cmd的路径切换至这个文件夹下;输入:

    git clone https://github.com/elgatosf/gamecapture

    然后再打开上面的dependencies.props文件,改一下Elgato的路径
    在这里插入图片描述
    7. 安装Opencv,简直是巨坑,如果没卡在这里真的是太幸福了。

    • 安装Vcpkg
    1. 创建一个Vcpkg文件夹
    2. 使用管理员模式打开cmd,路径切换Vcpkg文件夹下
    3. 在cmd中输入git clone https://github.com/Microsoft/vcpkg
    4. cd vcpkg
    5. .\bootstrap-vcpkg.bat
    6. .\vcpkg integrate install
    • 安装OpenCV Contrib

    cmd还是在Vcpkg文件夹下的路径,依次输入:

    .\vcpkg install protobuf:x86-windows
    .\vcpkg install opencv[contrib]:x86-uwp --recurse
    .\vcpkg install opencv[contrib]:x64-windows --recurse

    ……………………………………………………分割线……………………………………………………………………

    进行到第二步x86-uwp的时候报错(如果没报错就跳过 分割线中内容):
    在这里插入图片描述
    解决方案:

    https://github.com/microsoft/MixedReality-SpectatorView/issues/464

    1. 使用管理者模式打开cmd,将路径切换为Your_path\vcpkg\buildtrees\tiff\src\vX.X.X-xxxxxxxxx.clean\文件夹下
    2. 在cmd中,我们启动一个空的 git 存储库,将文件的当前版本添加到其中并提交它:

    git init .
    git add .
    git commit -m “temp”

    注意:前两条注意 点 前面的空格。我是加了空格,不知道不加行不行。

    1. 手动进入Your path\vcpkg\buildtrees\tiff\src\vX.XX-xxxxxxxxx.clean\libtiff\ 文件夹并在文本编辑器中打开 tif_win32.c。

    注意:cmd先别关。

    在第 280 行删除这段代码:

    fd = (thandle_t)CreateFileA(name, (m == O_RDONLY)?GENERIC_READ:(GENERIC_READ | GENERIC_WRITE), FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, dwMode, (m == O_RDONLY)?FILE_ATTRIBUTE_READONLY:FILE_ATTRIBUTE_NORMAL, NULL);
    
    • 1

    替换为:

    	#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) 
    		fd = (thandle_t)CreateFile2(name, (m == O_RDONLY)?GENERIC_READ:(GENERIC_READ | GENERIC_WRITE), FILE_SHARE_READ | FILE_SHARE_WRITE, dwMode, NULL); 
    	#else 
    		fd = (thandle_t)CreateFileA(name, (m == O_RDONLY)?GENERIC_READ:(GENERIC_READ|GENERIC_WRITE), FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, dwMode, (m == O_RDONLY)?FILE_ATTRIBUTE_READONLY:FILE_ATTRIBUTE_NORMAL, NULL); 
    	#endif
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在第 330行删除这段代码:

    fd = (thandle_t)CreateFileW(name, (m == O_RDONLY)?GENERIC_READ:(GENERIC_READ|GENERIC_WRITE), FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, dwMode, (m == O_RDONLY)?FILE_ATTRIBUTE_READONLY:FILE_ATTRIBUTE_NORMAL, NULL);
    
    • 1

    替换为:

    	#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) 
    		fd = (thandle_t)CreateFile2(name, (m == O_RDONLY)?GENERIC_READ:(GENERIC_READ | GENERIC_WRITE), FILE_SHARE_READ | FILE_SHARE_WRITE, dwMode, NULL); 
    	#else 
    		fd = (thandle_t)CreateFileW(name, (m == O_RDONLY)?GENERIC_READ:(GENERIC_READ|GENERIC_WRITE), FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, dwMode, (m == O_RDONLY)?FILE_ATTRIBUTE_READONLY:FILE_ATTRIBUTE_NORMAL, NULL); 
    	#endif
    
    • 1
    • 2
    • 3
    • 4
    • 5

    保存文件并关闭它。

    1. 回到我们的cmd命令行,我们希望得到上次提交和更改文件之间的差异,并将其作为差异文件输出。这是我们的补丁文件。为此,我们在cmd中继续输入:

    git diff --ignore-space-at-eol --output Fix_UWP_Tiff.patch

    1. 现在我们的 vX.XX-xxxxxxxxx.clean 文件夹中应该有一个 Fix_UWP_Tiff.patch 文件。将此文件移动到Your path\vcpkg\ports\tiff\

    2. 我们打开同一文件夹中的“portfile.cmake”,在Fix_UWP_Tiff.patch第12行的“FindCMath.patch”之后添加,保存。
      在这里插入图片描述

    3. 在vcpkg文件夹路径中重新执行.\vcpkg install opencv[contrib]:x86-uwp --recurse

    解决完这个问题后,tiff是没有问题了,但是又出现别的问题了。

    报错:

    error: building opencv4:x86-uwp failed with: BUILD_FAILED
    在这里插入图片描述

    往上翻,我的原因是无法访问raw.githubusercontent.com网站,导致无法下载相关Opencv的库

    解决方案:

    https://blog.csdn.net/u012782078/article/details/106109620?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2defaultCTRLISTdefault-2.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2defaultCTRLISTdefault-2.no_search_link

    1. 打开https://www.ipaddress.com查一下raw.githubusercontent.com的ipv4地址

    2. 使用管理员权限打开C:/Windows/System32/中的hosts文件。我的路径是:
      在这里插入图片描述

    3. 添加一行
      199.232.68.133 raw.githubusercontent.com
      注意:199.232.68.133是我查到的地址,大家最好再确认一下。

    4. 保存并关闭。重新在cmd中执行.\vcpkg install opencv[contrib]:x86-uwp --recurse

    ……………………………………………………分割线……………………………………………………………………

    接分割线上面的第7步(安装Opencv)
    8. 生成dll

    • 使用VS2019打开Your_path/sv/src/SpectatorView.Native/SpectatorView.Native.sln
      依次修改生成x64、x86和ARM的解决方案,生成顺序我是这样的,56颠倒的话总是报错
      在这里插入图片描述
      另外,在build工程1的时候,找不到_WCHAR_T_SIZE的定义而报错:
      在这里插入图片描述
      我自己在开头加了定义#define _WCHAR_T_SIZE 2就好了
    1. 打开YourPath\sv\tools\Scripts文件夹,使用管理员模式运行CopyPluginsToUnity.bat
      在这里插入图片描述
    2. 查看sv路径\src\SpectatorView.Unity\Assets\SpectatorView.Native\Plugins里面就有相应的dll了。

    未完待续~

  • 相关阅读:
    无需公网IP,实现公网SSH远程登录MacOS【内网穿透】
    小程序基础原理
    音视频直播开发问题分析总结 -- 花屏&绿屏
    实验(一):开发环境的安装及基本操作
    JS-String篇(速记用法大汇总)
    qt多线程编程,信号绑定成功,槽函数不响应问题排查处理及总结
    windows安装与配置nacos
    bionic-信号量&backtrace
    ABAP开发常用的BAPI汇总
    酸奶行业内卷成风,品牌乱象层出不穷
  • 原文地址:https://blog.csdn.net/qq_41598072/article/details/125879209