当前位置:网站首页>HoloLens第三视角开发【保姆级教程】【踩坑记录】
HoloLens第三视角开发【保姆级教程】【踩坑记录】
2022-07-23 04:10:00 【AplusX】
目录
实验设备及运行环境
- Hololens 2
- Windows 10
- VS 2019
- Unity 2020(其他版本应该都行)
实施步骤
官方教程
https://github.com/microsoft/MixedReality-SpectatorView/tree/v1.1.0
下面根据官方教程和自己的实际经验来说明:
一、获取官方的第三视角工程
git clone https://github.com/your_github_name/你刚才新建的repository的名字.git

5. 在cmd中将路径切换到新建的本地文件夹下
6. 将MixedReality-SpectatorView代码基作为项目的子模块。在cmd中输入
https://github.com/microsoft/MixedReality-SpectatorView.git sv
- 步骤6中的子模块的名字叫sv。仙子在cmd中将目录更改为sv文件夹下。
- 选择
MixedReality-SpectatorView工程项目分支,这里我们选择1.1.0
i. git fetch origin release/1.1.0
ii. git checkout release/1.1.0
iii. git branch
二、本地环境设置
- 新建一个Unity工程(比如UnitySpectator),将这个工程和刚才下载好的sv文件夹放在同级目录下。
- 在您的 PC 上以管理员身份运行cmd,并输入’Your_sv_file_location/tools/Scripts/SetupRepository.bat’(或者直接手动双击打开bat文件)

- 关闭所有Unity工程
- 现在,将cmd的路径切换至包含sv和Unity工程(比如UnitySpectator)的文件夹下

在cmd中输入
sv\tools\Scripts\AddDependencies.bat -AssetPath "UnitySpectator\Assets" -SVPath "sv"
总之,这里都是相对路径,大家可以根据自己情况来。现在,当您在 Unity 中重新打开项目时,第三视角相关文件夹应该出现在项目的 Assets 文件夹中。
三、Unity工程依赖的第三视角dll生成
1. 确保您拥有构建和使用 Spectator View 所需的所有软件和硬件。
2. 将空间对齐所需的依赖项添加到 Unity 项目中。
这一步坑比较多,上链接
我们选择的是基于QR Code的检测方式。这一步,我需要花点版面来填一下坑。
根据上图及相关链接:
- 下载
QR APIs库 ,链接 - 构建
SpectatorView.WinRTExtensions.dll的 x86 Release 版本,并将关联的 dll 包含在您的 Unity 项目中。链接
这一步的目的是为了让SpectatorView.Native.sln工程能够运行成功,并生成下面几个dll
- 下载
DeckLink相关软件和SDK,下载链接
注意:下载10.9.11版本的。 - 软件傻瓜式安装,SDK压缩包可以解压至任何位置。
- 打开下面这个sv里面的
dependencies.props文件,换一下 DeckLink的头文件

- 下载
Elgato Capture Card相关库。具体方法为:新建一个文件夹,将cmd的路径切换至这个文件夹下;输入:
git clone https://github.com/elgatosf/gamecapture
然后再打开上面的dependencies.props文件,改一下Elgato的路径
7. 安装Opencv,简直是巨坑,如果没卡在这里真的是太幸福了。
- 安装Vcpkg
- 创建一个Vcpkg文件夹
- 使用管理员模式打开cmd,路径切换Vcpkg文件夹下
- 在cmd中输入
git clone https://github.com/Microsoft/vcpkg - cd vcpkg
- .\bootstrap-vcpkg.bat
- .\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
- 使用管理者模式打开cmd,将路径切换为
Your_path\vcpkg\buildtrees\tiff\src\vX.X.X-xxxxxxxxx.clean\文件夹下 - 在cmd中,我们启动一个空的 git 存储库,将文件的当前版本添加到其中并提交它:
git init .
git add .
git commit -m “temp”
注意:前两条注意 点 前面的空格。我是加了空格,不知道不加行不行。
- 手动进入
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);
替换为:
#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
在第 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);
替换为:
#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
保存文件并关闭它。
- 回到我们的cmd命令行,我们希望得到上次提交和更改文件之间的差异,并将其作为差异文件输出。这是我们的补丁文件。为此,我们在cmd中继续输入:
git diff --ignore-space-at-eol --output Fix_UWP_Tiff.patch
现在我们的 vX.XX-xxxxxxxxx.clean 文件夹中应该有一个 Fix_UWP_Tiff.patch 文件。将此文件移动到
Your path\vcpkg\ports\tiff\我们打开同一文件夹中的“portfile.cmake”,在Fix_UWP_Tiff.patch第12行的“FindCMath.patch”之后添加,保存。

在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
打开https://www.ipaddress.com查一下raw.githubusercontent.com的ipv4地址
使用管理员权限打开C:/Windows/System32/中的hosts文件。我的路径是:

添加一行
199.232.68.133 raw.githubusercontent.com
注意:199.232.68.133是我查到的地址,大家最好再确认一下。保存并关闭。重新在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就好了
- 打开
YourPath\sv\tools\Scripts文件夹,使用管理员模式运行CopyPluginsToUnity.bat。
- 查看
sv路径\src\SpectatorView.Unity\Assets\SpectatorView.Native\Plugins里面就有相应的dll了。
未完待续~
边栏推荐
- [c #] IEnumerable enumerable type interface analysis yield
- Data warehouse: workflow design and Optimization Practice
- EasyCVR平台CGO回放回调参数缺失导致设备录像无法播放,该如何解决?
- 赛尔运维:高校IT运维服务新样本
- [learning notes] graph theory thinking problem
- kex_exchange_identification: read: Connection reset by peer 不完美解决办法(之一)
- 金仓数据库 KingbaseES SQL 语言参考手册 (8. 函数(一))
- 【学习笔记】AGC022
- RDB和AOF的优缺点
- SAP batch import template (WBS batch import as an example)
猜你喜欢

振奋人心 元宇宙!下一代互联网的财富风口

Richview textbox items textbox

What is the difference between College coder and 985 programmer?

Rapid SQL all platforms high performance SQL code

RTC 性能自动化工具在内存优化场景下的实践

UnityC#实现中文汉字转拼音-使用微软CHSPinYinConv库

Customer first | domestic Bi leader, smart software completes round C financing

After 100 billion of revenue, Alibaba cloud ecosystem has a new way to play

MySQL three table query problem

百度沈抖:聚焦场景深耕行业,为企业数字化带来实际成效
随机推荐
MySQL three table query problem
Rapid SQL All-Platforms高性能 SQL 代码
Kingbasees SQL language reference manual of Jincang database (4. Pseudo column)
Kingbasees SQL language reference manual of Jincang database (8. Function (I))
Underlying mechanism of pointer
22、wpf之Combobox使用小记
ANTLR4 入门学习(一):下载和测试
Flask学习笔记
kex_exchange_identification: read: Connection reset by peer 不完美解决办法(之一)
Redis安装
Sequence model (III) - sequence model and attention mechanism
2022/7/20
Sonar中如何删除一个项目
Kingbasees SQL language reference manual of Jincang database (8. Function (2))
[learning notes] graph theory thinking problem
CLion + MinGW64配置C语言开发环境 Visual Studio安装
SeekTiger的Okaleido有大动作,生态通证STI会借此爆发?
SSM framework takeout ordering system
How to query data differences between two isomorphic tables of massive data
[summary]