前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VR中对带有约束的物理对象的交互

VR中对带有约束的物理对象的交互

作者头像
逍遥剑客
发布2018-05-09 16:50:07
1.2K0
发布2018-05-09 16:50:07
举报

在VR游戏中, 使用双手(控制器)直接对虚拟世界中的对象进行交互, 已经成为一种”标准化”的设计, 一切看起来能够用手去交互的物体, 都需要附合物理规则.

简单的物理对象, 通常只是一个刚体(Rigidbody), 这种只需要模拟重力和惯性运动就可以了, 最多再调节一下摩擦力, 弹性, 空气阻力等, 所以在技术上借助物理引擎的帮助是比较简单的.

稍微复杂一点儿的物理对象, 是带有约束(Constraint)关系的, 比如门, 抽屉, 转盘, 滑杆, 绳索等等. 这里以最常见的滑动和转轴约束进行一下分析, 它们都是把位移或者旋转限制在一个轴上, 计算起来比较简单.

对带有约束的物理对象进行交互, 难点在于如何使物理对象仍然严格按约束关系来运动. 在 VR下双手与物体的交互 中提到过, 要想使一个物理对象动起来, 可以有三种方法: 设置位置, 设置速度(施加冲量), 释加力. 然而, 设置位置这种方式, 是不遵循物理定律的, 会导致物理对象脱离约束的运动范围, 频繁地被拉扯回来. 而施加速度或力的方式, 虽然能够保证物理对象严格地按照约束来运动, 但是很难保证物理对象的位置跟手是一致的. 因为VR下的交互, 通常是用手抓着不放进行拖动来完成的, 如果物理对象不跟着手同步一起动, 那么这个体验就不能算过关.

出于手感的考虑, 肯定是手的抓握点保持跟手同步运动的效果最为理想, 所以只能选择第一种设置位置的方法. 但是对于带有约束关系的物理对象, 这个是比较难保证的. 因为它们被限制在了一个轴上运动, 而我们的手不是. 因此, 如果要同步手的移动到这个物理对象上, 需要把手的位置按照约束关系进行映射. 比如滑动, 需要映射到滑动轴上; 比如转动, 需要把运动映射成旋转角. 这样的话, 相当于在交互时, 自行模拟了约束关系, 让设置的位置(或角度)保持在合理的约束范围内.

但是, 这么做有两个问题:

  1. 松开手时, 物理对象是静止的. 因为设置位置(或角度)的方式, 物体的速度是0, 所以要想在松手时按照惯性继续运动, 需要手动设置一个速度(或者角速度)让它保持交互最后一刹那的运动继续下去.
  2. 通过设置位置的方式, 对于间接接触的物理对象是没有连续性的作用的. 比如一个转盘, 上面放了一个球. 我们通过设置角度的方式让转盘转起来, 上面的球并不会平滑地滚动起来. 所以, 这也是一个待解决的问题, 等我找到更好的方法再来补充一下.
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年12月07日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档