HoloLens 坐标系统 Coordinate systems

news2024/11/27 22:24:18

Hololens 和 Unity 空间坐标系统-CSDN博客文章浏览阅读79次。这意味着,在 X、Y 或 Z 轴上相距 2 个单位的物体,在混合现实中的渲染效果是相距 2 米。虽然左手坐标和右手坐标是最常见的系统,但 3D 软件中也会使用其他坐标系。例如,3D 建模应用程序使用坐标系统,其中 Y 轴指向或远离查看器,Z 轴指向上。在这两个坐标系统中,正 X 轴指向右侧,正 Y 轴指向上方。两者之间的区别在于,在右手坐标系中,Z 轴指向你,而在左侧坐标系中,Z 轴远离你。通常,笛卡尔坐标系称为“右手”或“左手”,因为可以使用手部位置来指示 XYZ 轴的方向。https://blog.csdn.net/loveric/article/details/141267469

设备支持

混合现实体验级别

HoloLens 尚不支持场地参照系。 HoloLens 上的房间级别应用目前需要使用空间映射或场景理解来查找用户的活动区域地面和围墙。

构建“仅限方向”或“坐立空间规模”的体验 

Orientation-only or Seated-scale

全息影像渲染的关键是,当用户四处移动时,根据预测的头部运动,改变应用中每一帧全息影像的视角。 如果使用固定参照系,可以创建一个可识别和反映用户头部位置和朝向变化的“坐立空间级别”体验。

有些内容需要忽略头部位置变化,始终保持选定的朝向和距离。 一个显著例子就是 360 度视频:因为视频是在一个单独的固定视角拍摄的,如果视窗的位置根据内容移动,会破坏观影,但视窗的朝向会跟着用户四处观看而转动。 如果使用动态参照系,可以创建“仅朝向”体验。

固定参照系 Stationary frame of reference

固定参照系提供的坐标系统会根据物体在世界中的位置尽可能地让用户附近的物体保持稳定,但同时会反映出用户头部位置的变化。

对于“坐立空间级别”体验,在 Unity 这样的游戏引擎中,采用固定参照系来定义引擎的“世界原点”。位于特定世界坐标的物体,使用固定参照系来定义它们在真实世界中采用相同坐标系时的位置。 在用户四处走动时,有些内容在世界中始终是固定不变的状态,这些内容称为“世界锁定”内容。

应用通常会在启动时创建一个固定参照系,并在整个应用生命周期中使用这个坐标系统。 作为 Unity 中的应用开发人员,你可以开始根据用户头部的起始位置和朝向来确定原点,并基于原点放置内容。 如果用户移动到新的位置并想继续他们的“坐立空间级别”体验,你能够根据他们的新位置重新定位世界原点。

随着时间的推移,系统会识别到更多用户周围环境的信息,它可能会开始判断现实世界中各个点之间的距离比系统之前确定的是更短还是更长。 如果为 HoloLens 中的应用使用固定参照系来渲染全息影像,而用户在 5 米的范围内移动,你可能会观察到应用中全息影像在观察位置出现漂移。 所以如果你的应用需要用户在超过 5 米的范围移动,你可以创建一个世界级别体验,这会需要额外的技术来保持全息影像的稳定,详见下文。

动态参照系 Attached frame of reference

动态参照系会跟着用户移动,它会在参照系刚创建时确定一个固定的朝向。 这使用户在观看按该参照系确定位置的内容时会感到很舒适。 按照这种与用户相关的方式渲染的内容称为“身体锁定”内容。

当头戴显示设备无法确定它在世界中的位置时,动态参照系可提供唯一的坐标系统来渲染全息影像。 这使得它非常适合用于显示回退用户界面,来告知用户其设备无法在世界中发现他们。 “坐立空间级别”或更高级别的应用应含有“仅朝向”的回退信息,帮助用户通过使用与混合现实主页中类似的用户界面在应用中继续操作。

创建一个“站立空间级别”或“房间级别”体验

Standing-scale or Room-scale

在沉浸式头戴显示设备上提供比“坐立空间级别”更高级别的“站立空间级别”体验时,可以使用场地参照系。

若要提供“房间级别”体验,让用户能够在他们预先设定的 5 米范围边界内移动,你还可以添加“场地边界”。

场地参照系 Stage frame of reference

首次设置沉浸式头戴显示设备时,用户将定义一个场地,代表他们在混合现实中体验时的活动区域。 场地最小限度地定义了场地原点,用户使用设备时选择的地板位置和自己所面向的朝向确定了空间坐标系统。 在这个场地坐标系统下,将内容放置在坐标为 Y=0 的地板平面上,可以确保全息影像在用户站立时显示得很自然,这就是“站立空间级别”体验。

场地边界 Stage bounds

用户也可以自主定义场地边界,也就是在清理出的活动区域中定义一个用来在混合现实中移动的区域。 如果是这种情况,应用可以创建一个“房间级别”体验,使用边界来确保全息影像始终位于用户可及的范围内。

由于场地参照系使用单一固定坐标系来显示依赖于地板的内容,因此可以很便捷地用来移植 VR 头戴显示设备上的“站立空间级别”和“房间级别”体验。 但是,在这些 VR 平台上,单一坐标系只能在 5 米(16 英尺)直径内显示稳定内容,超出这个范围则会因为杆臂效应导致在系统调整时远离中心的内容产生明显的漂移。 为了能够移动超过 5 米,需要空间定位点。


创建“世界规模”体验

World-scale

Hololens 允许用户移动超过 5 米,是真正的“世界级别”体验。 创建一个“世界级别”的应用,要使用比“房间级别”体验更多的技术。

为什么单一精确坐标系统的使用范围不能超过 5 米

如今,在编写游戏、数据可视化应用或虚拟现实应用时,典型的方法是建立一个所有其他坐标都能可靠映射回的绝对世界坐标系。 在这种环境下,存在一个稳定的转换方式来定义世界中任何两个物体之间的关系。 如果不移动这些对象,它们的相对变换将始终保持不变。 在渲染一个事先知晓其中所有几何信息的纯虚拟世界时,这种全局坐标系可以发挥很好的作用。 现在,房间规模 VR 应用通常会建立这种绝对房间规模坐标系,其原点在地板上。

相比之下,HoloLens 等不受限制的混合现实设备通过动态传感器来理解世界,当用户在建筑物的整个楼层行走数米时,会不断调整其对周围环境的了解。 在“世界级别”体验里,如果根据单一精确坐标系来显示全息影像,这些影像总是会随时间推移发生漂移,无论是它们与世界之间还是它们彼此之间。

例如,头戴显示设备当前可能认为世界上的两个位置相距 4 米,然后再完善这种理解,了解到这些位置实际上相距 3.9 米。 如果这些全息影像最初被放在一个单一的刚性坐标系中,相距 4 米,那么其中一个将始终与现实世界相差 0.1 米。

空间定位点 Spatial anchors

在 Windows 混合现实中,你可以创建空间定位点来解决前述问题,也就是在世界中标记出用户放置全息影像时的重要放置点。 空间定位点表示系统应随时间跟踪的世界上的重要点。

随着设备对世界越来越了解,这些空间定位点可以根据需要调整相互间的位置,以确保每个定位点精确位于基于真实世界所放置的位置。 通过在用户放置全息影像的位置放置空间定位点,然后基于全息影像的空间定位点来定位该全息影像,可以确保即使在用户漫游数十米的情况下,全息影像也能保持最佳稳定性。

空间定位点会持续地根据其他的定位点进行调整,这是采用空间定位点的坐标系与固定参照系的主要区别:

固定参照系中的各全息影像彼此之间始终保持严格的位置关系。 但是当用户长距离移动后,该参照系的坐标系统可能会基于世界中的情况发生漂移,确保用户附近的全息影像显示稳定。

场地参照系中的全息影像也相互之间保持严格的位置关系。 相比于固定参照系,场地参照系始终基于其设定的物理原点保持固定不变。 但是,当场地坐标系中渲染的内容超出其 5 米边界时,就只有当用户站在该边界内时才会稳定显示。

根据某个空间定位点显示的全息影像,可能会根据使用另一个空间定位点的全息影像发生漂移。 这使得 Windows 能改进它对各个定位点位置的了解,即使(例如)是在一个定位点需要向左调整,另一个需要向右调整的情况下也是如此。

相比于固定参照系始终为了用户附近的稳定性进行优化,场地参照系和空间定位点则是为了确保其原点附近的稳定性而优化。 这有利于全息影像随时间推移能始终保持在准确的位置,但也意味着离坐标系原点过远的影像会受到非常大的杆臂效应的影响。 这是因为场地或定位点的位置和朝向上微小的调整会依据与原点的距离等比例放大。

一个好的经验法则是,确保根据遥远的空间定位点的坐标系渲染的所有物体位于距离其原点 3 米内的范围。 对于附近的场地原点,渲染远处的内容是没问题的,因为在用户的视野里,任何增加的位置错误只会影响发生很少漂移的小全息影像。

空间定位点的持久性 Spatial anchor persistence

空间定位点还可以让你的应用记住重要的位置,即使是在应用挂起或设备关闭后。

你可以将应用创建的空间定位点保存在硬盘中,并在下一次体验时重新加载回来,方法是将它们保存在应用的“空间定位点存储”中。 在保存和加载定位点时,你需要提供一个对应用而言有意义的关键词,用于唯一标识定位点。 可以将这些关键词理解为定位点的文件名。 如果想将其他的数据与定位点关联起来,例如用户放置在该位置的 3D 模型,可以将这些数据保存在应用的本地存储中,并将其与你选择的关键词关联起来。

通过将定位点持久保存在存储中,你的用户可以放置单独的全息影像或在周围设置工作空间,将全息影像放置在各处,并在后续的使用中找到它们。

还可以使用 Azure 空间定位点在 HoloLens、iOS 和 Android 设备上实现异步全息影像持久性。 通过共享持久的云空间定位点,多个设备可以随着时间推移观察相同的持久全息影像,即使这些设备没有同时出现,也是如此。

空间定位点共享 Spatial anchor sharing

应用还可以与其他设备实时共享空间定位点,从而提供实时共享体验。

通过使用 Azure 空间定位点,应用可以跨多个 HoloLens、iOS 和 Android 设备共享空间定位点。 通过使每个设备使用相同的空间定位点呈现全息影像,所有用户将看到全息影像显示在现实世界中的相同位置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2060521.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【杂乱算法】前缀和与差分

前缀和 文章目录 前缀和一维应用 二维差分一维 二维扩展1、前缀和与哈希表 一维 一个数组prefix中,第i个元素表示nums[0]至nums[i-1]的总和,那么我们就称这个prefix数组是nums数组的前缀和。 prefix [ i ] ∑ j 0 i nums [ j ] \text{prefix}[i] \s…

显示弹出式窗口的方法

文章目录 1. 概念介绍2. 使用方法3. 示例代码 我们在上一章回中介绍了Sliver综合示例相关的内容,本章回中将介绍PopupMenuButton组件.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中介绍的PopupMenuButton组件位于AppBar右侧&#xf…

x-cmd pkg | dua - 一个可以方便地了解给定目录的磁盘空间使用情况的工具

目录 简介用户首次快速实验指南技术特点竞品和相关项目进一步阅读 简介 dua 是 Disk Usage Analyzer 的简写,该工具可以快速查看给定目录的磁盘空间使用情况。 对于想要深入了解磁盘空间使用情况并有效管理存储的用户来说,Dua 是一个很有价值的工具。通…

项目1 物流仓库管理系统

一、项目概述 本项目旨在开发一个功能全面的物流仓库管理系统,以数字化手段优化仓库作业流程,提高管理效率。系统集成了前端用户交互界面与后端数据处理逻辑,涵盖了从用户注册登录、订单管理、货单跟踪到用户信息维护等多个核心业务模块。通…

heic格式转化jpg用什么方法?这8个教程很实用

随着iOS设备的普及,HEIC(High Efficiency Image Coding)格式成为了默认的图片格式,因其相较于传统的JPEG格式,能更有效地压缩图片文件,保存更多细节,同时占用更少的存储空间。然而,H…

【UE5】Groom毛发系统的基本使用——给小白人添加头发

目录 效果 步骤 一、准备 二、使用3DsMax制作毛发 三、在UE中给小白人安装毛发 四、修改毛发材质 效果 步骤 一、准备 1. 新建一个第三人称模板工程 2. 在项目设置中,勾选“支持计算蒙皮缓存” 3. 在插件面板中,启用“Groom”和“Alembic Gro…

kubernetes的pod基础

kubernetes的pod基础 pod概念 pod(豆荚),是k8s的最小管理单元。是一个或多个容器的组合,这些容器共享存储,网络和命名空间,以及运行规范,pod内的容器统一的进行安排和调度。pod是一组具有共享命…

智慧党建系统设计与实现_1i659

TOC springboot629智慧党建系统设计与实现_1i659--论文 研究背景 近年来,由于计算机技术和互联网技术的快速发展,使得所有企事业单位内部都是数字化、信息化、无纸化的发展趋势,随着趋势的发展,各种决策系统、辅助系统也应运而…

Java | Leetcode Java题解之第350题两个数组的交集II

题目: 题解: class Solution {public int[] intersect(int[] nums1, int[] nums2) {Arrays.sort(nums1);Arrays.sort(nums2);int length1 nums1.length, length2 nums2.length;int[] intersection new int[Math.min(length1, length2)];int index1 …

27.移除元素---力扣

题目链接: . - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/remove-element/description/ 问题描述&#xf…

Maven的简单使用

Maven使用 Maven的作用1. 自动构建标准化的java项目结构(1) 项目结构① 约定目录结构的意义② 约定大于配置 (2)项目创建坐标坐标的命名方法(约定) 2. 帮助管理java中jar包的依赖(1) 配置使用依赖引入属性配置 (2) maven指令(3) 依赖的范围(4) 依赖传递(…

Vitis AI 进阶认知(Torch量化基础+映射+量化参数+对称性+每通道+PTQ+QAT+敏感性)

目录 1. 介绍 2. 基本概念 2.1 映射函数 2.2 量化参数 2.3 校准 2.4 对称与非对称量化 2.5 Per-Tensor and Per-Channel 2.6 PTQ 2.7 QAT 2.8 敏感性分析 2.6 退火学习率 3. 几点建议 4. 总结 1. 介绍 Practical Quantization in PyTorch | PyTorchQuantization i…

OpenCV几何图像变换(4)亚像素图像截取函数getRectSubPix()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 从图像中以亚像素精度检索像素矩形。 getRectSubPix 函数从 src 中提取像素: p a t c h ( x , y ) s r c ( x center.x − ( dst.…

怎么为pdf文件加密设置密码?8个实用pdf文件加密方法

随着数字化信息的普及,保护PDF文件免受未授权访问和篡改的需求日益增强。为了确保您的重要文档安全无虞,加密PDF文件并设置密码成为了一个至关重要的步骤。以下是详细指导,帮助您为PDF文档加密并设置密码,确保其内容的安全。怎么为…

深入理解Java虚拟机(类加载器)

文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 类加载器 类加载器有什么作用呢? 对于任意的一个类&a…

基于一阶高斯低通滤波器的软件设计

前言 一阶RC低通滤波器(巴特沃斯滤波)-CSDN博客 一阶高斯低通滤波器不是一个直接的概念(因为一阶滤波器通常不产生高斯型频率响应),这里我用软件的方式来模拟高斯低通滤波器的效果。 有纰漏请指出,转载…

C++竞赛初阶L1-13-第五单元-循环嵌套(29~30课)538: T456457 第 n 小的质数

题目内容 输入一个正整数 n&#xff0c;求正整数范围中第 n 小的质数。 输入格式 一个不超过 30000 的正整数 n。 输出格式 第 n 小的质数。 样例 1 输入 10 全部程序代码&#xff1a; #include<bits/stdc.h> using namespace std; int main() {long long n,i;ci…

【数据分享】《中国社会统计年鉴》(2006-2023)

而今天要限时免费分享的数据就是2006-2023年间出版的《中国社会统计年鉴》并以多格式提供免费下载。&#xff08;无需分享朋友圈即可获取&#xff09; 数据介绍 一、《中国社会统计年鉴》是一部反映我国社会发展相关领域基本情况的综合性统计资料年刊。书中收录了年全国和…

Leetcode每日刷题之1004.最大连续1的个数|||(C++)

1.题目解析 本题的目的是找出能最多翻转k个0的情况下最长连续的1的个数&#xff0c;并且这是一个二进制数组&#xff0c;只存在0和1&#xff0c;翻转0就是将0变为1 2.算法原理 首先我们想到的一定是暴力枚举&#xff0c;即依次列举出在最多翻转k个0的情况下所有连续1的子数组的…

类和对象(下)(2)

类和对象&#xff08;下&#xff09;(2) static成员 • ⽤static修饰的成员变量&#xff0c;称之为静态成员变量&#xff0c;静态成员变量⼀定要在类外进⾏初始化。 • 静态成员变量为当前类的所有对象所共享&#xff0c;不属于某个具体的对象&#xff0c;不存在对象中&#…