1.2数学基础

向量运算

矩阵运算

比较基础就不记录了


MVP矩阵推导

1.讲为什么要有矩阵变换和不同的坐标空间

  • 将3D物体转化到2D平面
  • 为各个空间的运用做准备

2.介绍各个空间的概念和含义

MVP矩阵代表什么?

MVP矩阵分别是模型(Model)、观察(View)、投影(Projection)三个矩阵。我们的顶点坐标起始于局部空间(Local Space),在这里它称为局部坐标(Local Coordinate),它在之后会变为世界坐标(World Coordinate),观察坐标(View Coordinate),裁剪坐标(Clip Coordinate),并最后以屏幕坐标(Screen Coordinate)的形式结束。

OS =  模型原点为坐标系原点的空间坐标系 = 模型空间 
WS = 世界空间为坐标原点的空间坐标系 = 世界空间 
VS = 摄像机为坐标系原点的空间坐标系 = 视觉空间 
CS =  裁剪空间 确定像素是否位于可见范围内
SS = 屏幕空间 显示平面 根据平台不同 坐标原点不同 分别位于左下或者左上 OPENGL屏幕坐标系原点在左下角向上向右增加,D3D屏幕坐标系原点在左上角向下向右增加。
WS = OS * M矩阵 
VS = WS * V矩阵 
CS = VS * P矩阵
CS得到的坐标经过齐次除法(透视除法)和映射输出 得到SS的二维坐标 (一般unity自动在底层进行 所以我们只要得到裁剪空间内的坐标即可)

注:五个空间中 只有观察空间(VS)是右手坐标系 剩余 都是左手坐标系

M:模型空间->世界空间

模型空间:以自身为中心的空间坐标系

3dmax采用右手坐标系

世界空间:以世界为中心的空间坐标系

unity中左手坐标系

M矩阵的作用:让游戏对象的顶点坐标从模型空间转换到世界空间

从模型空间变换到世界空间步骤:

  1. 第一步进行了缩放
  2. 第二步进行了旋转
  3. 第三步进行了平移

顶点坐标的变换顺序(变换顺序不能改变)

世界坐标变换要先缩放、后旋转、再平移的原因

对应的依次进行矩阵变换得出变换矩阵

读矩阵需要从右往左

V :世界空间->视觉空间

以摄像机为中心的空间坐标系(v空间的z是朝向相机后面的)

M矩阵的作用:从世界空间变换到摄像机空间

求V矩阵思路:

  1. 平移整个观察空间,摄像机原点和世界坐标原点重合,坐标轴重合
  2. 摄像机是在世界空间中是先旋转,再平移
  3. 为了让摄像机与世界坐标重合,逆变换

摄像机在世界空间中是先旋转,再平移的,所以我想,如果想要物体在世界空间下以视觉空间为坐标变换到原点,就要逆着先平移后旋转吧。

从世界空间变换到摄像机空间步骤:

  1. 第一步进行平移
  2. 第二步进行旋转
  3. 第三步Z分量取反(左手坐标系的原因)

左手坐标系的原因:在unity中,它的摄像机空间的正方形是负z的方向,如果按正常的来说,视觉空间下的坐标正方向应该是摄像机的正方形,但unity是左手坐标系,所以要取反)

对应的依次进行矩阵变换得出变换矩阵

P :视觉空间->裁剪空间

1.不是真正的投影,为投影做准备。

2.目的:判断顶点是否在可见范围内。

3.P矩阵:对x,y,z分量进行缩放,用w分量做范围值。如果x,y,z都在w范围内,那么该点在裁剪空间内。

透视投影

那么计算出near、far、w有什么用呢?

我想近平面时w=near,远平面时w=far,一个物体有顶点构成这些顶点在裁剪空间下具有(x,y,z)坐标,如果这个顶点想要出现在视锥体内,也就是被看见,该顶点在可见范围内,方便为之后的投影做准备,那么其xyz就要分别大于-w小于w,多余部分就被裁剪掉,不出现在屏幕上。这也是p矩阵起到的作用。

正交投影

3.推导MVP变换矩阵

Model Matrix

View Matrix

Projection Matrix

4.考虑找一些对应空间操作的例子

世界空间的应用

不规则平面的Tilling:以世界坐标当做uv进行采样

视觉空间的应用

根据摄像机距离显隐变换的云朵

模型空间,世界空间,观察空间的区别

模型空间

模型空间是和某个模型或者说是对象有关的。有时模型空间也被称为对象空间或局部空间。每个模型都有自己独立的坐标空间,当它移动或旋转的时候,模型空间也会跟着它移动和旋转。比如自己的游戏模型,我们移动的时候我们的模型空间也在跟着移动,我们转身时本身的前后左右方向也跟着改变。

世界空间

世界空间是一个特殊的坐标系,因为它建立了我们所关心的最大的空间。世界空间可以被用于描述绝对位置(这里指的是世界坐标系中的位置),通常我们把世界空间的原点放置在游戏空间的中心。

在 unity 中,除了观察空间(摄像机空间),所有的空间坐标系都是使用的左手坐标系。很多的效果都是要在世界空间中完成的。

观察空间(摄像机空间)

最大的区别在于在观察空间中我们使用的是右手坐标系,而这个是符合OpenGL的,在观察空间中我们需要把世界空间的顶点转换到观察空间,为此我们需要求的观察空间的变换矩阵,因为坐标系的不同,所以我们需要对z轴取反,并求得逆变换,在观察空间还有一项就是需要将观察空间的顶点转换到裁剪空间(也被称为齐次裁剪空间),这个用于变换的矩阵叫做裁剪矩阵,也被称为投影矩阵,在观察空间中并不是真正的投影,而是准备投影的数据,即那些顶点需要保留,那些需要剔除,这是由投影方式决定的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/18350.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

positivessl泛域名证书500元13个月

随着创建网站的门槛变低,不论是个人用户还是企事业单位用户创建的域名网站也越来越多,怎么维护网络环境的安全成为了各个用户需要解决的问题。为了保护网站的数据安全,防止恶意攻击和数据泄露,大多数用户选择为域名网站安装数字证…

linux 创建网络端口监听

1.nc nc命令全程netcat&#xff0c;用于设置路由器。他能通过TCP和UDP在网络中读写数据。 启动一个监听的端口 nc -l -p <port_number> 范围端口扫描(默认TCP) nc -v -z -w2 127.0.0.1 1-10000UDP范围端口扫描 nc -v -u -z -w2 127.0.0.1 1-10000指定端口扫描 nc -nvv 12…

NGINX启动停止与各种常见问题

很多项目代理工具都是NGINX&#xff0c;这个工具也确实很牛。据说是俄罗斯人研发出来的。 NGINX的配置文件通常是../xx/conf/nginx.conf&#xff0c;在里面做后端服务器IP或者网关IP的代理&#xff0c;加载前端页面的同时&#xff0c;获取后端数据。 NGINX的启动文件在../xx/…

水电智能抄表是什么?

1.简述&#xff1a;水电智能抄表的兴起 水电智能抄表系统是现代科学技术和传统公共文化服务相结合的产物&#xff0c;它通过自动化技术性改变了传统的人工抄表方式&#xff0c;大大提高了高效率&#xff0c;降低生产成本&#xff0c;同时也为用户提供了更为贴心的服务。这一新…

轻兔推荐 —— 一个好用的软件服务推荐平台

给大家推荐一个好用的的软件服务推荐平台&#xff1a;轻兔推荐 网站界面简洁大方&#xff0c;没有太多杂七杂八的功能和页面&#xff0c;有明暗主题色可以选择&#xff0c;默认为亮色&#xff0c;可在网站上方手动切换。 每工作日都会推荐一款软件&#xff0c;有时会加更&…

B2124 判断字符串是否为回文

判断字符串是否为回文 题目描述 输入一个字符串&#xff0c;输出该字符串是否回文。回文是指顺读和倒读都一样的字符串。 输入格式 输入一行字符串&#xff0c;长度小于 100 100 100。 输出格式 如果字符串是回文&#xff0c;输出 yes&#xff1b;否则&#xff0c;输出 …

Flutter 中的 PhysicalModel 小部件:全面指南

Flutter 中的 PhysicalModel 小部件&#xff1a;全面指南 Flutter 的 PhysicalModel 小部件提供了一种简单而高效的方式来给应用添加物理效果&#xff0c;如阴影和层次感。它本质上是一个矩形的 Container&#xff0c;带有圆角边框和可选的阴影&#xff0c;能够模仿真实世界中…

数据赋能(102)——概念:数据分析、数据挖掘、数据洞察

此文为本人学习与提高能力的笔记。 数据分析、数据挖掘与数据洞察这三个术语&#xff0c;为了确保这些术语使用的精准度和专业性&#xff0c;我们必须对它们有更为深入的认知。这三个概念虽在某种程度上相互关联&#xff0c;但在实际应用中各自承载着不同的侧重点和用途&#…

内网安全--隧道技术-MSF上线本地

免责声明:本文仅做技术交流与学习... 不得不说,小白最近也是用上了viper,这里要特别感谢一下my bro 北岭敲键盘的荒漠猫 MSF--viper: --生成马子-->上线 --进入meterpreter. 1-查看路由,添加路由. 查看路由信息 : run autoroute -p run post/multi/manage/autoroute 添加…

『香橙派』基于Orange Pi AIpro打造高效个人云存储解决方案

&#x1f4e3;读完这篇文章里你能收获到 了解Orange Pi AIpro硬件优势&#xff0c;为构建高效云存储基础设施的理想平台。学会使用Orange Pi AIpro硬件平台&#xff0c;搭载Ubuntu Server系统&#xff0c;打造云存储环境。掌握利用Kodbox软件&#xff0c;享受文件管理、多格式…

微软MSBuild大会发布Copilot+PC:技术革新还是隐私噩梦?

微软在最近的MSBuild 2024大会上发布了全新的CopilotPC概念&#xff0c;这一技术结合了高通骁龙X Elite芯片&#xff0c;将人工智能与PC紧密结合。此次发布引起了广泛关注&#xff0c;不仅是因为其技术创新&#xff0c;还因为潜在的隐私问题。甚至连Elon Musk也对此表示担忧&am…

CGAL 网格布尔操作(带属性)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 CGAL在进行布尔操作时可以为我们提供了Mesh的相关信息,比如并集部分是由原Mesh数据的那些面片组成,虽然现阶段还不了解这有什么用。 二、实现代码 #include <iostream> #include <iterator> #includ…

小熊家务帮day5 客户管理模块1 (小程序认证,手机验证码认证等)

客户管理模块 1.认证模块1.1 认证方式介绍1.1.1 小程序认证1.1.2 手机验证码登录1.1.3 账号密码认证 1.2 小程序认证1.2.1 小程序申请1.2.2 创建客户后端工程jzo2o-customer1.2.3 开发部署前端1.2.4 小程序认证流程1.2.4.1 customer小程序认证接口设计Controller层Service层调用…

C++ | Leetcode C++题解之第118题杨辉三角

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<vector<int>> generate(int numRows) {vector<vector<int>> ret(numRows);for (int i 0; i < numRows; i) {ret[i].resize(i 1);ret[i][0] ret[i][i] 1;for (int j 1; j &…

Python | Leetcode Python题解之第117题填充每个节点的下一个右侧节点指针II

题目&#xff1a; 题解&#xff1a; class Solution:def connect(self, root: Node) -> Node:if not root:return Nonestart rootwhile start:self.last Noneself.nextStart Nonep startwhile p:if p.left:self.handle(p.left)if p.right:self.handle(p.right)p p.nex…

基于眼底增强的疾病感知蒸馏模型用于OCT图像的视网膜疾病分类

文章目录 Fundus-Enhanced Disease-Aware Distillation Model for Retinal Disease Classification from OCT Images摘要方法实验结果 Fundus-Enhanced Disease-Aware Distillation Model for Retinal Disease Classification from OCT Images 摘要 光学相干断层扫描&#xf…

【MySQL】SQL 基础

文章目录 【 1. SQL 的书写规则 】1.1 大小写规则1.2 常量的表示1.3 注释1.4 HELP 系统帮助 【 2. 常用数据库函数 】2.1 SHOW DATABASES 显示数据库2.2 CREATE DATABASE 创建数据库2.3 ALTER DATABASE 修改数据库2.4 DROP DATABASE 删除数据库2.5 USE 选择数据库 【 3. RDBMS …

TypeScript系列之-- 数组和元组类型

数组的定义&#xff1a; 第一种&#xff0c;可以在元素类型后面接上[] let list: number[] [1, 2, 3]; 第二种方式是使用数组泛型&#xff0c;Array<元素类型> let list: Array<number> [1, 2, 3]; 如果数组想每一项放入不同数据怎么办&#xff1f;用元组类型…

软件工程作业8

说说你使用过的编程语言&#xff0c;比较它们的优势。 我使用过C语言、Java。 C语言的优势&#xff1a; 性能高效&#xff1a;C语言是编译型语言&#xff0c;接近底层&#xff0c;执行效率高&#xff0c;特别适合对性能有严格要求的应用&#xff0c;如操作系统、嵌入式系统、…

antd学习笔记

antd组件库为Web应用提供了丰富的基础UI组件&#xff0c;antd全称为&#xff1a;ant-design。 antd官网&#xff1a;Ant Design - 一套企业级 UI 设计语言和 React 组件库 一、安装 npm install antd 或 yarn add antd