3D游戏引擎小结

1 数学知识

1.1 坐标系

分为左手坐标系和右手坐标系两种,主要区别在于z轴的指向,z轴指向屏幕内的是左手坐标系,z轴指向屏幕外的右手坐标系。UnityDirect3D使用的是左手坐标系,OpenGL使用的右手坐标系。

法线和切线

与椭圆有且仅有一个交点的直线,叫做椭圆的切线。二者公共点,叫做切点。

经过切点且与切线垂直的直线,叫做该椭圆的法线。

1.2 三角学

  • 整个圆周为360度( 2 π 2\pi 2π弧度),因此180度等于 π \pi π弧度,约57.296度等于1弧度。三角函数sin和cos的参数以弧度为单位,而不是度。
  • 三角形的三个内角之和为180度( π \pi π弧度)。
  • 正弦 s i n ( x ) sin(x) sin(x) = 对边/斜边 = y/r。定义域为 0 <= x <= 2 π 2\pi 2π,值域为-1到1。
  • 余弦 c o s ( x ) cos(x) cos(x) = 邻边/斜边 = x/r。定义域为 0 <= x <= 2 π 2\pi 2π,值域为-1到1。
  • 正切 t a n ( x ) tan(x) tan(x) = 对边/邻边 = y/x = 斜率 = M。定义域为 - π \pi π <= x <= 2 π 2\pi 2π,值域为负无穷大到正无穷大。

1.3 向量

向量表示的是一条从一个点到另一个点的有向线段。向量是所有3D引擎算法的基础。

向量长度

是从原点到向量表示的终点的距离,具体来说是各个分量平方和的平方根。公式如下

|u| = sqrt( u x 2 u_x^2 ux2 + u y 2 u_y^2 uy2 + u z 2 u_z^2 uz2)

归一化

归一化(normalize)就是使向量长度为1,同时方向保持不变。计算公式为向量除以其长度,如下

u ′ = u / ∣ u ∣ u' = u / |u| u=u/u

顶点和向量的区别

顶点和向量都用一个三元组(x, y, z)表示。但顶点表示的是空间中的位置信息,在变换时可以被扩展为齐次坐标(x, y, z, w),这时w通常为1。而向量表示的是一个方向,即从原点到(x, y, z)的方向,没有位置属性,它的齐次坐标(x, y, z, w)中,w为0。

向量加法

向量加法是指两个向量的分量相加。几何学表示为以两个向量的边为平行四边形的长边对角线。在游戏中常用于寻找目标的逻辑,例如,玩家坐标是V0( x 0 x_0 x0, y 0 y_0 y0, z 0 z_0 z0),怪物坐标是V1( x 1 x_1 x1, y 1 y_1 y1, z 1 z_1 z1),为了让玩家自动向怪物移动,首先要确定移动方向,表示为dir=(V0-V1).Normalized,因为方向没有大小,故进行单位化操作。接下来让玩家根据时间移动到怪物位置,表示为V=V0+dir*time。这样就利用两个向量的加法实现了位置移动。

向量减法

向量减法和加法相反,是指两个向量的各个分量相减,几何学表示为以两个向量的边为平行四边形的短边对角线。主要应用在方向的计算,以及判断两个物体间的距离。

向量点积

点积将各个分量分别相乘后相加,得到一个标量,而不是保持向量形式。定义如下

u ⋅ v u \cdot v uv = u x u_x ux

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值