之前我们讲到了虚拟现实中漫游方式的分类。虚拟现实中的漫游(travel/navigate)方式,即是应用提供给用户的,在虚拟环境中移动的方式。虚拟现实的漫游方式中,有一种被称为“完全动作线索”1,即用户需要用真实的、完全的步行动作,来进行虚拟环境中的漫游。比如本篇要提到的自由步行(free-space walking)。

自由步行即使用户能够在一定的空间内自由的走动,他/她的移动会被系统记录,并且反映到他/她在虚拟环境中的移动上。其优势就是整个的交互和现实生活中是一样的,所以非常自然,不需要学习,也不太可能导致晕动症。但是它对定位技术有相当的要求,需要在3D空间中的准确定位,所以一般会让用户佩戴一些多余的设备(电线、背包、捆绑在身上的定位装置等),所以也并非完全“自由”,会导致一些略显尴尬体验。同时,以当前的技术,自由步行一般只能限制在一个小区域中,如果需要漫游的虚拟区域很大,也不能完美处理。并且,自由步行也会消耗用户体力,使得用户使用应用时会更容易疲惫。

根据Kruij和Riecke教授在IEEE VR会议上的讲座1,自由步行技术也有一些不同的类别。其中,第一种类别是当前主流的方式,在行业中广泛地被应用,后两种是为了解决第一种方式存在的空间受限的问题,属于较为实验性的、在学术研究中被提出的方式。

1. 真实的步行 real walking

SteamVR, HTC Vive setup. image from https://www.wareable.com/vr/htc-vive-review

用户往前走一步,在虚拟环境中就往前走一步,用户往左转多少角度,在虚拟环境中就往左转。完全的一一对应,现实环境中用户在什么位置,虚拟环境中用户就相应的在什么位置。这是当前大部分应用采用的方式。不过由于受限于房间大小,或者准确的说,能够被定位到的区域的大小,所以如果只采用这一种交互方式的话,很难让用户在虚拟环境中,能够漫游到超出定位区域的地方。大部分应用采取的方式有:“传送门”(直接将用户传送到另一个空间)、驾驶式漫游(用户使用某交通工具进行漫游,实际上在现实空间中用户呆在原地)。不过,勇于思考和探索学者们还提出了以下两种类别的自由步行:

2. 重定向处理的步行 redirected walking

可以理解为,当系统发现用户要离开可监测区域的时候,做一些事情来让用户不要离开。比如当用户走动时,让虚拟环境缓缓地改变方向,使得用户慢慢改变前进方向,但是还以为自己仍然在“走直线”2,3。或者当用户快走出去的时候,用一些物体、事件吸引用户的注意力,使得用户走回监测区域中间3,4。也有不只是让用户在“撞了南墙”才回头,而是在整个过程中一直不停缓慢改变虚拟环境,让用户只围绕环境中间走动,等等方式。如果要在用户缓慢地改变虚拟环境的方向,那么改变的速度必须非常慢,否则用户会意识到运动方向的改变,导致认知冲突。当前研究表明,如果要让用户行走时旋转角度不同,大概可以是比真实旋转速度高25%或低33%以内5

Bruder et al. 2015

3. 缩放处理的步行 scaled walking

这个方式通过名字也比较好理解,就是把用户现实中的步长,在虚拟环境中做一个缩放(扩大)。使得用户在虚拟环境中走了12米,在现实中只走了10米。同样的,这个缩放的比例也是不能太夸张,虚拟的移动可以比真实的移动少12%或者多35%以内5


1 Kruij E, Riecke BE. Navigation interfaces for virtual reality and gaming: Theory and practice. In Virtual Reality (VR), 2017 IEEE 2017 Mar 18 (pp. 433-434). IEEE. http://ispace.iat.sfu.ca/project/vr-navi-tutorial/

2 Hodgson, Eric, Eric Bachmann, and Tyler Thrash. "Performance of redirected walking algorithms in a constrained virtual world." IEEE transactions on visualization and computer graphics 20.4 (2014): 579-587.

3 Bruder, Gerd, Paul Lubas, and Frank Steinicke. "Cognitive resource demands of redirected walking." IEEE transactions on visualization and computer graphics 21.4 (2015): 539-544.

4 Razzaque, Sharif, Zachariah Kohn, and Mary C. Whitton. "Redirected walking." Proceedings of EUROGRAPHICS. Vol. 9. 2001.

5 Steinicke, Frank, et al. "Estimation of detection thresholds for redirected walking techniques." IEEE transactions on visualization and computer graphics 16.1 (2010): 17-27.

虚拟现实中自由步行(free-space walking)的更多相关文章

  1. myeclipse中解决 java heap space/gc overhead limit exceeded eclipse 的方法

    在Eclipse打包的时候报错:gc overhead limit exceeded eclipse 原因是Eclipse默认配置内存太小须要更改安装Eclipse目录下的eclipse.ini文件. ...

  2. Win32下 Qt与Lua交互使用(四):在Lua脚本中自由执行Qt类中的函数

    话接上篇.通过前几篇博客,我们实现在Lua脚本中执行Qt类中函数的方法,以及在Lua脚本中连接Qt对象的信号与槽. 但是,我们也能发现,如果希望在Lua脚本中执行Qt类的函数,就必须绑定一个真正实现功 ...

  3. 学以致用二十四-----shell脚本中的列表及space

    1.接触列表的概念是在pyhon中,殊不知在shell中也是有列表的. 如: 结果 列表的下标和python中一样,也是以0开头 注意 list 和list2 的区别   一个是用括号括起来,一个是用 ...

  4. 关于Keil C51中“ERROR L107: ADDRESS SPACE OVERFLOW ”的总

    最近写一个关于单片机播放音乐的程序,出现如下错误: *** ERROR L107: ADDRESS SPACE OVERFLOW ... ... Program Size: data=167.6 xd ...

  5. 虚拟现实中的Motion Sickness晕动症问题 - VIMS

    虚拟现实(VR)中的晕动症 - VIMS 在玩VR的时候,很多玩家都遇到过发晕恶心等症状,这就是晕动症(Motion Sickness,以下或简称MS).MS并不是VR特有的问题.我们在坐船.坐车.坐 ...

  6. android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!从此在andrid中自由使用 图像匹配、识别、检测

    目录: 1,过程感慨: 2,运行环境: 3,准备工作: 4,编译 .so 5,遇到的关键问题及其解决方法 6,实现效果截图. (原创:转载声明出处:http://www.cnblogs.com/lin ...

  7. 在Eclipse中显示空格(space)和制表符(tab)

    显示空格(space)和制表符(tab)设置: Window->Preferences->General->Editors->Text Editors->Show whi ...

  8. 在SurfaceView中自由书写和擦除

    /////////继承SurfaceView 的类 public class PaintView extends SurfaceView implements Runnable,SurfaceHold ...

  9. 内核驱动程序中如何读写user space的文件,方便调试程序

    需要在Linux kernel--大多是在需要调试的驱动程序--中读写文件数据.但是在kernel中操作文件没有标准库可用,需要利用kernel的一些函数,这些函数主要有: filp_open() f ...

随机推荐

  1. LeetCode 笔记

    Valid Sudoku 数独整体能够满足的情况是比较复杂.参考:编程之美 关于数独问题的讨论 这道题的解法可能简单一点,因为对输入进行来限制.只是去判断是否是一个数独数独的形式相比较来说也是较简单的 ...

  2. 2019NC#1

    LINK B Integration 题意: 给定$a_1,a_2,...,a_n$, 计算 $$\frac{1}{π}\int_{0}^{\infty}\frac{1}{\prod\limits_{ ...

  3. Marvelous Mazes UVA - 445

    #include<iostream> #include<stdio.h> #include<string> #include<cstring> #def ...

  4. MySQL EXPLAIN结果集分析 - 附带大量案例

    大量实例助你看懂Explain的输出内容,轻松搞定慢查询 EXPLAIN:查看SQL语句的执行计划 EXPLAIN命令可以帮助我们深入了解MySQL基于开销的优化器,还可以获得很多可能被优化器考虑到的 ...

  5. 使用FlameGraph火焰图分析JAVA应用性能

    开源项目推荐 Pepper Metrics是我与同事开发的一个开源工具(https://github.com/zrbcool/pepper-metrics),其通过收集jedis/mybatis/ht ...

  6. Runtime.getRuntime().exec()实现Java调用python程序

    使用Runtime.getRuntime().exec()来实现Java调用python,调用代码如下所示: import java.io.BufferedReader; import java.io ...

  7. Dockfile 生成docker镜像文件大小的比较

    下面就是我针对docker file同一个文件,按照layer层的个数的多少,分别构建了两个镜像的jenkins-master.两者大小相差300MB. <1> layer层数太多,没有将 ...

  8. Python大佬告诉你:使用Python处理yaml格式的数据简单到爆

    一.思考❓❔ 1.什么是yaml? 不是标记语言 对用户极其友好 数据序列化标准 跨语言 所有编程语言都支持 跨平台 所有平台都支持 Windows.linux.Mac 格式简单 比json小姐姐穿得 ...

  9. 解决SSM框架中,存储到mysql数据库中乱码问题的究极方案

    因为编码格式不匹配的问题,设置了好多遍,都不行,就试着让所有的编码格式保持一致.然后读取.插入数据库再也不乱码了. 数据库编码格式必须和myeclipse编码格式一致 其次依次让以下各文件的编码格式保 ...

  10. unittest核心要素

    1 TestCase 一个TestCase的实例就是一个测试用例.什么是测试用例呢?就是一个完整的测试流程, 包括测试环境的准备(setUp),执行测试代码(run),以及测试后环境的还原(tearD ...