我们在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. NLP(十) 主题识别

    主题识别 是发现输入文本集合中存在的主题的过程 LDA算法,即狄利克雷分布算法 from nltk.tokenize import RegexpTokenizer from nltk.corpus i ...

  2. FEL,项目实装记录

    FEL,即Fast EL ,版本0.8,具体内容我就不贴了,自行百度 实装遇到的问题: Spring Boot 打包后无法进行表达式编译. 根据百度以及源码,确定这东西是在用JavaCompiler将 ...

  3. hdu 5534 Partial Tree(完全背包)

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5534 题解:这题一看有点像树形dp但是树形dp显然没什么思路.然后由于这里的约束几乎没有就 ...

  4. CF999C Alphabetic Removals 思维 第六道 水题

    Alphabetic Removals time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  5. Scrum团队的最佳规模?

    无论你在小型创业公司工作还是在大公司的新产品线工作,当团队人数越来越多时总会达到一个临界点.尽早识别这个临界点可以让您的团队避免进入低效阶段.每个产品都是不同的,团队合作也是如此.因此,拆分团队也需要 ...

  6. 深入拆解Java虚拟机视频教程

    目录: 第1节说在前面的话   00:05:07分钟   | 第3节环境搭建以及jdk,jre,jvm的关系   00:20:48分钟   | 第5节jvm再体验-jvm可视化监控工具   00:21 ...

  7. Go语言标准库之log

    无论是软件开发的调试阶段还是软件上线之后的运行阶段,日志一直都是非常重要的一个环节,我们也应该养成在程序中记录日志的好习惯. log Go语言内置的log包实现了简单的日志服务.本文介绍了标准库log ...

  8. Spring Cloud(三):声明式调用

    声明式服务调用 前面在使用spring cloud时,通常都会利用它对RestTemplate的请求拦截来实现对依赖服务的接口调用,RestTemplate实现了对http的请求封装处理,形成了一套模 ...

  9. WPF 自定义UI控件学习

    最近项目中运用到了WPF处理三维软件,在C/S结构中WPF做UI还是有很多优越性,简单的学了一点WPF知识,成功的完成项目目标.项目过度阶段对于WPF的一些基本特点有了进一步了解 .至此花费一点时间研 ...

  10. Redis删除集群以及重新启动集群

    有时候我们搭建完集群以后,对集群进行了一些错误的操作,导致集群出现了不可预料的问题,这时候想要删除集群重新启动一个原始的集群,那么如何删除原来旧的集群呢? 1.关闭所有开启的Redis节点 kill ...