HoloLens开发手记-世界坐标系 Coordinate systems
坐标系 Coordinate systems
全息的核心是,全息应用可以在真实世界中放置全息图形并使得它们看起来和听起来像真实的物体。这涉及到了物体在真实世界中的定位和方向的确定,这对用户来说很重要。当推断全息图像或者其他任何几何体的位置和方向时,例如凝视射线或者手的方位,HoloLens使用多种坐标系来表示几何体。
空间坐标系 Spatial coordinate systems
所有的3D图形应用都采用笛卡尔空间坐标系来推断物体在他们渲染出的虚拟世界中的方位。这种坐标系使用3个互相垂直的轴来定位物体,分别是:X、Y、Z轴。
在HoloLens中,你的应用会推断所有虚拟物品和真实物品的坐标。Windows Holographic将有真实世界意义的坐标系为空间坐标系(Spatial coordinate systems)。
空间坐标系使用米作为单位来表示坐标值,这意味着HoloLens中一个物体在X、Y或Z轴上距离另一个物体2单位放置,实际将会表现为相距2米。这使得你很容易使用真实世界的缩放比例来渲染物体。
一般来说,笛卡尔坐标系有左手坐标系或者右手坐标系。在Windows Holographic中的空间坐标系总是右手坐标系,这意味着正X轴指向右,正Y轴指向上,正Z轴指向后方。
在所有类型的空间坐标系中,正X轴总指向右,正Y轴总指向上方。区别在与正Z轴会指向你的前方还是后方,可以使用我们的左右手来模拟左右手坐标系,大拇指的指向始终是正Z轴相对坐标系的方向。
固定参照坐标系 Stationary frame of reference
当设备在环境中移动时,描述现实世界中全息图像的位置,需要一个保持固定的参考点。系统提供了用于此目的的一个简单方案,被称为固定参照坐标系(Stationary frame of reference)。
在一个像Unity这样的游戏引擎中,参考固定坐标被定义为该引擎渲染的世界的“起源”。使用这些相同的坐标,放置在特定世界坐标系中的对象使用固定参照系来定义它们在真实世界的位置。一个应用程序通常会在启动时创建一个固定参照系和在整个应用程序生命周期使用它的坐标系。
随着时间的推移,随着系统学习更多有关用户环境的信息,它可确定在真实世界的各个点之间的距离是比以前系统认为的更短或更长。因此,当用户在大范围走动导致全息图像出现相对固定参照系偏移时,系统会做出调整。
空间锚点 Spatial anchors
当系统发现更多世界信息时,为了避免偏移和确保全息图像准确保持在世界中特定点,你可以使用空间锚点来放置全息图像。一个空间锚点代表了世界中一个重要的点,系统应该在一段时间保持跟踪。各锚点具有一个按需调整的坐标系,相对于其他空间锚或参照系,以确保锚定的全息图像保持在精确的位置。
在空间锚点的坐标系中渲染一个全息图像将会给出该图像任何时刻最准确的坐标信息。当全息图像持续移回相对真实世界的位置,这回带来最小的位置调整成本。
为什么一个单独刚性坐标系统不能被用于整个场景 Why a single rigid coordinate system cannot be used for the whole scene
如今,编写游戏、数据可视化应用程序、或虚拟现实应用程序时,典型的做法是设立一个绝对的世界坐标系,场景中的所有其他坐标可以可靠地映射到此坐标系上。在这种环境中,你总能找到一个稳定的变换,它定义了在世界里任何两个物体之间的关系。如果你没有动这些对象,它们之间的相对变换将始终保持不变。在单纯渲染一个你提前知道其中所有几何体的虚拟世界时,这种全局坐标系的效果很好。
相比之下,作为混合现实设备,HoloLens拥有传感器驱动的对世界动态的感知 - 这意味着随着时间变化它可以不断调整对于你创建的空间锚点的认识。这样一来,你的应用程序必须为你创建用来随时间而改变他们的相互关系的空间锚点做好调整的准备。
例如,设备可以目前相信世界中的两个位置距离为4米,在重定义这种认知后,设备能够知道这些位置实际上相距3.9米。如果这些全息物体最初是在一个刚性的坐标系相距4米放置,那么他们其中一个在现实世界中总是出现0.1米偏差。
解决方案:空间锚 The solution: Spatial anchors
HoloLens通过让你创建空间锚标记世界中的用户放置全息图像的重要点来解决这个问题。当设备开始认知周边世界时,这些空间锚可以按需要调整它们相对于彼此的位置,以确保每个锚保持它被相对于现实世界放置的精确。通过把全息图像放置在附近空间锚的坐标系中,可以确保此全息图像保持最佳的稳定性。
这种空间锚相对于彼此之间的连续调整是来源于空间锚的坐标系和固定参照系之间的主要区别:
- 放置在固定参照系的全息图像会保持彼此刚性的关系。然而,随着时间的推移,这种坐标系统可能会相对现实世界出现漂移,以确保全息图在用户旁边保持稳定的位置。
- 使用一个空间锚放置全息图像可能出现相对使用其他空间锚放置的全息图像的漂移。这使得Windows提高对各自空间锚的位置的认知,例如,即使一个锚定需要调整本身靠左而另一个锚需要调整靠右。
与此相反的参考,它总是为用户附近的稳定性优化固定框架,空间锚确保接近其起源的稳定性。这有助于这些全息图代替随时间留精确,但它也意味着,从它们的空间锚的原点呈现太远全息图将经历日益严重杠杆臂效应。这是因为小的更新的位置和空间锚的取向被放大成比例从锚的距离。一个好的经验法则是,以确保任何你呈现基于空间锚的坐标系上的距离约3米的产地。
HoloLens开发手记-世界坐标系 Coordinate systems的更多相关文章
- HoloLens开发手记 - HoloLens真机上手简评
千呼万唤始出来,终于今天拿到了HoloLens真机. 使用体验 使用自带的应用录制了一段使用视频,如下 设备概览 包装盒 本体 试戴 实际效果 GalaxyExplorer试玩 全息图像贴到现实场景表 ...
- HoloLens开发手记 - 应用程序模型 App model
HoloLens使用Universal Windows Platform (UWP)提供的应用模型.UWP应用模型定义了应用如何被安全和完全地安装.更新.版本控制和移除.它管理了应用生命周期 - 应用 ...
- HoloLens开发手记 - 使用HoloLens模拟器 Using HoloLens emulator
首先下载HoloLens模拟器 HoloLens模拟器运行在没有真机的情况下在你的PC上测试应用,属于HoloLens开发工具系列.模拟器使用了Hyper-V虚拟机.通常通过传感器获取的人体和环境输入 ...
- HoloLens开发手记-开发概述Development overview
开发HoloLens全息应用将使用UWP平台(Universal Windows Platform),所有的HoloLens应用都是Win10通用应用,所有UWP通用应用都可以在HoloLens上运行 ...
- HoloLens开发手记 - Vuforia开发概述 Vuforia development overview
关于Vuforia,开发AR应用的人基本都会熟悉.之前我也写过一篇关于Vuforia开发的博客:Vuforia AR SDK入门 今天这篇博客则主要是谈谈HoloLens使用Vuforia开发混合现实 ...
- HoloLens开发手记 - Unity development overview 使用Unity开发概述
Unity Technical Preview for HoloLens最新发行版为:Beta 24,发布于 09/07/2016 开始使用Unity开发HoloLens应用之前,确保你已经安装好了必 ...
- HoloLens开发手记 - Unity之语音输入
对于HoloLens,语音输入是三大基本输入方式之一,广泛地运用在各种交互中.HoloLens上语音输入有三种形式,分别是: 语音命令 Voice Command 听写 Diction 语法识别 Gr ...
- HoloLens开发手记 - Unity之Spatial mapping 空间映射
本文主要讨论如何在Unity项目中集成空间映射功能.Unity内置了对空间映射功能的支持,通过以下两种方式提供给开发者: HoloToolkit项目中你可以找到空间映射组件,这可以让你便捷快速地开始使 ...
- HoloLens开发手记 - Known issues 已知问题
本文主要提及一份问题清单,这些问题都可能对我们开发HoloLens应用造成困扰. Visual Studio 在使用VS 2015 Update 1连接HoloLens时,可能会有些小问题.但是这些小 ...
随机推荐
- [国嵌笔记][021-022][ARM处理器工作模式]
[ARM处理器工作模式] 处理器工作模式 1.User(urs):用户模式,linux应用程序运行在用户模式 2.FIQ(fiq):快速中断模式 3.IRQ(irq):中断模式 4.Superviso ...
- 安卓Acitivity的启动模式
活动的四大启动模式 Ps:除了standar模式外,其他启动模式都要在AndroidManifest.xml中设置 android:lauchMode的值 安卓活动的启动模式(LaunchMode)有 ...
- java的运算符和表达式
)1.算数运算符:java中常用的算术运算符除了 +.-.*./之外,还有%(取余).++(自增).--(自减). )1.1%(取余):可适用于整数,char,浮点数的取余中.在取余中,如果进行运算的 ...
- 多线程编程学习笔记——使用异步IO(一)
接上文 多线程编程学习笔记——使用并发集合(一) 接上文 多线程编程学习笔记——使用并发集合(二) 接上文 多线程编程学习笔记——使用并发集合(三) 假设以下场景,如果在客户端运行程序,最的事情之一是 ...
- myeclipse中git的使用
1.右键项目,team-->commit,勾选修改了的文件,点击commit(将更新提交到本地仓库)2.右键项目,team-->pull,合并本地仓库和远程服务器仓库,pull后有一些文件 ...
- Hadoop集群的JobHistoryServer详解(转载)
Hadoop自带了一个历史服务器,可以通过历史服务器查看已经运行完的Mapreduce作业记录,比如用了多少个Map.用了多少个Reduce.作业提交时间.作业启动时间.作业完成时间等信息.默认情况下 ...
- python基础8之自定义模块、if __name__==__main__:解释
一.自定义模块与使用 python模块说明:类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...
- 解决span的bug--不能自动换行的问题
span标签元素不能自动换行,在超出父盒子的宽度后不能够自动换行 如下界面: 解决办法:将span属性加上display:block设置为行级元素:设置宽度然后在强制断行 效果如下:
- Linux指令--文件和目录属性
对于每一个Linux学习者来说,了解Linux文件系统的目录结构,是学好Linux的至关重要的一步.,深入了解linux文件目录结构的标准和每个目录的详细功能,对于我们用好linux系统只管重要,下面 ...
- j2e中操作EXCEL
在j2e中操作excel,无非2种情况,在这里我贴部分代码做个例子就OK,不管是导入和导出都是操作的都是流 1,导入,浏览器输入EXCEL到java后台解析 package action; impor ...