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轴取反,并求得逆变换,在观察空间还有一项就是需要将观察空间的顶点转换到裁剪空间(也被称为齐次裁剪空间),这个用于变换的矩阵叫做裁剪矩阵,也被称为投影矩阵,在观察空间中并不是真正的投影,而是准备投影的数据,即那些顶点需要保留,那些需要剔除,这是由投影方式决定的。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数组-捡石子小游戏

一、题目描述 二、解题思路 刚开始拿到题目的时候在想是不是需要把所有情况枚举出来,其实思考一下能看出规律: 1.如果有1、2、3颗石子,小牛一定可以赢; 2.再来看4颗石子的时候,小牛A可以拿1~3颗,但是无论小…

scrapy 整合 mitm

1.mitm 是什么 MITMproxy 是一个开源的中间人代理,常用于网络流量的拦截、查看和修改。 2.scrapy 整合 mitm步骤 2.1 安装mitm PS F:\studyScrapy\itcastScrapy> pip install mitmproxy2.2 在settings 中配置下载器中间件 # settings.pyDOWNLOADER_MIDDLEWARES…

工业路由器在新能源数字化中的应用:重塑能源行业的未来

随着全球对可再生能源和能源效率的追求日益加强,新能源数字化已成为推动行业发展的关键因素。在这一变革的浪潮中,工业路由器以其卓越的性能和独特的功能,成为新能源数字化不可或缺的核心组件。本文将深入探讨工业路由器在新能源数字化中的应…

如何解决链游中可能出现的延迟或网络拥堵问题?

随着区块链技术的不断发展和普及,链游(基于区块链的游戏)作为新兴的娱乐形式,正逐渐走进大众的视野。然而,与传统游戏相比,链游在运行过程中可能会遇到一些特有的问题,其中最为突出的就是延迟和…

YiShaAdmin:一款基于.NET Core Web + Bootstrap的企业级快速开发框架

前言 今天大姚给大家分享一款基于.NET Core Web Bootstrap的企业级快速后台开发框架、权限管理系统,代码简单易懂、界面简洁美观(基于MIT License开源,免费可商用):YiShaAdmin。 项目官方介绍 YiShaAdmin 基于.NET…

孔子,孟子,荀子的以果决其行。

我们再往前,中间的有很多就不说了,我们可以自己去看他们的履历,看有没有——以果决其行的行为,以及有没有知行合一的身影。 再往前,到了孟子,孔孟都被称为圣人,孟子的很多话到现在我们都耳熟能详…

探索标准差与方差的奥秘

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、标准差与方差的基础理解 代码案例 二、标准差与方差的计算方法 方差的计算 标准差的…

STM32 入门教程(江科大教材)#笔记2

3-4按键控制LED /** LED.c**/ #include "stm32f10x.h" // Device headervoid LED_Init(void) {/*开启时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_I…

少年应有鸿鹄志,当骑骏马踏平川!

点击上方蓝字关注狂神说 少年应有鸿鹄志,当骑骏马踏平川: 少年应当拥有鸿鹄一样的高远志向,翱翔长空,应当骑着骏马跨越山河平川。所谓少年,就应该意气风发,就应该胸怀壮志,追风赶月,…

Linux入门攻坚——23、DNS和BIND基础入门2

前一篇实践了正向解析服务器的配置使用,如何配置反向解析呢? 反向区域: 区域名称:网络地址反写.in-addr.arpa. 192.168.138. --> 138.168.192.in-addr.arpa. (1)定义区域: zone "ZONE_NAME" I…

CASS11自定义宗地图框

1、找到CASS11的安装路径,找到如下文件夹: 2、打开【report】文件夹,如下: 3、打开其中一个压缩包,如【标准宗地图】压缩包,结果如下: 4、打开后,将其另存为到桌面,随后关…

详解makefile中addprefix

在 Makefile 中,$(addprefix prefix,names…) 是一个函数,用于将指定的前缀添加到一组空格分隔的文件名中。这个函数通常用于将相同的前缀添加到一组文件名或路径中,非常适合在 Makefile 中进行路径拼接操作。 语法: makefile C…

ubuntu server 24.04 (Linux) 源码编译安装 OpenResty 1.25.3.1 Released

1 下载: OpenResty - 开源官方站 2 通过xftp等方式上传到ubuntu服务器 3 安装 #解压 tar zxvf openresty-1.25.3.1.tar.gz #创建运行用户 sudo groupadd www sudo useradd -g www www -s /bin/false #安装依赖软件 sudo apt update sudo apt-get install libpcre3-dev l…

如何创建一个vue项目?详细教程,如何创建第一个vue项目?

已经安装node.js在自己找的到的地方新建一个文件夹用于存放项目,记住文件夹的存放路径,以我为例,我的文件夹路径为D:\tydic 打开cmd命令窗口,进入刚刚的新建文件夹 切换硬盘: D: 进入文件夹:cd tydic 使…

SpaceX间接「颠覆」了手机?星链如何直连手机通信?

SpaceX 旗下的星链项目推出了一个极具颠覆性的技术——direct to cell(DTC),即通过卫星直接与手机建立通信。这项技术无需对手机进行任何改装,大多数普通手机都可以直接接入星链的卫星网络,实现全球范围内的手机信号覆…

window安装ffmpeg播放本地摄像头视频

1、安装ffmpeg ffmpeg官方网站:FFmpeg 下载后解压文件夹名为ffmpeg 2、设置环境变量 目录 1、安装ffmpeg 设置环境变量 以F:\software\after\ffmpeg\bin为例 在命令行中输入ffmpeg出现下方代表安装成功 3、通过ffmpeg播放本地电脑摄像头 鼠标右击开始按钮&…

一些Spring的理解

说说你对Spring的理解 首先Spring是一个生态:可以构建企业级应用程序所需的一切基础设施 但是,通常Spring指的就是Spring Framework,它有两大核心: IOC和DI 它的核心就是一个对象管理工厂容器,Spring工厂用于生产Bea…

【前端篇】前端开发大厂面试真题

为助力小伙伴们梳理前端知识体系,从而能够充分地做好面试准备,那么今天就来给大家分享一份前端开发的面试真题与相关知识点,其中涵盖了最新版本的八股文(包含最新的 Vue 3 面试题)、高频算法题以及大佬的面经&#xff…

delphi advstringgrid 表格中加checkbox

加checkbox for i : 0 to sg.RowCount - 1 dobeginsg.AddCheckBox(1,i,false,false);for j : 0 to sg.ColCount - 1 dobeginif j <> 1 thensg.CellProperties[j,i].ReadOnly : true;//只读end;end; 读取&#xff0c;设置checkbox&#xff0c;全选&#xff0c;反选 proced…

6月来得及!考研数学120分复习规划:660/880/1000/1800怎么刷?

首先&#xff0c;120分是个什么概念&#xff1f; 如果目标120&#xff0c;历年真题就要135以上。这是因为&#xff1a; 1. 习题册里都是历年真题改编&#xff0c;很多题型见过了&#xff1b; 2. 考场发挥有不确定因素&#xff0c;所以需要安全边界。 总体规划 那么&#xff…