在VR开发中,用户将以第一人称的视角进入虚拟世界,即用户同时身处两个坐标系:1. 现实世界坐标系(如房间的坐标系),用户的身体处于这个坐标系 2. VR世界坐标系,用户的感官处于这个坐标系,即用户觉得我处于这里。

  而如何同步这两个坐标系HTC VIVE已经帮我们解决了。由HTC VIVE开发的应用,在应用刚初始运行阶段,将用户所处的现实世界的位置和VR世界里的位置进行一次匹配,然后以此为基准来同步两者的关系,将现实中的移动通过空间定位映射到VR空间里的移动。

  但是这也产生了一个问题。在传统的二维屏幕的游戏中,一旦游戏角色走到墙体,可以用碰撞体挡住,不让其继续穿墙运动。而VR应用却不能阻挡用户的穿墙行动,原因是VR空间里的移动是根据人在现实世界里的走动来同步,只要我的房间够大,我就可以一直朝着一个方向走下去,而VR世界里的摄像机也将一直朝一个方向运动,这样势不可免将造成穿墙等问题,这并不是我们想要的结果。

那么要如何解决这个问题呢?

这里有两个想法:

一、软硬件结合。现实也造一堵和虚拟世界对应的墙,但这基本不符合实际(Haha~),Pass掉。

二、强行阻止VR虚拟角色继续前行。

而第二种方法又有两种解决方式:

1. 位移补偿: 虚拟角色在碰撞到墙时还继续往前走时控制其进行反向位移补偿或者将整个场景都往其运动方向进行移动补偿。

2. 碰撞体。和传统的游戏一样采用碰撞体阻止其继续前行,但碰撞体的强行插入将可能造成抖动。

这两个办法其实就是强行让两个世界坐标的位移映射失效。虽然可以达到不穿墙的效果,但是又会带来新的问题。

1. 用户的感受:什么鬼?为什么我在原地踏步?周围的东西为什么有种轻飘飘的感觉?看来我一定是要升天了~

2. 两个世界坐标系的原点产生偏移。

那么为什么会产生偏移呢?

下面用一张图来解释:

  这个问题在一般情况下可能不大,但当处于一个较小的房间而又频繁撞墙时,由于误差的积累,问题就产生了。我人已经在墙边了,需要交互的物体却还在离墙更远的地方,这可叫我如何是好?

综上:如何不让用户穿墙又可以规避缺陷:

1. 在有穿墙限制的同时提供手柄的瞬移功能,就不存在坐标系偏移造成的无法交互的后果。但仍然难以解决用户原地踏步感觉不良的问题。

2. 没有穿墙限制,在接近墙继续向前走时,通过UI或其他方式对用户进行提示:禁止继续往前走。在墙外布置一些空的场景,若用户执意要穿墙,走出去看不到什么新鲜的东西,也不会再尝试了,应该不会有人这么无聊吧,haha~

其实我是比较倾向使用第二种的,毕竟用户体验更自然、连贯性更好!具体采用哪种就要根据实际项目需求了。

  换个思路想,阻止不了穿墙也未必是件坏事,因为我们可以利用它来放置一些彩蛋,比如在一个无法打开的木桶里放置一些意外的惊喜,说不定用户感觉会更好~如果我把头探出墙外突然看到一个鬼脸对我说:"Catch you!"”那我一定会很“惊喜”的。

            

关于VR开发中的穿墙问题随想的更多相关文章

  1. VR开发中性能问题—OculusWaitForGPU

    http://blog.csdn.net/cartzhang/article/details/50788894 VR开发中性能问题-OculusWaitForGPU 本文章由cartzhang编写,转 ...

  2. VR开发的烦恼——范围限制

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/52230865 作者:car ...

  3. UE4关于Oculus Rift (VR)开发忠告

    转自:http://blog.csdn.net/cartzhang/article/details/42493843 UE4虚拟现实 实现的注意事项 https://docs.unrealengine ...

  4. 使用Unity5.1进行VR开发的配置(最新的未必是最好的!!!)

    随着Unity5.1的发布,之前的Oculus Rift和Gear VR 开发流程发生了巨大的变化,这也算是小白鼠们必须付出的代价了~ 那么Unity5.1和Oculus的整合究竟发生了哪些变化,对开 ...

  5. VR开发2015年终总结

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/50617605 作者:car ...

  6. TDD在Unity3D游戏项目开发中的实践

    0x00 前言 关于TDD测试驱动开发的文章已经有很多了,但是在游戏开发尤其是使用Unity3D开发游戏时,却听不到特别多关于TDD的声音.那么本文就来简单聊一聊TDD如何在U3D项目中使用以及如何使 ...

  7. React在开发中的常用结构以及功能详解

    一.React什么算法,什么虚拟DOM,什么核心内容网上一大堆,请自行google. 但是能把算法说清楚,虚拟DOM说清楚的聊聊无几.对开发又没卵用,还不如来点干货看看咋用. 二.结构如下: impo ...

  8. Android学习探索之Java 8 在Android 开发中的应用

    前言: Java 8推出已经将近2年多了,引入很多革命性变化,加入了函数式编程的特征,使基于行为的编程成为可能,同时减化了各种设计模式的实现方式,是Java有史以来最重要的更新.但是Android上, ...

  9. Java开发中的23种设计模式详解

    [放弃了原文访问者模式的Demo,自己写了一个新使用场景的Demo,加上了自己的理解] [源码地址:https://github.com/leon66666/DesignPattern] 一.设计模式 ...

随机推荐

  1. Linux系统 awk sed R脚本 python脚本传入变量

    sed 传入变量: chrI="chr2";sed -n "/$chrI/p" clippointpos.csv  #变量用$var表示,把sed的单引号变为双 ...

  2. iOS - Mac 常用设置

    1.Finder 中显示资源库 方法一: 在 "终端" 中输入下面的命令: 显示: $ chflags nohidden ~/Library/ 隐藏: $ chflags hidd ...

  3. 【SPOJ】Substrings(后缀自动机)

    [SPOJ]Substrings(后缀自动机) 题面 Vjudge 题意:给定一个长度为\(len\)的串,求出长度为1~len的子串中,出现最多的出现了多少次 题解 出现次数很好处理,就是\(rig ...

  4. 【BZOJ1009】GT考试(KMP算法,矩阵快速幂,动态规划)

    [BZOJ1009]GT考试(KMP算法,矩阵快速幂,动态规划) 题面 BZOJ 题解 看到这个题目 化简一下题意 长度为\(n\)的,由\(0-9\)组成的字符串中 不含串\(s\)的串的数量有几个 ...

  5. 【Luogu1345】奶牛的电信(网络流)

    [Luogu1345]奶牛的电信(网络流) 题面 题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方式发送电邮:如果存在一个由c台电脑组成 ...

  6. 【NOI2001】炮兵阵地(状态压缩,动态规划)

    题面 题面中有图片的存在,所以就贴个地址把 题解 简单题,,,, 原来一直觉得不会做... 现在发现是一道傻逼题 暴力压两行的状态 发现就需要滚一维. 然后暴力检查一下状态的可行性 DP检查MAX就可 ...

  7. XCTF(77777-2)

    题目链接:http://47.52.137.90:20000 这道题目和前面的那道题目大致一样,只不过是过滤的函数不一样 检查过滤函数的方式就不写了,直接来解题 检查函数发现过滤了ord ascii ...

  8. CodeFirst学习笔记

    一.概要 本文主要是学习CodeFirst思想.技术上的实现是C#(.net framework4.6.1) 控制台 + PostgreSQL 10.2.1 代码:https://pan.baidu. ...

  9. PHP Curl会话请求

    /** * @param string $url 请求地址 * @param string $type 请求类型 post get * @param string $arr 如果是post 传递的数据 ...

  10. python操作excel常用的方法

    读操作模块安装 pip install xlrd 写操作模块安装 pip install xlwt xlrd读操作 1.打开excel xl = xlrd.open_workbook('test.xl ...