美文网首页
游戏数学

游戏数学

作者: fat___lin | 来源:发表于2019-06-26 11:09 被阅读0次

    坐标系

    • 右手坐标系:3d max
    • 左手坐标系:UnityUnreal
    Unity3D 当中基本的坐标体系
    unity 在
    模型空间世界空间 中选用的都是左手坐标系
    观察空间(摄像机空间)中使用的是右手坐标系
    如果需要调用类似 Camera.cameraToWorldMatrixCamera.worldToCameraMatrix 等接口自行计算某模型在观察空间中的位置,需要小心这种坐标系的差异。

    参考链接: 理解Unity3D中的四种坐标体系

    向量

    • 向量点乘
      a \cdot b=\sum_{i=1}^{n}a_{i}b_{i}
    • 向量叉乘
      \begin{bmatrix} x_{1} \\\ y_{1} \\\ z_{1} \end{bmatrix} \times \begin{bmatrix} x_{2} \\\ y_{2} \\\ z_{2} \end{bmatrix} = \begin{bmatrix} y_{1}z_{2} -z_{1}y_{2} \\\ z_{1}x_{2} - x_{1}z_{2} \\\ x_{1}y_{2}-y_{1}x_{2} \end{bmatrix}
    • 夹角计算
      \theta = \arccos \left( \frac{a\cdot b}{ \mid a \mid \mid b \mid } \right) = \arcsin \left( \frac{a \times b}{ \mid a \mid \mid b \mid } \right)
    矢量运算 几何意义 推导公式 几何意义
    点积(内积) 投影 \mid a\mid\cdot\mid b\mid cos\theta a在b上面的投影乘以b的长度
    叉积(外积) 法线向量 \mid a\times b \mid = \mid a\mid \mid b\mid sin\theta a、b平行四边形面积
    矢量归一化 单位矢量 \frac {a} {\mid a\mid} 获取单位矢量

    矩阵

    矩阵乘法 c_{ij} = \sum_{k=1}^n a_{ik}b_{kj}
    对角矩阵
    单位矩阵 I
    转置矩阵 A^t
    矩阵行列式
    逆矩阵 AB = BA = I
    正交矩阵 AA^t = I

    变换名称 是否线性变换 是否仿射变换 是否可逆矩阵 是否正交矩阵
    平移矩阵 N Y Y Y
    绕坐标轴旋转的旋转矩阵 Y Y Y Y
    绕任意轴旋转的旋转矩阵 Y Y Y Y
    按坐标轴缩放的缩放矩阵 Y Y Y N
    错切矩阵 Y Y Y N
    镜像矩阵 Y Y Y Y
    正交投影矩阵 Y Y N N
    透视矩阵 N N N N
    • 基础变换:平移、旋转、缩放
      \begin{bmatrix}M_{3*3} & t_{3*1} \\\\0_{1*3} &1\end{bmatrix}
      M_{3*3} 表示旋转、缩放
      t_{3*1} 表示平移

    • 复合变换
      一般约定顺序为,先缩放,再旋转,最后平移——矩阵运算相对简单
      P_{new}=M_{translation}M_{rotation}M_{scal\theta}M_{old}

    M_{translation}M_{rotation}M_{scal\theta} = \begin{bmatrix}1 & 0 & 0 & t_x \\\\ 0 &1 &0 & t_y \\\\ 0 & 0 &1 & t_z \\\\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} cos\theta & 0 & sin\theta & 0 \\\\ 0 & 1 & 0 & 0 \\\\ -sin\theta &0 & cos\theta & 0 \\\\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix}k_x & 0 & 0 & 0\\\\ 0 &k_y &0 & 0 \\\\ 0 & 0 &k_z & 0 \\\\ 0 & 0 & 0 & 1 \end{bmatrix}= \begin{bmatrix} k_x cos\theta & 0 & k_zsin\theta & t_x \\\\ 0 & k_y & 0 & t_y \\\\ -k_x sin\theta &0 & k_z cos\theta & -t_z \\\\ 0 & 0 & 0 & 1 \end{bmatrix}

    欧拉角&万向锁

    四元数 Quaternions

    用于表示旋转

    四元数可视为复数的扩展。在复数中,定义了 i^2 = -1,而四元数中则定义了 i^2 = j^2 = k^2 = ijk = -1

    知乎 如何形象地理解四元数

    unity 官方文档
    常用方法:

    Quaternions方法名 备注
    LookRotation 使用 forward 和 directions 创建一个旋转
    Angle 返回a和b两个旋转之间的角度(以度为单位)
    Euler 返回x、y、z轴的欧拉角旋转
    Slerp 通过t在a和b之间进行球面插值。参数t限制在[0,1]
    FromToRotation 创建一个从fromDirection转到toDirection的旋转
    identity 单位旋转(只读)

    MarkDown 插入数学公式实验大集合
    Markdown数学符号&公式
    markdown 输入数学符号

    相关文章

      网友评论

          本文标题:游戏数学

          本文链接:https://www.haomeiwen.com/subject/uxeiqctx.html