三向六自由度

Bullet是跨平台的开源物理引擎,而Ammo是Bullet转化为JavaScript语言的产品,可以帮助实现碰撞检测、力学模拟,还提供多种关节实现。

该类使用频率很高,由3个浮点数类型的x、y、z变量组成,可以表示速度、点、力等向量。

创建一个三维分量初始值都为零的三维向量对象

创建三维向量对象,三个坐标值分别为x、y、z

获取向量归一化后的单位向量

该类由位置和方向组合而成,用来表示刚体的变换,如平移、旋转等。

变换的构造函数,q表示变换旋转信息的四元数,v表示变换平移信息的向量

将当前变换对象设置为初始状态,即将旋转变换矩阵归一化,平移向量3个维度的分量归零

设置平移变换的向量,origin为平移变换的3x3矩阵

设置当前变换对象的旋转变换数据,rotation表示存储旋转数据的四元数对象

换取表示旋转信息的四元数

换取表示变换信息的3x3矩阵

设置变换的矩阵,m为旋转平移缩放向量合成的4x4变换矩阵首地址

btQuaternion类表示的四元数,用于对三维向量进行变换。

该类用于存储刚体的一些属性信息,包括线速度、角速度、摩擦系数等,其中封装了多种方法,用于设置和获取相关属性信息。

获取重心的变换,返回值为获取的四元数

设置刚体变换,参数xform表示需要变换的对象

设置现行阻尼系数和角阻尼系数

获取线速度,返回值为获取的线速度向量

获取加速度,返回值为获取的角速度向量

获取角度因子,angularFactort为要设置的角度因子

获取刚体的形状,返回值为获取的形状指针

应用中心力,force为提供的力向量

应用扭矩,torque为要应用的刚体扭矩

应用力,force为要应用的力,rel_pos为施加力的位置

应用中心冲量,impulse为要应用的冲量

应用扭矩冲量,torque为要应用的冲量

应用冲量,impulse为要应用的冲量,rel_pos为要施加冲量的位置坐标

物理世界类构造器,dispatcher为碰撞检测算法分配器引用,conf为碰撞检测配置信息

进行世界物理模拟,timeStep为时间步进

在物理世界中添加约束,constraint为约束引用

在物理世界删除约束,constraint为约束引用

设置物理世界的重力,gravity为重力向量

在物理世界添加刚体,body为要添加的刚体

获取物理世界的约束总数

获取物理世界中的指定约束,index为约束索引

获取物理世界中碰撞物体的数量

获取物理世界中碰撞物体的数组

进行接触检测,colObj为指向碰撞物体类的引用,resultCallback为接触回调类的对象

实际开发中常使用该类来创建物理世界对象,创建时要使用构造器,需要给出碰撞检测算法分配器、碰撞检测粗测算法接口和碰撞检测配置接口。

离散物理世界类构造器,dispatcher为碰撞检测算法分配器引用,pairCache为碰撞粗测算法接口,constraintSolver为约束解决器引用,conf为碰撞检测配置信息

获取当前物理世界的引用

可支持模拟软体,继承了btDiscreteDynamicsWorld类。所谓软体,不具有固定形状,可像软布一样改变本身形状的物体。

离散物理世界类构造器,dispatcher为碰撞检测算法分配器引用,pairCache为碰撞粗测算法接口,constraintSolver为约束解决器引用,conf为碰撞检测配置信息

向物理世界添加物体,body为指向软体的引用

从物理世界删除指定软体

该类封装了一些判断碰撞形状类型的方法,所有碰撞形状都直接或间接继承自此类。方法有:

计算惯性,mass为质量,inertia为惯性

该类可用于盒子、箱子等规则物体。

构造器,boxHalfExtents表示立方体盒子的半区域

该类表示静态的平面,如地面、屋顶等,创建时需要给出法向量。

静态平面构造器,参数planeNormal为平面法向量,planeConstant为平面上任意一点

球体碰撞形状构造器,radius为球半径

该类表示一个圆柱形状,如杆、金币、石柱等都可以采用此类,但碰撞计算量较大,不如胶囊。

圆柱对象构造器,halfExtents为圆柱的半区域,三维分量,第1和3维表示圆柱的长短半径,第2维是长度

该类表示一个胶囊形状,碰撞计算量比圆柱小,旗杆、铅笔等一般使用该类。

胶囊碰撞形状对象构造器,参数radius为两端球面的半径,height为中间圆柱的长度

获取中间圆柱部分长度值的一半

圆锥碰撞形状对象构造器,参数radius为圆锥的半径,height为圆锥的高度

该类表示一个复合形状,可以通过创建多个单一形状组合成一个复合形状对象。

向组合形状中添加子形状,localTransform为子形状的变换,shape为添加的子形状

从组合形状中删除指定的子形状, childShapeindex为子形状索引

获取当前组合形状中子形状的数量

获取组合形状中指定索引编号的子形状,index为子形状索引

交通工具类是模拟现实世界中的交通工具,有刚体车身、四个轮子,支持前轮驱动和后轮驱动,支持车轮转向等,提供了添加和更新车轮的方法,设置车轮刹车的方法。

更新交通工具,collisionWorld为物理世界的引用,step为步长

获取交通工具的变换对象

更新交通工具,step为更新的步长

获取操纵车轮的系数,wheelindex表示车轮索引值

设置操纵车轮系数的值,steering为要设置的值

车轮上应用力,force为力的大小,wheelindex表示车轮索引值

更新车轮的变换对象,wheelindex表示车轮索引值

获取交通工具上的车轮总数

获取交通工具上的车轮,index为车轮索引

设置刹车系数,brake为要设置的刹车系数

更新悬挂系统,deltaTime为更新步长

更新摩擦,timeStep为更新步长

获取交通工具的前进向量

获取交通工具的当前速度

软体是不同于固定形状的刚体,如绳索,可以实现拉伸、弯曲等不同姿态,如软布可以呈现上下波动。创建软体时必须使用软体帮助类,该类提供了创建软体的方法:

创建绳索软体的方法,worldInfo为软体世界信息,from为绳索起点位置,to为绳索终点位置,res为恢复系数,fixeds为坚硬系数

创建球软体的方法,worldInfo为软体世界信息,center为中心点坐标,radius为半径,res为恢复系数

创建三角形网络软体的方法,worldInfo为软体世界信息,vertices为顶点数组坐标,triangles为顶点索引数组,ntriangles为三角形总数

关节是两个物体之间的约束,关节的父类为btTypedConstraint类,其他关节都继承自该类,其封装了具体关节的共用方法。

获取毁坏关节的最大冲量

设置毁坏关节的最大冲量, threshold为要设置的冲量值

关节主要有铰链关节、滑动关节、六自由度关节、点对点关节等。

铰链是仅有一个旋转自由度的关节,通过铰链的约束限制,相关刚体仅能绕铰链轴旋转。

铰链构造器,参数rbA和rbB为要添加约束的两个刚体,pivotInA和pivotInB分别为对应的中心点,axisInA和axisInB为两个刚体的轴向量,useReferenceFrameA为两个刚体之间的约束关系,正常对应还是交叉对应,默认false

铰链构造器,参数rbA为要添加约束的两个刚体,pivotInA为对应的中心点,axisInA为两个刚体的轴向量,useReferenceFrameA为两个刚体之间的约束关系

铰链构造器,rbAFrame为第1个刚体的变换对象,rbBFrameaxisInB为第2个刚体的变换对象,useReferenceFrameA为两个刚体之间的约束关系,正常对应还是交叉对应

获取铰链当前的旋转角度值

设置铰链的转动范围,low为下限值,high为上限值

马达用于模拟提供动力的部件。

滑动关节是一种仅有平移和旋转自由度的关节,如螺丝和螺母。

滑动关节构造器,rbA为刚体,frameInA为从约束位置到刚体质心位置的变换,useLinearReferenceFrameA表示刚体与约束之间的对应关系

设置滑动关节滑动距离上限

设置滑动关节滑动距离下限

设置滑动关节转动角度上限

设置滑动关节转动角度下限

设置关节的滑动阻尼系数

设置关节的转动阻尼系数

获取关节的滑动阻尼系数

获取关节的转动阻尼系数

设置是否启动滑动对应的马达

设置驱动滑动马达的最大力

设置驱动滑动马达的速度

设置是否启动转动对应的马达

设置驱动转动马达的最大力

设置驱动转动马达的速度

为了模拟现实世界中齿轮之间的转动效果。

齿轮关节构造器,rbA和rbB为两个刚体,axisA和axisB分别为两个刚体的轴向量,ratio为转动比例

设置关联第1个刚体的轴向量

设置关联第2个刚体的轴向量

获取关联第1个刚体的轴向量

获取关联第1个刚体的轴向量

获取齿轮关节的转动比例

点对点关节模拟了两个物体上某两个点呈现连接效果。

点对点约束构造器,rbA和rbB为两个刚体,pivotInA和pivotInB为关节分别在两个刚体坐标系中的位置

点对点约束构造器,pivotInA为关节在此刚体坐标系中的位置

设置关节在第1个刚体坐标系中的位置

设置关节在第2个刚体坐标系中的位置

获取关节在第1个刚体坐标系中的位置

获取关节在第2个刚体坐标系中的位置

六自由度关节有6个不同的自由度,包括3个平移自由度和3个转动自由度,可以模拟动物关节及机械结构,如肘关节、颈关节、机械手臂等。通过锁死或限制此关节的某个或某几个自由度,可以模拟其他类型的关节。

6自由度关节构造器,rbA为刚体,frameInA为从约束位置到刚体质心位置的变换,useLinearReferenceFrameA表示两个刚体与两个约束之间的对应关系

设置关节3个滑动自由度距离的上限

设置关节3个滑动自由度距离的下限

设置关节3个转动自由度距离的上限

设置关节3个转动自由度距离的下限

获取指定轴的旋转角度,基于欧拉角的计算方法

地下室结构的抗浮设计与分析分析,设计,抗浮,地下结构,地下室和,结构设计,地下室,结构的抗浮,抗浮设计,地下室结构

VR是一个新兴的媒介,在进军这个领域前,你需要了解一些设计的基本原理。

VR这个领域的水很深,这个领域人才济济,每个职位都要求具备有专业技能的人才。VR是一个新兴的媒介,在进军这个领域前,你需要知道的包括:

  1. 画草图。不管是在头脑风暴阶段还是设计阶段,画草图无疑最快最方便的。
  2. 设计技能多样化是一个巨大优势。
  3. 你将受益于你的摄影知识,因为你能接触和理解一些基本概念,比如视场,景深,焦散,曝光等。
  4. 如果你对3D和3D工具知道得越多,你需要学习的就越少。因为到了某个程度,你可能需要知道建筑,字符,道具建模,索具,UV映射,纹理,动力学,粒子等等。
  5. 运动设计也很重要。作为设计师,我们都知道如何去使用具有物理边界的设备。但VR没有边界限制,所以需要具备一种不同的思维方式。对于VR来说,“ 这个元素将如何出现和消失?”是个多余的问题。
  6. 具备Python,C#,C ++或其他的编码技能会让你上手得更快。因为迭代的基本需求,原型的缺口很大。这个领域尚未有人涉足,设计这种独特的交互形式,你可能成为第一个吃螃蟹的人。游戏引擎如Unity或Unreal engine大多是集成代码。在游戏和VR开发中已经形成一个大型活跃社区,在这个社区里可以获得大量的培训和资源。

设计团队也将不断演变发展,因为这种新兴的媒介为创新提供无数的可能,如它将给电子游戏或影视业带来的变革。

未来设计会涉及到两大方面。

第一类是关于核心用户体验,界面和交互方面的设计。这类设计跟现在的产品设计团队的结构非常相似(视觉、UI、UX、运动设计师,研究人员和原型设计师)。

每个角色都必须适应VR这种新媒介的规则,并与工程师保持密切的关系。大家目标始终保持一致: 创建一个快速迭代循环来探索各种不同的交互式设计。

另一方面,内容团队将借鉴独立游戏设计工作室的结构,来打造一些独特体验或者AAA级游戏。据我们所知,娱乐业结合其他媒介的发展很可能跟VR发展方向相似。

最终,娱乐业和VR将保持一种密切的关系,来创造一个高端的点对点的用户体验。两个行业都有相互学习机会。

新维度和沉浸感这两个方面使VR成为游戏规则颠覆者。你需要了解VR内在规律,这样的设计才能符合用户的生理特征。我们把这些规律归类在一个应用程序中,你可以学会这个非常好的沉浸式体验。

VR两个规律一定得牢记:

用户会对你设想不到的外部事件本能地做出反应,这一点你应该进行相应的设计。

生理舒适性重组了像晕动症等概念。使用加速和减速时请保持一条平稳的地平线以避免“眩晕恶心”反应。

用户在特定的情况下会有各种不适,如高处,狭窄的空间(幽闭恐惧症),空旷的空间(广场恐惧症)等。在处理比例问题和相互碰撞物体时也需要小心。例如,如果有人朝你扔出一个东西,你本能的反应可能是去接,或者躲闪,也有可能是保护自己。巧妙处理这些特殊情况可以避免给用户的带来不适。

你还可以调用用户的感官来创造更令人身临其境的产品和提示信息。你可以在游戏行业找到灵感。如在游戏的旅程中设计师们使用了各种各样的技巧来引导玩家。如:

利用声音进行空间定位。

利用光给玩家指明一条道路。

在设计这种媒介时,很容易犯的一个错误是:用户受伤或用户的身体被透支。虽然好莱坞科幻电影非常炫酷,但这种应接不暇的交互违反人体工程学的一些基本规律,随着时间的推移它会给人体带来极大的不适。“少数报告”这部电影里的交互手势不适合长时间使用。

我对头部X、Y轴运动的安全区做了一个简化说明。绿色区域表示没问题,黄色区域体验一般,红色区域是需要避免的。

头部X轴Y轴运动安全区简化图示

不好的设计可能会导致更严重的后果。

举个例子,你有没有听说过Text Neck?一项在Neuro and Spine Surgery上发表的研究测试表明,当我们的头移动到不同的位置时,对我们颈部产生的压力也不同。当我们从头部直立,双眼平视的姿势换成朝下看的姿势时,颈部的压力相应地增加440%。肌肉和韧带会慢慢感到疲劳和酸痛; 神经也被拉伸,椎间盘被压缩。所有这些不当姿势可能会导致长期的严重问题,如永久性神经损伤。

避免长时间的朝下看的交互行为。

身体在空间中有六种不同的移动方式。它可以在X、Y、Z轴中旋转和平移。

三自由度(3DOF)(方向跟踪)

头戴式显示设备(如Cardboard,Gear VR)通过嵌入式陀螺仪(3DOF)跟踪方向。在三个轴上面的旋转都可以被跟踪到。

六自由度(6DOF)(方向+位置跟踪)

为了实现六自由度,传感器将跟踪人在空间中的位置(+ X,-X,+ Y,-Y,+ Z,-Z)。高端设备如HTC Vive或Oculus Rift都是6DOF。

实现六自由度经常会涉及的一个或多个传感器的红外发射器的光学跟踪。Oculus的跟踪传感器是在固定的相机上,而Vive的跟踪传感器是装在头戴式显示器HMD上。

根据你设计的系统不同,输入方法也会不同。例如Google Cardboard只有一个按钮,所以它的交互模式是凝视加点击。HTC Vive使用两个六自由度控制器,Oculus推出Xbox One控制器,但最终将使用6DOF双控制器Oculus Touch。以上这些都能让你使用更先进和沉浸式的交互模式。

除了以上这些还有其他类型的输入设备,如手部追踪装置。最有名的当然是Leap Motion。你也可以将它安装到头戴式显示器(HMD)上。

随着技术发展,这个领域也不断演变,但当下手部追踪技术不够成熟,还不能作为主要输入设备。它的问题主要还涉及手和手指,碰撞和微妙的运动跟踪。

游戏控制器虽然广为人知,但使用游戏控制器作为输入设备也并不理想。它从物理条件上移除了VR正在实现的某些自由度。如在FPS游戏中,扫射和移动通常会由于加速而引起一些人体的不适。

另一方面,HTC Vive控制器的六自由度强化了VR的体验,Tilt Brush就是一个很好的例子。

在设计用户界面和交互时,输入设备会根据你所使用的方法得到不同的效果。你应该做的是熟悉的所有的输入设备,并了解每种设备的局限性。

这是话题涉及内容很多,需要参考一些研究更深入的文章。我将主要介绍下这个行业中最流行的几种工具。

纸和笔的地位是不能替代的。它们是首选的工具,因为纸和笔可以快速实惠地表达和重述你的想法。这种考虑是因为在VR中,从线框转换成hi-fi的成本高于2D。

因为它易于使用,在做VR原型之前可以用它进行大量的摸索。它的导出工具和插件非常省时,用起来非常方便。

我认为C4D和Maya两个工具并不冲突。两个都是很好的工具,都有自己的优势。当你没有3D背景时,C4D学习曲线可能非常陡峭。我喜欢C4D是因为它的界面做得非常好,它的参数化模式的和非破坏性的模式容易入手,你可以快速地创建更多的迭代。我也喜欢MoGraph模块,而且可以找到很多很棒的插件。C4D的社区也非常活跃,在那里你可以找到很多高质量的学习资料。

Maya是个功能非常强大的软件,当然正因为它的功能强大,它很难面面俱到。它能做出任何3D艺术家想要的效果。很多的游戏和电影都是用它设计的。这个软件强大到可以轻松处理大规模模拟仿真和大场景。从渲染,建模,动画,索具,它是这些功能实现效果的最佳工具。Maya是可以进行个性定制,这是它成为行业标准的原因之一。工作室如果需要创建自己的工具集,Maya是集成任何pipeline管道组件的完美选择。

作为一个原型工具Unity是完全没有问题。通过项目的VR预览功能你可以轻松创建和移动物体。它是一个强大的游戏引擎,还有一个很好的社区,资源商店里可以找到很多的资源( 组件的价格由组件的制作者确定)。在组件库中,你可以找到简单的3D模型,完整的项目,音频,分析工具,着色器,脚本,材料,纹理等等。

Unity的产品文档和学习平台是stellar。在那里你可以找到一系列的高品质的教程。

Unity3d主要使用C#或JavaScript,并附带Microsoft Visual Studio,但没有一个内置的可视化编辑器,虽然你可以在资源商店里找到好的编辑器。

它支持所有主要的3D格式,2D游戏制作效果也很好。应用程式内置的3D编辑器功能不是很强大,但有人做了一些插件解决了这个问题。这款软件需要购买认证,但免费使用版本也可以用一段时间。不得不说Unity是市面上最受欢迎的游戏引擎,占据了将近47%的市场份额。

Unreal Engine是Unity3D的直接竞争对手。Unreal Engine也有很好的产品文档和视频教程。因为他们的资源商店刚上线,所以他们的资源商店比Unity的小一些。

Unreal Engine一大竞争优势是图形能力,Unreal Engine是在图形处理的每个功能都比别人领先一步:地形,粒子,后处理效果,阴影和照明,以及着色器。每个功能都有惊人的效果。

本文由 @oftodesign 翻译发布于人人都是产品经理。未经许可,禁止转载。

我要回帖

更多关于 3个自由度 的文章

 

随机推荐