查看: 2186|回复: 2
收起左侧

[已翻译] 游戏引擎中数学简要说明

[复制链接]

[已翻译] 游戏引擎中数学简要说明[复制链接]

单无畏 发表于 2018-1-6 14:15:05 [显示全部楼层] |只看大图 回帖奖励 |倒序浏览 |阅读模式 回复:  2 浏览:  2186
译者:刘鸿(lewis2012)    审校:王玥亭(玥亭)
在游戏引擎开发中,你总是计算向量点积,向量叉积,矩阵转换,矩阵逆转。你计算四元数(我在游戏引擎中使用四元数和双四元数)。你处理Minkowski 差。你处理一个点是否在四面体内,或者如果一个点在平面之上或平面之下等等。
你可能不知道为什么需要使用这些操作或者你应该什么时候使用它们。这就是为什么我写这篇文章。我想教你为什么和你什么时候使用这些操作。
向量点积
让我们从计算机图形学中的一个有用的操作开始:点积。点积计算一个向量影响另一个向量的值。点积通常用于OpenGL着色器中以确定网格的照明。
要确定网格接收到的光量,你需要两个向量:法线向量和从光源发出的向量。根据经验,你知道如果一个光源正好在一个对象的顶部,该对象变得完全明亮。随着光源改变位置,对象的亮度改变。我们可以通过使用向量点积在计算机图形学中模拟这种物理特性。
当光源矢量s平行朝向与法线矢量n相同的方向时,点积为1,由于点积在[-1.0,1.0]之间的范围,该点变为全亮。

游戏引擎中数学简要说明

游戏引擎中数学简要说明
随着光源移动,向量s和n之间的角度发生改变,并且点积改变。当这种情况发生时,照明也随之改变。这正是我在我的游戏引擎中计算照明。当游戏角色远离光源时,其亮度改变。

游戏引擎中数学简要说明

游戏引擎中数学简要说明
下面是具有两个不同光源位置网格的渲染样本。

游戏引擎中数学简要说明

游戏引擎中数学简要说明
位置(1.0,0.0,0.0)的光源

游戏引擎中数学简要说明

游戏引擎中数学简要说明
位置(0.0,1.0,0.0)的光源
向量叉积
叉积是计算机图形学中经常使用的操作。叉积相对于两个其他向量计算垂直向量(产生第三个向量)。此操作不像点积那么直观。我花了一段时间来掌握这个叉积的有用性。事实上,当我开始开发物理引擎时,我完全理解了它的价值。
让我解释下,
在物理引擎中,网格的质心是一个重要的属性。沿质量中心施加力,将会平移网格,但不旋转网格。

游戏引擎中数学简要说明

游戏引擎中数学简要说明
只有在偏离质量中心的偏移位置施加力时,才会发生旋转。问题是,网格应该绕哪个轴旋转?向量叉积提供了这个答案。

游戏引擎中数学简要说明

游戏引擎中数学简要说明
在我的游戏引擎中,我使用交叉乘积属性来确定框的旋转轴。在这种情况下,旋转轴是z轴。
矩阵的逆
一个非常有用但不直观的操作是矩阵的逆。为了你可以更好地理解它,让我退一步,谈谈向量和矩阵。
向量定义空间中的位置。向量具有大小和方向。可以加上或减去向量。但这些操作都没有改变矢量的坐标系。这是理解矩阵对向量做什么的关键。
矩阵变换改变向量的坐标系。当矢量被旋转或缩放时,其坐标系被变换成新的坐标系。
那么这与矩阵的逆有什么关系?矩阵的逆是简单的逆变换。例如,如果矩阵围绕x轴旋转(变换)向量50度。然后,矩阵逆将围绕x轴的向量旋转-50度。参见,矩阵逆向坐标系统在相反方向上的变换。
游戏引擎中的一个实际例子是当你处理一个相机和一个世界实体。想象一下,世界实体包括几个建筑物。要绕这些建筑物轨道,你有两个选择:你可以围绕世界中心轨道来移动摄像机,如下所示:

游戏引擎中数学简要说明

游戏引擎中数学简要说明
或者你可以在相机前旋转世界实体,如下图所示:

游戏引擎中数学简要说明

游戏引擎中数学简要说明
上面两个操作中,一个是另一个的逆操作。你可以通过计算逆变换在一个或另一个之间切换。
闵可夫斯基Minkowski
GJK是用于确定凸包(Convex-Hull)对象之间的碰撞的流行算法。算法的核心是一个重要的属性,它声明:如果两个对象,A和B碰撞,则它们的闵可夫斯基差包含原点。
在我向你展示一个闵可夫斯基差之前,让我先从一个闵可夫斯基和开始。在视觉上,闵可夫斯基和可以看作是由对象A扫描的区域加上对象B中的每个点。见下图:

游戏引擎中数学简要说明

游戏引擎中数学简要说明
相反,闵可夫斯基差是由对象A扫描的区域加上对象B中的每个点取反后的点。见下图:

游戏引擎中数学简要说明

游戏引擎中数学简要说明
如上图所示,对象A和对象B发生碰撞。 因此其Minkowski差包含原点。游戏引擎使用此属性来确定两个游戏角色是否发生碰撞。
我希望这些例子可以帮助你理解向量点积,向量叉积,矩阵的逆和闵可夫斯基差在游戏引擎开发的有用性。
谢谢你阅读。

【版权声明】
原文作者未做权利声明,视为共享知识产权进入公共领域,自动获得授权

+1
2184°C
2
  • MoneyCH
  • 马三小伙儿
过: 他们
因分享而快乐,学习以自强!
MoneyCH 发表于 2018-1-7 13:47:18 显示全部楼层
挣他一个亿泰币
因分享而快乐,学习以自强!
马三小伙儿 发表于 2018-1-7 15:43:16 显示全部楼层
挣他一个亿泰币
因分享而快乐,学习以自强!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

VR/AR版块|Unity3d|Unreal4|新手报道|小黑屋|站点地图|沪ICP备14023207号-9|【泰斗社区】-专注互联网游戏和应用的开发者平台 ( 沪ICP备14023207号-9 )|网站地图

© 2001-2013 Comsenz Inc.  Powered by Discuz! X3.4

1
QQ