技术美术从头学起(3)技术美术数学基础

在学习Shader的过程中我们最常使用的就是矢量和矩阵(线性代数)

笛卡尔坐标系

OpenGL和DirectX使用了不同的二维笛卡尔坐标系,在OpenGL中x轴向右,y轴向上。而在DirectX中x轴向右,y轴向下。

三维坐标系

在三维坐标系中,我们需要定义3个坐标轴和一个原点。
这3个坐标轴也被称为该坐标系的基矢量(basis vector)
通常情况下,这3个坐标轴是相互垂直的,且长度为1,这样的基矢量被称为标准正交基(orthonormal basis)
还有一些特殊情况,坐标轴相互垂直但长度并不为1,这样的基矢量被称为正交基(orthogonal basis)

正交可以理解成相互垂直的意思。

左/右手坐标系

和二维坐标系一样,因为坐标轴方向不固定,所以导致产生了两种不同类型的三维坐标系:
左手坐标系(left-handed)和右手坐标系(right-handed)。
左右手坐标系

它们之间有两点不同:
坐标轴朝向
旋转方向

  • 坐标轴朝向:伸出手,食指向上 ,中指向前,伸直大拇指,此时大拇指、食指和中指分别对应x,y,z轴。

  • 旋转方向:伸出手,握拳,伸出大拇指让它指向旋转轴的正方向,那么剩下4个手指的弯曲方向就是旋转的正方向。

矢量计算

点积(dot product, inner product 内积)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
叉积(cross product, outer product 外积)
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

矩阵

矩阵的运算及规则:
http://www2.edu-edu.com.cn/lesson_crs78/self/j_0022/soft/ch0605.html

  • 正交矩阵的转置矩阵和逆矩阵是一样的
  • Unity中常规做法是将矢量放在矩阵的右侧
  • 线性变换包括:旋转、缩放。
  • 仿射变换(affine transform)就是合并线性变换和平移变换的变换类型。仿射变换需要将矢量扩展到四维空间下,这就是齐次坐标空间(homogeneous space)
  • 4*4矩阵中,点的w为1,矢量的w为0(因为矢量不考虑位移因素)
  • x轴旋转矩阵
    在这里插入图片描述
  • y轴旋转矩阵
    在这里插入图片描述
  • z轴旋转矩阵
    在这里插入图片描述
  • 我们约定变换顺序为缩放、旋转、平移
  • 在Unity中进行旋转时,矩阵顺序和旋转顺序一致。(因为旋转轴的原因)

顶点的空间变换过程

  • 模型空间(model space/object space/local space)-> 世界空间(world space)模型变换(model transform)
  • 世界空间 -> 观察空间(view space/camera space )观察变换(view transform)
  • 观察空间 -> 裁剪空间(clip space/齐次裁剪空间)这个变换的矩阵叫做裁剪矩阵(clip matrix/projection matrix)这个矩阵并未进行真正的投影操作,真正的投影操作发生在后面的齐次除法(homogeneous division)但此时的w有特殊意义
  • 投影到屏幕空间(screen space)
  • 法线变换需要使用原变换的逆转置矩阵(若是正交矩阵则原矩阵就可以)
  • 为什么不直接在裁剪空间除以w(因为会破坏插值的效果,因为这不是一个线性空间,而插值往往是线性的)

顶点着色器的最基本的任务就是把顶点坐标从模型空间转换到裁剪空间,在片元着色器中我们可以得到片元在屏幕空间的像素位置。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值