Locomotion,本文中我称之为移位,是VR研究中最重要的话题之一。因为它属于VR中三大元老级操作(Selection选择,Manipulation操纵物体,Locomotion移位),其中,前两个操作是关于物体的,而Locomotion是关于玩家自己的 - 几乎所有的VR应用都避不开这三个操作,而这三个操纵几乎涵盖了所有的VR操作。今天就来解释一下,VR中的Locomotion指的是什么,它有哪些分类和技术。

Locomotion是什么?

Locomotion,用最简单的话解释就是“从一个位置移动到另一个位置”,在VR中,它的指的就是玩家在虚拟环境中从一个位置移动到另一个位置,其本质是玩家视角(viewpoint)的改变:从一个视角变换到另一个视角。Locomotion在中文里尚无一致的翻译,所以这里我暂把它译作“移位”。

虚拟3D环境(包括VR和屏显等)中的Locomotion有三种可能的目的:探索(exploration),搜索(search)和查看(maneuvering)。探索是没有具体目标的移动,其目的一般是搜集环境信息,或者简单的就是享受美景。它讲究一个在环境中移动的自由性,移动的速度要能随心所欲,并且需要能视察大范围的环境全景。搜索则是有一个具体的目标,要在环境中寻找到它。这就要求能够同时顾及远景近景,既能大范围视察,又能有足够的细节,在这中间做一个权衡。maneuvering并没有一个很准确对应的中文翻译,它其实表示的是相对于一个物体的视角控制,一般目的是为了从各个角度观察某个物体或者某个环境,所以我这里把它译作“查看”。比如你如果进入了一个陌生的房间,可能会四周看看,走两步,或者你看到了一个纪念碑,想要绕道正面去看看碑面上写的什么。这时候你不会进行很大范围的运动,但是你会进行很准确的视角控制。查看是三种目的中移动范围最小的,也是最精细的操作,它需要操作的稳定性和精确性。

Locomotion的分类

Locomotion既然是从一个视角变换到另一个视角,那么根据两点之间如何进行变换,可分为两种方式:点对点的移位(target based locomotion)和导航(navigation)。其中点对点移位是直接从一个点跳转到另一个目标点,最常见的例子就是Teleportation传送门,用户选择要去的位置,然后天光一闪,用户就被传送过去了。而导航则是有一个从出发点到目的地的路径。要想导航必须知道当前的方向(spatial orientation)。

很明显的,对于点对点位移,我们只需要知道目的地的空间位置(position)和玩家移位过去以后的朝向(orientation);而导航,除了位置和朝向以外,还需要控制中间的过程。这个多出来的中间过程包括了两个方面的工作:寻路(wayfinding)和视角控制(viewpoint motion control,也称travel)。

其中,寻路主要是一个脑力上的活动,包括了理解空间信息(spatial understanding,理解我的空间位置、我与环境的关系)和计划路径(path planning,选哪个路径走)。关于它有很多认知方面的研究(可见Darken et al., 2014)。设计一种移位方式时,不能违背这些认知的方面的原则。

视角控制就是作为设计师和开发者可控制的部分了。根据我们想要达到的目的,如何让用户操作控制自己的视角。其本质就是开放一个对视角的位置朝向的控制接口。


McMahan, R., Kopper, R., & Bowman, D. (2014). Principles for Designing Effective 3D Interaction Techniques. In K. Hale & K. Stanney, Handbook of Virtual Environments (pp. 285–311). CRC Press. Retrieved from http://www.crcnetbase.com/doi/abs/10.1201/b17360-16
 
Darken, R. P., & Peterson, B. (2014). Spatial orientation, wayfinding, and representation.
 
The VR Glossary, locomotion, http://www.vrglossary.org/glossary/locomotion/

最新文章

  1. 03 Javascript初识
  2. js “+” 连接字符串&数字相加 数字相加出现多位小数 函数调用单引号双引号嵌套和转义字符的使用
  3. 在Hyper-V的虚拟机中使用无线网络
  4. android开机启动过程
  5. 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
  6. c 语言结构体struct的三种定义方式 及 typedef
  7. Cracking the coding interview--Q1.5
  8. 在 Windows系统中编译node.js 源代码
  9. apns关于APP数字角标的理解
  10. CentOS7安装Zabbix
  11. C#输出日历
  12. 201521123020《Java程序设计》第8周学习总结
  13. Java经典设计模式之七大结构型模式(附实例和详解)
  14. C#基础知识之类和结构体
  15. js 异常判断
  16. GCC 符号表小结【转】
  17. 分布式事务实现-Percolator
  18. js设置cookie(原生js)
  19. CentOS工作内容(四)主机禁ping
  20. font-family:中文字体的英文名称 (宋体 微软雅黑)

热门文章

  1. POJ 1236 Network of Schools - 缩点
  2. cogs 2652. 秘术「天文密葬法」(0/1分数规划 长链剖分 二分答案 dp
  3. CodeForces 1058 F Putting Boxes Together 树状数组,带权中位数
  4. CF - 1131 D Gourmet choice
  5. The Sultan's Successors UVA - 167
  6. 【Offer】[43] 【1~n整数中1出现的次数】
  7. [淘宝客技术篇008](无需登录)淘宝天猫优惠券JSON接口1
  8. 即时聊天APP(二) - MainActivity
  9. 获取contenteditable区域光标所在位置信息
  10. Angular4+Koa2+MongoDB开发个人博客