三角函数与游戏开发

9
我明白sincos(以及其他一些三角函数)的含义,但我不太明白它们解决什么问题。您能否向我展示在游戏开发(特别是3D游戏开发)中使用这些函数的一些真实世界示例?
谢谢。

2
这实际上是一个更适合于GameDev StackExchange(http://gamedev.stackexchange.com/)的问题,但是这里有一个链接可能对你的研究有所帮助:http://pixwiki.bafsoft.com/mags/5/articles/circle/sincos.htm - Ari Patrick
我告诉你,Unity/UDK和其他游戏引擎中,sin、cos以及实时计算的数学函数在资源方面是最昂贵的,特别是对于移动游戏开发而言。我通过多种资源学到了要尽量减少这些调用,因为它们的代价很高!当然,绘制调用和多边形数量比它们更重要,但数学函数是紧随其后的。 - apollosoftware.org
8个回答

12

在游戏开发中,有很多情况需要使用三角函数。编写游戏时,通常需要执行一些操作,例如查找两个点之间的距离或使对象移动。以下是一些示例:

  • 旋转飞船或其他车辆

  • 正确处理从旋转武器射出的弹道

  • 在两个物体(如台球或头部)碰撞后计算新的弹道

  • 确定两个物体之间是否发生碰撞

  • 查找弹道角度(给定物体在x方向和y方向上的速度)

这里有一个好链接不同类型的视频游戏开发所需的数学领域

请查看以下链接以获取更多信息:


7

三角学最明显的用途是使物体朝着任意方向移动,没有三角学这是不可能的。

//Example code, will move the object speed units in the given direction (degrees)
d2r = pi / 180; //Conversion from degrees to radians
this.x += speed * cos (direction * d2r);
this.y += speed *-sin (direction * d2r);

它还被用于其他方面,例如:

  • 执行对2D精灵的变换以创建旋转效果。
  • 在投影3D视图时被广泛使用。
  • 由于正弦波的形状,可以用来创建两个值之间的平滑过渡。
  • 为音频合成创建正弦波。
  • 绘制圆形对象,如圆和球体。
  • 确定位于枢轴臂上的点的位置。

6
3D模型由顶点(在3D空间中的坐标对或三元组的数字列表)和连接它们的线定义。这些线形成可以呈现、照明、纹理等的表面。为了旋转一个对象,你必须能够操作这些顶点。如果你想将一个对象旋转一定角度或弧度,你将不得不使用三角函数来计算它最终停留的位置。基本三角函数对于任何需要进行游戏、模拟等3D操作都是基础的。值得你花时间去研究和了解这些函数的真正含义、它们的限制以及它们如何应用于和增强几何、信号处理等的实用性。这是一个很好的问题,大多数人只是点头示意,仿佛这很显然。除非你的名字是Blaise或Renee,否则可能并不是那么简单。

4

三角函数的一个应用是在旋转矩阵中。

例如:

这个矩阵被用来围绕原点旋转x,y平面上的一个点。

|x'| = | cos a    -sin a | | x |
|y'|   | sin a     cos a | | y |
  • x,y为原始点
  • x',y'为翻译后的点
  • a为逆时针旋转的角度

3

2D或3D空间中的游戏需要几何图形进行图形处理。模拟运动的物理引擎需要几何图形。三角函数是几何学的基础。

以弹跳为例。一个抛射物体撞到墙上并反弹的物理过程很快就能让你意识到三角函数的实用性。


3

三角学对于制作几乎所有曲线(如椭圆或圆)至关重要,因此在游戏开发中有许多用途。此外,正弦波对于Perlin噪声和许多其他特效非常有用。


3

编写一个程序来绘制和更新模拟时钟。

在此过程中遇到的问题应该能够回答你的问题。如果你有基本的正弦和余弦理解,你应该能够使用它们使时钟绘制变得非常容易。

如果这不能回答你的问题,请尝试不使用正弦和余弦来绘制它。


2

我首先想到的应用是在游戏中使用特效...比如说你有一种武器、法术或能力,或者一种效果,可以制造出一束光束...你可以通过数学来“塑造这束光束”...

同样地,假设你有一个传送门,你希望在激活或进入时播放一些炫酷的动画,你可以玩弄向量和旋转矩阵,通过混合数学和想象力,你可以做出许多惊人的事情...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接