当前位置: 首页 > news >正文

[入门] Unity Shader前置知识(5) —— 向量的运算

在Unity中,向量无处不在,我想很多人都使用过向量类的内置方法 normalized() 吧,我们都知道该方法是将其向量归一化从而作为一个方向与速度相乘,以达到角色朝任一方向移动时速度都相等的效果,但内部具体是如何将该向量进行归一化的呢,本篇我们就来揭晓这个答案。

1. 相关概念

在学习向量的运算之前,我们先要了解一些有关概念:

标量(scalar)是一个只有大小,没有方向的物理量。

向量(vector)是一个有长度,也有方向的有向线段。

向量的模(magnitude)指的这个向量的长度。一个向量的长度可以是任意的非负数。模式一个标量。

向量的方向(direction)描述了这个向量在空间的指向。

2. 向量和标量的乘法/除法

以三维向量为例,向量和标量的乘法公式如下:

kv=(kv_{x},kv_{y},kv_{z})

类似的,向量也可以被一个非零的标量相除,这等同于和这个标量的倒数相除:

 \frac{v}{k}=\frac{(x,y,z)}{k}=\frac{1}{k}(x,y,z)=(\frac{x}{k},\frac{y}{k},\frac{z}{k})

 下面是两个简单的例子:

2\cdot (1,2,3)=(2,4,6)

\frac{(1,2,3)}{2}=(0.5,1,1.5) 

3. 向量之间的加法和减法 

 我们可以对两个向量进行相加或相减,其结果是一个相同维度的新向量。只需要把两个向量的对应分量进行相加或相减即可,公式如下:

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}) 

下面是两个简单的例子:

 (1,2,3)+(4,5,6)=(5,7,9)

(5,2,7)-(3,8,5)=(2,-6,3) 

 4. 向量的模

我们以三维向量为例,计算一个向量的模公式如下:

|v|=\sqrt{v_{x}^{2}+v_{y}^{2}+v_{z}^{2}}

 我们以一个二维向量(1, 1)为例,模的计算方式如下:

|(1,1)|=\sqrt{1^{2}+1^{2}}=\sqrt{1+1}=\sqrt{2}\approx 1.414

 5. 向量的归一化

向量归一化(normalized vector)是指将该向量的模变为1,模为1的向量被称为单位向量(unit vector)。对任何给定的非零向量,把它转换成单位向量的过程就被称为归一化(normalization)

通常,我们在向量的头上添加一个带帽符号来表示单位向量,例如\hat{v}。为了对向量进行归一化,我们可以将向量除以该向量的模来得到,公式如下:

\hat{v}=\frac{v}{|v|}

 我们以一个二维向量(1, 1)为例,该向量归一化的计算方式如下:

\frac{(1,1)}{|(1,1)|}=\frac{(1,1)}{\sqrt{2}}=\frac{(\sqrt(2),\sqrt(2))}{2}\approx \frac{(1.4,1.4)}{2}=(0.7,0.7)

6. 向量之间的乘法

6.1. 点积

点积(dot product)的名称来源于这个运算符号:a\cdot b。点积的公式有两种形式,我们先看第一种公式:

a\cdot b=(a_{x},a_{y},a_{z})\cdot (b_{x},b_{y},b_{z})=a_{x}b_{x}+a_{y}b_{y}+a_{z}b_{z}

它还有第二个公式:

a\cdot b=|a|\cdot |b|\cdot cos\theta

由此公式我们可以得出:

cos\theta=a\cdot b\div |a|\div|b| 

 当a、b两个向量都为单位向量,也就是|a||b|都为1时,公式又可以简化为:

cos\theta=\hat{a}\cdot \hat{b}

因此:

\theta=arcos(\hat{a}\cdot \hat{b}) 

6.2. 叉积

叉积(cross product)的名称来源于它的符号:a\times b,同样这个叉号也不能省略它的计算公式为:

a\times b=(a_{x},a_{y},a_{z})\times(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、b所构成的平面的法向量。

相关文章:

[入门] Unity Shader前置知识(5) —— 向量的运算

在Unity中,向量无处不在,我想很多人都使用过向量类的内置方法 normalized() 吧,我们都知道该方法是将其向量归一化从而作为一个方向与速度相乘,以达到角色朝任一方向移动时速度都相等的效果,但内部具体是如何将该向量进…...

html的i标签 “\e905“ font-family 字体没有效果

一、html的i标签 “\e905” 没有效果 在HTML和CSS中,\e905 这样的字符通常与字体图标(Font Icons)或自定义字体(Custom Fonts)中的Unicode字符相关。具体来说,\e905 是一个Unicode转义序列,但它…...

Golang reflect.MakeFunc() 的用法及示例

Golang 作为一门强类型语言,在某些场景下,我们需要动态地创建函数或者修改函数,这个时候就可以使用反射的方法去实现。在反射中,我们可以使用 reflect.MakeFunc() 方法来创建一个新的函数,本文我将介绍使用反射及其 Ma…...

深入学习和理解Django视图层:处理请求与响应

title: 深入学习和理解Django视图层:处理请求与响应 date: 2024/5/4 17:47:55 updated: 2024/5/4 17:47:55 categories: 后端开发 tags: Django请求处理响应生成模板渲染表单处理中间件异常处理 第一章:Django框架概述 1.1 什么是Django?…...

【MySQL】SQL基本知识点DDL(1)

目录 1.SQL分类: 2.DDL-数据库操作 3.DDL-表操作-创建 4.DDL-表操作-查询 5.DDL-表操作-数据类型 6.DDL-表操作-修改 1.SQL分类: 2.DDL-数据库操作 3.DDL-表操作-创建 注意:里面的符号全部要切换为英文状态 4.DDL-表操作-查询 5.DDL…...

短剧奔向小程序,流量生意如何开启?

随着移动互联网的飞速发展,小程序作为一种轻量级、易传播的应用形态,逐渐在各个领域展现出其独特的商业价值。而最近爆火的短剧小视频作为一种受众广泛的娱乐形式,与小程序结合后,不仅为观众提供了更为便捷的观看体验,…...

微服务下的技术栈架构解析

微服务是一种架构风格,它将一个复杂的应用拆分成多个独立自治的服务,每个服务负责应用程序中的一小部分功能。这些服务通过定义良好的API进行通信,通常是HTTP RESTful API或事件流。微服务架构的主要特点包括单一职责、自治性、可独立部署和扩…...

Mesa3D图形库与NIR(New Intermediate Representation)

Mesa 是一个开源图形库,为 Unix 和 Linux 系统提供了 OpenGL 和 Vulkan API 的实现。它也支持其他图形 API,如OpenCL、OpenGL ES 和 Vulkan。Mesa 项目的目标是为开源社区提供高性能的图形库,使得开源操作系统能够充分利用现代图形硬件。 Me…...

C++:模板初阶

文章目录 泛型编程函数模板概念函数模板格式函数模板的原理函数模板的实例化模板参数的匹配原则 模板类类模板的定义格式类模板实例化 泛型编程 如何实现一个通用的交换函数呢? 函数重载可以帮助我们完成 void Swap(int& left, int& right) {int temp l…...

为什么要学Python?学Python有什么用?

为什么要学Python?学Python有什么用? 在当今的数字化时代,编程已成为一项宝贵的技能。Python,作为一种流行的编程语言,因其易于学习和强大的功能而受到全球开发者的青睐。本文将探讨学习Python的原因和它的实际应用&am…...

Linux磁盘IO、网络IO、零拷贝详解

一、什么是I/O? 在计算机操作系统中,所谓的I/O就是输入(input)和输出(output),也可以理解为读(read)和写(write),针对不同的对象,I/O模式可以划分…...

工业交换机外壳材质大比拼,看看哪种外壳适合你

在工业领域里,交换机就像我们的网络心脏,时刻跳动着确保信息畅通无阻。而它的外壳,就是保护这颗“心脏”的铠甲。今天,咱们就来聊聊这些铠甲——工业交换机外壳的材质和防护等级,看看它们如何守护我们的网络世界。 首…...

智慧公厕的技术基础、保障技术和应用价值

近年来,随着信息技术的快速发展,智慧公厕逐渐成为城市管理的热点项目。智慧公厕利用物联网技术与大数据、云计算、网络通信、自动化控制等先进技术相结合,公共厕所的管理变得更加快捷高效,实现了真正的智能化使用和智慧化管理。下…...

思腾合力受邀参加VALSE 2024视觉与学习青年学者研讨会

在充满学术氛围的五月,思腾合力荣幸受邀参加了于2024年5月5-7日在重庆举行的第十四届VALSE大会。作为视觉与学习领域的顶级交流平台,VALSE大会每年都吸引着全国专家与学者的目光。 本次大会不仅延续了往届的高水平学术研讨,还进一步拓宽了研究…...

geotrust dv通配符证书800

Geotrust是成立时间较久的正规CA认证机构,在过去的几十年间颁发了无数的SSL证书,这些SSL证书被各个开发者使用,受到大多数浏览器的信任。而Geotrust旗下的DV通配符证书因其广泛的应用范围受到了用户的青睐。今天就随SSL盾小编了解Geotrust旗下…...

SpringBoot工作原理

优点:自动装配,起步依赖 起步依赖 原理就是maven的依赖传递 【A依赖B、B依赖C….,则我导入依赖A的时候,B,C都会被maven加载进来】 重点看看自动装配 概念: 当Spring容器启动后,一些配置类、…...

【Spring】Spring 整合 Junit、MyBatis

一、 Spring 整合 Junit <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache…...

【JVM基础篇】JVM入门介绍

JVM入门介绍 为什么学习JVM 岗位要求 解决工作中遇到的问题 性能调优 真实案例 导出超大文件&#xff0c;系统崩溃从数据库中查询超大量数据出错消费者消费来不及导致系统崩溃Mq消息队列接受消息导致的内存泄漏业务高峰期系统失去响应 初识JVM 什么是JVM&#xff1f; JV…...

《21天学通C++》(第二十一章)理解函数对象

什么是函数对象&#xff1f; 函数对象是一种特殊类型的类&#xff0c;它重载了函数调用操作符 operator()&#xff0c;使得类的实例可以像函数一样被调用。 什么是谓词&#xff1f; 谓词是指一个能够返回布尔值&#xff08;true或false&#xff09;的函数或函数对象 1.一元函数…...

2024.1.1 IntelliJ IDEA 使用记录

2024.1.1 IntelliJ IDEA 使用记录 下载设置文件编码maven 配置 插件可以中文语言包安装lombok 插件Smart Tomcat ( 根据需要安装)Smart Tomcat 配置 热部署&#xff08;非必须的&#xff09;解决Intellij IDEA运行报Command line is too long的问题 项目导入java 设置maven 配置…...

扩展van Emde Boas树以支持卫星数据:设计与实现

扩展van Emde Boas树以支持卫星数据&#xff1a;设计与实现 1. 引言2. vEB树的基本概念3. 支持卫星数据的vEB树设计3.1 数据结构的扩展3.2 操作的修改3.3 卫星数据的存储和检索 4. 详细设计和实现4.1 定义卫星数据结构体4.2 修改vEB树节点结构4.3 插入操作的伪代码4.4 C语言实现…...

玩游戏专用远程控制软件

玩游戏专用远程控制软件&#xff1a;实现远程游戏的新体验 随着网络技术的不断发展和创新&#xff0c;远程控制软件已经逐渐渗透到我们生活的方方面面&#xff0c;尤其是在游戏领域。玩游戏专用远程控制软件&#xff0c;作为这一趋势下的产物&#xff0c;为玩家提供了全新的游…...

机器人规划控制——工程化——心得日记-20240510

近一周一直在调试机器人过迷宫形路线&#xff0c;这种路线特点是障碍物之间距离较小且障碍物也比较多&#xff0c;基本机器人会一直发生干涉检测&#xff0c;请求全局路径&#xff0c;然后再控制机器人前进。 遇到一个特别有趣的问题&#xff0c;当然最后查出来原因也感觉比较…...

2024年成都市标杆场景项目申报条件对象、奖励和认定材料流程

一、申报条件 &#xff08;一&#xff09;申报主体需注册成立两年以上&#xff0c;具备独立法人资格&#xff0c;在成都有固定经营或者生产场地&#xff0c;上两年度主营业务收入年均1000万元以上或上两年度主营业务收入增长率年均10%以上&#xff1b; &#xff08;二&#x…...

前端Vue uView 组件<u-search> 自定义右侧搜索按钮样式

前言 uView 文档的效果不是ui设计的样式 需要重新编辑 原效果 ui设计效果 解决方案 设置里说明的需要传一个样式对象 这个对象 需要写在 script 标签里面 这里需要遵循驼峰命名 比如font-size 改为 fontSize lineHeight和textAlign为水平锤子居中效果 searchStyle: {ba…...

【Linux网络编程】I/O多路转接之select

select 1.初识select2.了解select基本概念和接口介绍3.select服务器4.select特点及优缺点总结 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603;…...

三下乡社会实践投稿攻略在这里

在当今信息爆炸的时代&#xff0c;如何让自己的声音被更多人听到&#xff0c;成为许多人和企业所关心的问题。其中&#xff0c;向各大媒体网站投稿&#xff0c;成为了一种常见的宣传方式。但是&#xff0c;如何投稿各大媒体网站&#xff1f;新闻媒体发文策略又有哪些呢&#xf…...

银河麒麟桌面版开机后网络无法自动链接 麒麟系统开机没有连接ens33

1.每次虚拟机开机启动麒麟操作系统&#xff0c;都要输入账号&#xff0c;密码。 进入点击这个ens33 内网才连接 2. 如何开机就脸上呢&#xff1f; 2.1. 进入 cd /etc/sysconfig/network-scripts 2.2 修改参数 onbootyes 改为yes 2.3 重启即可 a. 直接重启机器查看是否正常&…...

vue+onlyOffice+java : 集成在线编辑word并保存

1.docker部署onlyOffice 1.1拉取最新版onlyOffice镜像 sudo docker pull onlyoffice/documentserver 1.2运行以下命令运行容器 其中 -v 后的第一部分是挂载自己的linux的哪个目录 # 启动docker容器&#xff0c;默认启动端口为80&#xff0c;可以进行修改 docker run -i -t …...

linux上用Jmter进行压测

在上一篇中安装好了Jmeter环境&#xff0c;在这一篇中将主要分享如何使用jmeter在linux中进行单机压测。 1.项目部署 在这里我们先简单部署一下测试环境&#xff0c;所用到的项目环境是个jar包&#xff0c;先在linux上home目录下新建app目录&#xff0c;然后通过rz命令将项目ja…...