简介

  • 点(point)是n维空间(游戏中主要使用二维和三维空间)中的一个位置,它没有大小、宽度这类概念
  • 矢量(vector,也被称为向量)是指n维空间中一种包含了模(magnitude)和方向(direction)的有向线段。速度(velocity)就是一种典型的矢量。
    • 矢量的模指的是这个矢量的长度。一个矢量的长度可以是任意的非负数。
    • 矢量的方向则描述了这个矢量在空间中指向。
    • 矢量的头(head)指的是它的箭头所在的端点出,而尾(tail)指的是另一个端点。
    • 只要矢量的模和方向保持不变,无论在哪里,都是同一个矢量。
  • 标量(scalar)只有模没有方向。例如距离(distance)就是一种标量。

      任何一个点都可以表示成一个从原点出发的矢量。

矢量的运算

矢量和标量的乘法/除法

  只需要把矢量的每个分量和标量相乘即可。

kv=(kvx,kvy,kvz)

kv=(kv_x, kv_y,kv_z)

  一个矢量也可以被一个非零的标量除。这等同于和这个标量的倒数相乘。

vk=(x,y,z)k=1k(x,y,z)=(xk,yk,zk),k≠0

\dfrac{v}{k}=\dfrac{(x,y,z)}{k}=\dfrac{1}{k}(x,y,z)=\left(\dfrac{x}{k},\dfrac{y}{k},\dfrac{z}{k}\right),k\neq0

  对于乘法来说,矢量和标量的位置可以互换的。但对于除法,只能是矢量被标量除,而不能是标量被矢量除,这是没有意义的。
  当k<0k\lt0时,矢量的方向也会取反

矢量的加法和减法

  两个矢量进行相加或相减,其结果是一个相同维度的新矢量。

a+b=(ax+bx,ay+by,az+bz)

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)

  二维矢量的加法和减法,如图:


  在图形学中,矢量通常用于描述位置偏移(即位移)。因此可以用矢量的加法或减法来计算一点相对于另一点的位移。
  如果想计算b点相对于a点的位移,就可以通过把b和a相减得到。

矢量的模

  三维矢量计算公式如下:

∣v∣=v2x+v2y+v2z−−−−−−−−−−√

\lvert v\rvert=\sqrt{v_x^2+v_y^2+v_z^2}

  其他维度同理可得,对每个分量的平方相加后再开根号得到

单位矢量

  单位矢量指的是模为1的矢量,也称为被归一化的矢量(normalized vector)。
  对任何非零矢量转换成单位矢量的过程被称为归一化(normalized)。
  对矢量的归一化,可以使用该矢量除以该矢量的模得到,如下:

v^=v∣v∣,v是非零矢量

\hat v=\dfrac{v}{\lvert v\rvert},v是非零矢量

零矢量

  零矢量即矢量的每个分量值都是0,如v=(0,0,0)v=(0,0,0)是不可被归一化的。这是因为做除法运算时分母不能为0。

矢量的点积

  点积(dot product)也称为内积(inner product)。
  点积的名称来源于这个运算符号:a⋅ba \cdot b。中间的这个圆点符号是不可以省略的。
  
  公式一:两个三维矢量的点积是把两个矢量对应的分量相乘后再取和,最后是一个标量。

a⋅b=(ax,ay,az)⋅(bx,by,bz)=axbx+ayby+azbz

\begin{align}a\cdot b &=(a_x,a_y,a_z)\cdot (b_x,b_y,b_z) \\ &=a_xb_x+a_yb_y+a_zb_z\end{align}

  矢量的点积满足交换律:a⋅b=b⋅aa\cdot b=b\cdot a
  点积的几何意义很重要,其中一个就是投影(projection)
  有一个单位矢量a^\hat a和另一个长度不限的矢量b。我们希望得到b在平行于a^\hat a的一条直线上的投影。那么,我们可以使用点积a^⋅b\hat a\cdot b来得到b在a^\hat a方向上的有符号的投影。
  当投影的值小于0时,夹角大于90∘90^\circ。等于0时,夹角为90∘90^\circ,相互垂直。大于0时,夹角小于90∘90^\circ

  性质一:点积可结合标量乘法。

(ka)⋅b=a⋅(kb)=k(a⋅b)

(ka)\cdot b=a\cdot (kb)=k(a\cdot b)

  性质二:点积可结合矢量加法和减法。

a⋅(b+c)=a⋅b+a⋅c

a\cdot (b+c)=a\cdot b + a\cdot c

  性质三:一个矢量和本身进行点积的结果,是该矢量的模的平方。

v⋅v=vxvx+vyvy+vzvz=∣v∣2

v\cdot v=v_xv_x+v_yv_y+v_zv_z=\lvert v\rvert^2

  公式二:

a⋅b=(∣a∣a^)⋅(∣b∣b^)=∣a∣∣b∣(a^⋅b^)=∣a∣∣b∣cosθ

\begin{align}a\cdot b &= (\lvert a\rvert \hat a)\cdot (\lvert b\rvert \hat b) \\ &= \lvert a\rvert \lvert b\rvert (\hat a \cdot \hat b) \\ &= \lvert a\rvert\lvert b\rvert cos\theta\end{align}

  推理得:两个单位矢量的点积等于它们之间的夹角的余弦值。当夹角小于90∘90^\circ时,cosθ>0cos\theta>0;当夹角等于90∘90^\circ时,cosθ=0cos\theta=0;当夹角大于90∘90^\circ时,cosθ<0cos\theta

a^⋅b^=直角边斜边=cosθ

\hat a \cdot \hat b=\dfrac{直角边}{斜边}=cos\theta

a⋅b=(∣a∣a^)⋅(∣b∣b^)=∣a∣∣b∣(a^⋅b^)=∣a∣∣b∣cosθ

\begin{align}a\cdot b &= (\lvert a\rvert \hat a)\cdot (\lvert b\rvert \hat b) \\ &= \lvert a\rvert \lvert b\rvert (\hat a \cdot \hat b) \\ &= \lvert a\rvert\lvert b\rvert cos\theta\end{align}

  利用这两个公式,还可以求得两个向量之间的夹角(在0~180°)

θ=arcos(a^⋅b^),假设a^和b^是单位矢量。

\theta=arcos(\hat a \cdot \hat b),假设\hat a和\hat b是单位矢量。

矢量的叉积

  叉积(cross product),也被称为外积(outer product)。矢量叉积的结果仍然是一个矢量。
  和点积类型,叉积的名称来源于它的符号:a×ba \times b。同样这个符号是不能省略的。两个矢量的叉积可用如下公式计算:

a×b=(ax,ay,az)×(bx,by,bz)=(aybz−azby,azbx−axbz,axby−aybx)

\begin{align} 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)\end{align}

  叉积不满足交换律,即a×b≠a×ba\times b\neq a\times b。
  叉积满足反交换律,即a×b≠−(a×b)a\times b\neq -(a\times b)。
  叉积不满足结合律,即(a×b)×c≠a×(b×c)(a\times b)\times c \neq a \times (b \times c)。
  
  a×ba\times b的长度等于a和b的模的乘积再乘以它们之间夹角的正弦值。公式如下:

∣a×b∣=∣a∣∣b∣sinθ

\lvert a\times b\rvert=\lvert a\rvert\lvert b\rvert sin\theta

  用a和b构建一个平行四边形,其面积可以使用∣b∣h\lvert b\rvert h来得到,即底乘以高。而hh又可以使用∣a∣\lvert a\rvert和夹角θ\theta来得到,即

A=∣b∣h=∣b∣(∣a∣sinθ)=∣a∣∣b∣sinθ=∣a×b∣

\begin{align}A&=\lvert b\rvert h\\&=\lvert b\rvert (\lvert a\rvert sin \theta)\\&=\lvert a\rvert \lvert b\rvert sin\theta\\&=\lvert a \times b\rvert\end{align}

  如果a和b平行(方向可能相同可能相反),可以认为构建出来的平行四边形的面积为0,那么a×b=0a\times b=0,这里得到的是向量0,而不是标量0。

  根据左右手坐标系的不同,叉积求得的垂线的方向也不同,如下:

[Unity3D]Shader学习笔记之点和矢量相关推荐

  1. Unity Shader 学习笔记(33) 全局光照(GI)、反射探针、线性空间和伽马空间、高动态范围(HDR)

    Unity Shader 学习笔记(33) 全局光照(GI).反射探针.线性空间和伽马空间.高动态范围(HDR) 参考书籍:<Unity Shader 入门精要> [<Real-Ti ...

  2. Unity3D课程学习笔记(一)

    Unity3D课程学习笔记(一) 1.解释游戏对象(GameObjects)和资源(Assets)的区别与联系 官方文档对Assets的解释:An asset is representation of ...

  3. Unity Shader 学习笔记(3)URP渲染管线带阴影PBR-Shader模板(ASE优化版本)

    此 Shader 已经不是最新版本,最新版本见本专栏的第四篇文章: Unity Shader 学习笔记(4) 材质面板截图: 功能实现(URP渲染管线下): PBR材质.投射和接收阴影. 代码展示: ...

  4. Unity Shader 学习笔记(27)渲染轮廓线(描边)方法、卡通风格渲染、素描风格渲染

    Unity Shader 学习笔记(27)渲染轮廓线(描边)方法.卡通风格渲染.素描风格渲染 参考书籍:<Unity Shader 入门精要> 渲染轮廓线(描边) 五种方法: 基于观察角度 ...

  5. 【Unity3d】学习笔记(4)

    [Unity3d]学习笔记(4) 目录 Unity3d学习笔记4 目录 前言 正文 NGUI插件 ApplicationLoadLevel Texture Type 相机Camera 前言 我学习Un ...

  6. Shader学习笔记(三)学习Shader所需的数学基础

    感受高数 一.笛卡尔坐标系 1.二维笛卡尔坐标系 2.三维笛卡尔坐标系 二.点和矢量 1.矢量和标量的乘法/除法 2.矢量的加法和减法 3.矢量的模 4.单位矢量 5.矢量的点积 6.矢量的叉积(cr ...

  7. 【Unity3D】学习笔记(第2记) 2D游戏开发基本技巧之背景制作

    最近看了龚老师的u3d视频讲座游戏<Platform>7讲,是关于2D游戏开发的,现将一些个人学习笔记记录于此. 1 背景图导入 首先创建一个Cube,通过缩放调整成和背景图一样的宽高,然 ...

  8. 【Unity】Unity Shader学习笔记(二)渲染管线

    文章目录 渲染管线(Randering Pipeline) 渲染流程 可编程渲染管线 应用阶段 把数据加载到显存中 设置渲染状态 调用DrawCall 几何阶段.光栅化阶段 渲染管线(Randerin ...

  9. Unity Shader 学习笔记(一)关于“表面着色器”切换渲染管线Shader不可用的问题

    Shader主流上分为两类: 表面着色器(surface shader):更高级的封装,减少人工工作量,能实现大部分效果,缺点是自定义程度不 高,相对局限: 片段着色器(fragment shader ...

最新文章

  1. Java学习总结:13
  2. 工业用微型计算机(18)-指令系统(13)
  3. python 多进程 循环_python 多进程读取同一个循环处理、可以用multiprocessing
  4. 表格序号_如何让表格序号自动更新,四个函数让表格实现自动化、高效操作
  5. lg gw880 qq2011 android beta4版,LG GW880评测:CMMB天线、细节设计
  6. 万丰科技机器人排名_机器人系统集成“7宗最”
  7. Python——编码风格建议
  8. 旗舰杀手!红米旗舰定名 干翻全场?
  9. Win32下显示、隐式加载DLL的方法
  10. 前端神器之Sublime Text2/3简单明了使用总结
  11. 电脑声音太小如何增强_如何录制电脑上播放的声音,背景音乐
  12. Activity生命周期的回调,你应该知道得很多其它!--Android源代码剖析(下)
  13. 第13周 本周个人总结
  14. 新购买的PLQ-20K在Windows系统下打印乱码或不打印。
  15. 如何将代码写的更加优雅?
  16. PHP输出分割线,dede标签调用大全dedecms隔五行一个分割线_PHP教程
  17. android 高光动画,InstrumentPanelView
  18. 原神私服搭建三:(启动器下载和设置代理)
  19. 手机录音文件如何转换成文本?具体如何操作?
  20. 反向代理,正向代理,网关

热门文章

  1. sqlite journal恢复数据_误删不跑路,大牛运维神技能分分钟恢复
  2. Word处理控件Aspose.Words功能演示:在 Java 中将 DOC 或 DOCX 转换为 JPG
  3. 睿码主数据管理平台到底有啥不一样
  4. STM32 第7讲 STM32F407系列系统架构及映射
  5. SAP和Oracle的ERP是怎样被替代的?
  6. STM32——检测输入方波的频率
  7. 虚拟机无法运行英雄联盟解决办法
  8. 如何辨别外盘期货盘真假
  9. 淘宝美工详情页头条如何设计
  10. 为什么你的简历石沉大海,offer了无音讯?