我们在3D虚拟环境(Virtual Environment, VE)中需要完成的操作有3种:选择物体,操纵(改变)物体,移位(locomotion)。这里来总结一下3D VE中的选择技术的种类。本文根据Argelaguet和Andujar于2013年发表的survey1,以及相关文献总结。

Ryan,Kopper和Bowan提出的分类2(以用户指出物体的方式分类)

1. Virtual Hand 虚拟手

像现实中一样,用虚拟手来接触VE中的物体来做选择。

2. Pointing 隔空指物

不直接接触物体,隔空指物来做选择。一般是raycasting,从手上发射一条射线指向物体,也有利用视线来选择的。

3. Occlusion 三点一线

眼睛发射射线,但是用手来控制射线的方向。眼、手和物体在同一直线上时选择该物体。

4. Volume-Based 创造体积

让远处的物体或者小的物体更好选择,给物体一个额外的选择范围(虚拟体积)。这种就需要解决一个问题,就是空间内有多个物体时,虚拟体积重合了,如何做选择的问题。现有的方法有,选择接近选择射线的,选择离用户近的,以及列出独立的物体列表进行二次选择。

5. Indirect 非直接选择

用一些其他方式来做非直接选择,比如设计好按某个按钮,某物体就被选择。

我们可以看出,这些选择分类并不是互斥的,比如虚拟手和隔空指物都可以和创造体积的方式结合起来。

Poupyrev和Ichikawa提出的分类3(通过中心性进行分类)

这是二人在1999年发表的论文中提出的分类。

1. Exocentric 非自我中心

直接理解比较抽象,举个例子吧,一种微缩世界(World-In-Miniature)的选择技术就是属于这一类。用户从上帝视角俯视面前的微缩世界副本,然后在这个副本中选择想要的物体,选中后本来的世界中的物体也会被选中。这种把用户脱离出选择空间的方式就是非自我中心的方式。按照Poupyrev和Ichikawa的分类,该类包含微缩世界技术(World-In-Miniature)和缩放世界抓取技术(Scaled-world Grab)。

2. Egocentric 自我中心

这一条就是和上面相对的,以用户自我中心来进行的选择。包括虚拟手(virtual hand)和虚拟指针(virtual pointer)。其中虚拟手包括了标准的虚拟手和可以延伸的虚拟手(著名的有如go-go技术4),虚拟指针包含了射线(ray-casting)等技术。


1 Argelaguet, F., & Andujar, C. (2013). A survey of 3D object selection techniques for virtual environments. Computers & Graphics37(3), 121-136.

2 McMahan, R., Kopper, R., & Bowman, D. (2014). Principles for Designing Effective 3D Interaction Techniques. In K. Hale & K. Stanney, Handbook of Virtual Environments (Vol. 20143245, pp. 285–311). CRC Press. https://doi.org/10.1201/b17360-16

3 Poupyrev, I., & Ichikawa, T. (1999). Manipulating objects in virtual worlds: Categorization and empirical evaluation of interaction techniques. Journal of Visual Languages & Computing10(1), 19-35.

4 Poupyrev, I., Billinghurst, M., Weghorst, S., & Ichikawa, T. (1996). The Go-go Interaction Technique: Non-linear Mapping for Direct Manipulation in VR. In Proceedings of the 9th Annual ACM Symposium on User Interface Software and Technology (pp. 79–80). New York, NY, USA: ACM. https://doi.org/10.1145/237091.237102

3D虚拟环境中的选择技术分类的更多相关文章

  1. [Unity3D]Unity3D游戏开发之在3D场景中选择物体并显示轮廓效果

    大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei. 在<仙剑奇侠传>.<古剑奇谭>等游戏中,常常须要玩家在一个3D场景中 ...

  2. 3D建模软件的选择(UG,Solidworks,ProE)

    转自:3D建模软件的选择(UG,Solidworks,ProE) 自述 咱是一个码农,和web.软件.控制台打交道太多了,很想玩玩炫的东西,于是学了点点PS,结果发现完全没有美术细胞TT.最近有碰到对 ...

  3. WebGL和ThreeJs学习6--射线法确定3D空间中所选物体

    一.在 threejs 中如何确定下图3D空间中鼠标点击位置的 object 对象? 二.射线法确定步骤及代码 //Three.js提供一个射线类Raycaster来拾取场景里面的物体.更方便的使用鼠 ...

  4. VR技术在数据中心3D机房中的应用(上)

    VR技术在数据中心3D机房中的应用(上)   前两天跟朋友A吃饭,吃着吃着就说到了VR.近几年来,VR技术越来越火,感觉能跟VR沾点边的都特别高大上,朋友A也是,一提到VR,就怎么都掩盖不住他发自肺腑 ...

  5. Visual Studio工具栏中无法选择调试设备

    Visual Studio工具栏中无法选择调试设备 在Visual Studio工具栏中,默认显示已经识别的设备.用户可以从中选择对应的设备,进行调试和部署App.但是由于误操作,可能导致该选项丢失. ...

  6. VIM 中鼠标选择不选中行号

    VIM 中鼠标选择不选中行号 在Vim中,我们一般会使用 :set nu 打开行号开关. 但是打开行号后,有个弊端,那就是在用鼠标进行选择的时候,会将前面的行号也一起进行拷贝了.但是在gVim中进行选 ...

  7. 在虚拟环境中安装pygame

    http://www.pygame.org/wiki/CompileUbuntu#Python%203.x%20into%20virtual%20environment 先安装依赖: ᐅ sudo a ...

  8. ArcGIS Engine中如何获取Map中已经选择的要素呢

    1.使用IEnumFeturea对象获取map中的FeatureSelection,该方法可以获取所有图层的选择要素.IMap中的FeatureSelection可不是IFeatureSelectio ...

  9. CSS3之3D效果中的transform运用

    css3中添加了很多新的标签 属性 描述 css transform 向元素应用 2D 或 3D 转换. 3 transform-origin 允许你改变被转换元素的位置. 3 transform-s ...

随机推荐

  1. bdtrans 一个命令行下的机器翻译工具

    现如今,机器翻译技术已经越来越成熟了,尽管从整体来看机器翻译的结果还不是特别如意,但是也足以应付一般的翻译需求了.近几年机器翻译平台层出不穷,国外比较出名的翻译平台有Google翻译.必应翻译等,国内 ...

  2. HDU5988 - 2016icpc青岛 - G - Coding Contest 费用流(利用对数化乘为加

    HDU5988 题意: 有n个区域,每个区域有s个人,b份饭.现在告诉你每个区域间的有向路径,每条路有容量和损坏路径的概率.问如何走可以使得路径不被破坏的概率最小.第一个人走某条道路是百分百不会损坏道 ...

  3. c博客作业00--我的第一篇博客

    1.你对网络专业或计算机专业了解是怎样? 一开始以为计算机网络专业就是搞跟计算机有关的东西,后来查了网络才知道,网络专业主要学计算机科学基础理论软硬件系统及应用知识 .网络工程的专业及应用知识. 2. ...

  4. Python 之父的解析器系列之六:给 PEG 语法添加动作

    原题 | Adding Actions to a PEG Grammar 作者 | Guido van Rossum(Python之父) 译者 | 豌豆花下猫("Python猫"公 ...

  5. javase复习(一)

    break,continue,return区别: continue:跳出本次循环,还要再执行下次循环 break:跳出循环,若有多层循环则只跳出本层循环,其他层的循环需要挨个break return: ...

  6. mysql 复制表结构和表数据

    CREATE TABLE a1 ( id INT NOT NULL AUTO_INCREMENT COMMENT '编号', txt VARCHAR(20) NOT NULL DEFAULT '' C ...

  7. python串口工具的使用!!!!一定要加timeout=!!!!

    不指定timeout参数的话,就各种报错,如下: 而前面的串口,波特率则不需要指明.

  8. android 中Application的作用

    转自:lieren666 博客地址:http://blog.csdn.net/lieren666/article/details/7598288 What is Application Applica ...

  9. EventBus 消息的线程切换模型与实现原理

    一. 序 EventBus 是一个基于观察者模式的事件订阅/发布框架,利用 EventBus 可以在不同模块之间,实现低耦合的消息通信. EventBus 因为其使用简单且稳定,被广泛应用在一些生产项 ...

  10. Unity3D_05_理解Unity的新GUI系统(UGUI)

    理解Unity的新GUI系统(UGUI) Unity GUI 链接:UnityEngine.UI系统基础类架构图  Unity GUI 链接:UnityEngine Event & Event ...