Unity Shader学习笔记4 Shader数学基础(1)

前言

Shader所需要的数学基础和线性代数(矩阵)息息相关,因为在渲染管线中涉及到多个坐标空间之间的变换。不论是矢量还是坐标,在不同的坐标空间中变换时,需要借助矩阵来完成变换。一下是对矩阵基本概念以及一些基本运算的复习(就当复习线性代数了哈哈)

一、笛卡尔坐标系

在复习矩阵之前,一个非常重要的东西是坐标系的表示。坐标系是点和向量的基础,毕竟是在坐标系中进行各种各样的变换。
一个最基本的坐标系是笛卡尔坐标系,包括二维笛卡尔坐标系和三位笛卡尔坐标系,这里着重记录三维笛卡尔坐标系
在这里插入图片描述
在三维笛卡尔坐标系中,我们需要定义三个互相正交的坐标轴,这三个坐标轴的交点称为原点。三个坐标轴被称为基矢量,一般来说其长度为1,这样的基矢量被称为标准正交基。如果长度不唯一,则其为正交基

左手坐标系与右手坐标系

在这里插入图片描述
对应判断正向旋转的法则:左手法则与右手法则

在这里插入图片描述

Unity中使用的坐标系

在Unity中,随着对象的不同,所使用的坐标系也不相同
对于模型空间和世界空间

Unity使用的是左手坐标系

对于观察空间

Unity使用的是右手坐标系
摄像机前向是z轴负方向

二、点和矢量

矢量:n维空间中一种包含了方向的有向线段
点:n维空间中的一个位置

矢量运算

1.矢量和标量乘

公式非常简单
k v = ( k v x , k v y , k v z ) kv=(kv_x,kv_y,kv_z) kv=(kvx,kvy,kvz)
类似的,标量除
v k = ( x , y , z ) k = 1 k ( x , y , z ) = ( x k , y k , z k ) \frac{v}{k}=\frac{(x,y,z)}{k}=\frac{1}{k}(x,y,z)=\left(\frac{x}{k},\frac{y}{k},\frac{z}{k}\right) kv=k(x,y,z)=k1(x,y,z)=(kx,ky,kz)

2.矢量加减法

a + b = ( a x + b x , a y + b y , a z + b z ) a+b=(a_x+b_x,a_y+b_y,a_z+b_z) a+b=(ax+bx,ay+by,az+bz)
a + b = ( a x + b x , a y + b y , a z + b z ) a+b=(a_x+b_x,a_y+b_y,a_z+b_z) a+b=(ax+bx,ay+by,az+bz)
几何意义:
加法即将两个矢量首尾相接之后,从第一个矢量的起点指向第二个矢量的终点的矢量
减法两个矢量起点相接,由减向量终点指向被减向量终点

3.矢量的模

∣ v ∣ = ( v x ) 2 + ( v y ) 2 + ( v z ) 2 |v|=\sqrt{(v_x)^2+(v_y)^2+(v_z)^2} v=(vx)2+(vy)2+(vz)2

4.单位矢量

v ^ = v ∣ v ∣ , v 是 任 意 非 零 矢 量 \hat{v}=\frac{v}{|v|},v是任意非零矢量 v^=vv,v

5.矢量点积

a ∙ b = ( a x , a y , a z ) ∙ ( b x , b y , b z ) = a x b x + a y b y + a z b z a\bull b=(a_x,a_y,a_z) \bull(b_x,b_y,b_z)=a_xb_x+a_yb_y+a_zb_z ab=(ax,ay,az)(bx,by,bz)=axbx+ayby+azbz

6.投影

例如a在b上的投影
p = ∣ a ∣ c o s θ p=|a|cos\theta p=acosθ
b在a上投影
p = ∣ b ∣ c o s θ p=|b|cos\theta p=bcosθ

7.叉积

形如a x b样子的符号叫做矢量的叉积
计算公式如下
a × b = ( a x , a y , a z ) × ( b x , b y , b z ) = ( a y b z − a z b y , a z b x − a x b z , a x b y − a y b x ) a\times b=(a_x,a_y,a_z)\times(b_x,b_y,b_z)=(a_yb_z-a_zb_y,a_zb_x-a_xb_z,a_xb_y-a_yb_x) a×b=(ax,ay,az)×(bx,by,bz)=(aybzazby,azbxaxbz,axbyaybx)
在这里插入图片描述
叉积是一个比较特别的运算,不满足交换律也不满足结合律
其结果的模为
∣ a × b ∣ = ∣ a ∣ ∣ b ∣ s i n θ |a\times b|=|a||b|sin\theta a×b=absinθ
方向为与a,b互相垂直,具体是朝上还是朝下要通过右手法则来判断
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值