缝纫机厂家
免费服务热线

Free service

hotline

010-00000000
缝纫机厂家
热门搜索:
技术资讯
当前位置:首页 > 技术资讯

微软全息眼镜HoloLens解密SDK会是这样

发布时间:2020-03-12 10:46:03 阅读: 来源:缝纫机厂家

首页智能时代智能穿戴 微软全息眼镜HoloLens解密:SDK会是这样? 2015-1-28 15:48:41来源:36氪作者:张静责编:远洋 评论: 在前一篇文章《微软全息眼镜HoloLens解密:如何还原三维场景》中我介绍了自己对于HoloLens背后的建模技术的看法,虽然之前在微软的Xbox部门工作过,但是和大家一样也是上周才知道HoloLens这个好玩的设备。当前微软官方对于HoloLens透露出来的信息非常有限,最核心的两个组件深度传感器以及全息屏幕的原理依然充满着迷题。文章发表后,读者提出了一些问题。

读者提问之“HoloLens的深度传感器有没有可能是基于TOF?”

先介绍下背景知识,市面上常见的有三种类型的深度传感器:

•结构光,这个技术的代表产品是Kinect一代,它的传感器芯片用的是PrimeSense家的。说句题外话,PrimeSense现在是苹果旗下的公司,这个领域未来一定会很精彩。

•TOF,time-of-flight,代表产品是Kinect二代,由于微软对于One这个单词的热爱,它的官方名字是Kinect One,有点混乱是吧?

•双目摄像头,代表产品是Google Tango以及Leap Motion,前者配有四台摄像头,后者有两个。

我认为HoloLens没有使用TOF技术的原因是因为如果这四个摄像头的位置放的是TOF传感器,那么还缺少一个朝前的RGB摄像头用于视频聊天类App。读者提到的中间部分我认为是微型的投影仪,HoloLens使用微投在“挡风玻璃”上显示全息的画面。

至于这个问题的标准答案,还得等微软发布新的信息。

读者提问之“HoloLens能不能当VR用?

这个问题很好,的确可以这么玩,NASA与微软的的火星合作计划基本上是一个虚拟现实的应用,它无视了真实的环境。如果HoloLens可以提供调节“挡风玻璃”透光度的API,那么调成完全不透光时就好比戴着Oculus Rift的头盔,是另一种体验VR的途径。可是朋友们,这是在浪费HoloLens的机能啊!

那么,作为未来的应用开发者,应该怎样充分榨干它的机能呢?这是本篇文章的重点。

正文部分

首先让我脑洞开一会,为大家“介绍”下Holo SDK。按照微软的偏好,SDK标配的语言肯定有C++和C#,因此要进行开发,这两门语言你至少得会一门。

然后,这个SDK里有哪些功能呢?根据官方demo中的场景,我觉得基本功能至少有:

(a)摄像头看到的图像,即当前场景的color buffer。

(b)当前场景的深度图,depth map或z buffer。

(c) SLAM合成后的三维场景,这个场景所在的空间下文我们暂且称为Holo Space,它可能是以乐高方块的形式表示,也可能是用三角形来表示。

(d) HoloLens设备在Holo Space中的坐标(x y z)、朝向(tx ty tz)。

(e)手势识别的结果,类似HRESULT OnGestureDetected(DWORD dwHandId DWORD dwEventId LPVOID lpUserInfo)的样子。

(f)语音识别的结果,类似HRESULT OnVoiceRecognized(std::string& strSentence FLOAT confidence)的样子。同样的,根据官方demo,我将HoloLens应用分为三种:

•伪全息的传统应用

•针对HoloLens特别优化过的应用

•沉浸式的真-全息游戏

这一篇只讲“伪全息的传统应用”这种类型的应用对于传统开发者而言最容易上手,几乎不需要修改代码,自然也不需要拥有3D图形学的知识。大部分人会从这种应用入手开始Holo开发。

如果不需要3D知识就能实现3D的界面,那么3D的效果是哪来的呢?那就是Windows 10引入的全息窗口管理器——explorer3d.exe。我们平时启动Windows看到的“桌面”是窗口管理器(explorer.exe)的一部分,把“桌面”想像成三维的就行了,很简单是吧?

一点都不简单!

以视频播放器为例,播放器并不会直接将视频画面显示到桌面上,而是画到一个缓存区域,经过一系列我不知道的步骤后,explorer.exe再将画面以“2D的方式拷贝”到能被我们看到的地方。而explorer3d.exe用的是“3D的方式”。

所谓“3D的方式”就是使用Direct3D做一些“会的人嫌我讲得啰嗦,不会的人看了还是不会”的事……

也就是在初始化应用的时候:

•创建一个3D的矩形来表示3D的窗口,保存在顶点缓存vertex bufer(可以认为是放在显卡上的数组)

•创建一个贴图texture(可以认为是放在显卡上的图片)

•创建表示窗口平移、旋转、拉伸值的local_matrix(这里的matrix是数学中的矩阵概念,不是电影名称)

在应用运行时:

•如果需要在Holo Space中移动窗口,那么修改local_matrix中的平移值,功能与explorer.exe中的移动窗口类似,只是除了上下(y轴方向)左右(x轴方向)移动外还可以前后(z轴方向)移动。

•如果需要在Holo Space中旋转窗口,那么修改local_matrix中的旋转值。explorer.exe中没有类似的功能。

•如果需要在Holo Space中放缩,那么修改local_matrix中的放缩值,功能与explorer.exe中按住窗口边缘拖拉改变大小一致。

•如果视频内容需要更新,那么更新texture为最新的内容,只有这么做我们才能看到会动的视频。

在应用退出时:

•释放Direct3D的资源

•不用担心,这些都是explorer3d.exe会负责的。

•细心的读者会发现我们没有用到一个很重要的功能:

(d) HoloLens设备在Holo Space中的坐标(x y z)、朝向(tx ty tz)。

要解释它我必须讲解world、view、projection三个矩阵,还要讲解矩阵的乘法以及dot product的公式等等,这些完全是图形学的知识了,一时半会讲不完,我会再专门为它们写一个系列。我打算用一句话解释下,explorer3d.exe会维护一个全局的global_matrix,它等于world * view * projection,view的值由功能(d)中的信息可以得到。global_matrix的作用就好比第一人称射击游戏中的鼠标,写到这里我发现把explorer3d.exe视作一个3D游戏会简单很多,3D游戏场景里的电视机也能播放视频,其实是一样的道理。

总结一下,这个类型的应用程序员几乎不需要修改代码,由explorer3d.exe负责调用Direct3D将传统应用的内容转换成3D的贴图。

微信搜索“IT之家”关注抢6s大礼!下载IT之家客户端(戳这里)也可参与评论抽楼层大奖!

清洗中央空调的误区

空调安装压缩机同轴度不良造成噪音大原因

大金空调广州市增城区大金空调维修中心售后服务网点

北京海淀区志高空调拆装清洗移机售后维修服务中心