我们在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. 2019 Multi-University Training Contest 7

    2019 Multi-University Training Contest 7 A. A + B = C 题意 给出 \(a,b,c\) 解方程 \(a10^x+b10^y=c10^z\). tri ...

  2. cogs2823求组合数(lucas定理

    http://cogs.pro:8080/cogs/problem/problem.php?pid=vNQJJVUVj 再写个数学水题,其实lucas适用于m,n比较大而p比较小的情况. 题意:给出两 ...

  3. hdu 4825 Xor Sum(01字典树模版题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4825 题解:一到01字典树的模版题,01字典树就是就是将一些树用二进制放到一个树上这样可以方便对整体异 ...

  4. CF990C Bracket Sequences Concatenation Problem 思维 第五道 括号经典处理题目

     Bracket Sequences Concatenation Problem time limit per test 2 seconds memory limit per test 256 meg ...

  5. 带你深入了解NPM——NPM初学者指南

    前段时间,我们邀请了我们“城内”(葡萄城)资深开发工程师刘涛为大家分享了一次干货满满的关于Electron线上公开课,在课程过程中有不少同学对于NPM的概念和用法有一些疑问,所以这次我们希望通过这篇文 ...

  6. python自学Day01(自学书籍python编程从入门到实践)

    第二章 变量和简单的数据类型 2.1 运行.py文件 解释器会读取整个程序,确定其中的每个单词含义并且通过解释器传输给电脑. 编辑.py文件,读取文件中的程序,确定文件中单词(代码)的含义,解释后执行 ...

  7. 代码整洁 vs 代码肮脏

    写出整洁的代码,是每个程序员的追求.<clean code>指出,要想写出好的代码,首先得知道什么是肮脏代码.什么是整洁代码:然后通过大量的刻意练习,才能真正写出整洁的代码. WTF/mi ...

  8. 微信小程序点击控制元素的显示与隐藏

    微信小程序点击控制元素的显示与隐藏 首先我们先来看一下单个点击效果 我们来看一下wxml中的代码: <view class="conten"> <view cla ...

  9. 如何部署 H5 游戏到云服务器?

    在自学游戏开发的路上,最有成就感的时刻就是将自己的小游戏做出来分享给朋友试玩,原生的游戏开可以打包分享,小游戏上线流程又长,那 H5 小游戏该怎么分享呢?本文就带大家通过 nginx 将构建好的 H5 ...

  10. web性能优化实践

    一.SQL查询优化 1.循环中有多次查询sql,改为在循环外一次查询后再处理 2.循环多次插入,改为组装好数据后批量插入 3.梳理业务逻辑能一次查完的,绝不分多次查 4.索引用起来 5.分页查询 二. ...