Games101学习笔记 - MVP矩阵

MV矩阵(模型视图变换)

目的,把摄像机通过变换移动的世界坐标远点,并且朝向与Z轴的负方向相同。这个变换就是模型试图变换。
因为移动了相机,如果想保持正确的渲染的话,那么对应的物体需要要和相机保持相对运动,即模型也要经过
模型试图变换。

在这里插入图片描述
我们把上面的那个egt的交点,当作相机位置,T为相机的上方向,g为相机正方向的。
我们首先需要做的就是经过一系列变换,让它G与下面坐标系中-Z重叠,t与坐标系Y重叠,
相机点e与坐标原点重叠。

假设e的坐标为(Xe,Ye,Ze)。

首先我们需要移动相机位置到原点,使用一个平移矩阵
在这里插入图片描述
然后需要分别t旋转到Y, g旋转到-Z。但是我们直接旋转很困难。又因为
1.正向旋转一个角度的矩阵等于,负向旋转一个角度的矩阵的逆矩阵
2.旋转矩阵是正交矩阵
3.正交矩阵的逆矩阵是矩阵的转置
所以我们可以计算出-Z到g的旋转矩阵,以及Y到t的旋转矩阵.
在这里插入图片描述

然后分别求出他们的转置,就是我们需要的旋转矩阵。
在这里插入图片描述
然后我们结合两个矩阵之后就可以得出我们需要的模型视图变换矩阵
在这里插入图片描述

P矩阵(投影变换矩阵)

投影分为正交投影和透视投影,这两个是区别是是否有近大远小的效果。

正交投影投影变换:

首先把物体平移到远点,然后把缩放调整到-1,1,映射矩阵如下

在这里插入图片描述
1.其中经过的是一个平移矩阵,把物体的坐标移动到原点。
2.然后经过一个缩放矩阵,把物体的大小缩放在-1到1的立方体空间内。

透视投影变换:

可以看作是原平面通过挤压变换成近平面,挤压前两个平面中的所有点会有一个映射关系,
我们需要计算出来这个映射关系并用矩阵形式表示出来,然后在经过一次正交投影的矩阵变化
就可以把四锥体远近平面内的物体映射到进平面中,这就是透视投影变换。

在这里插入图片描述
前提:

我们观察到压缩后远平面到近平面中间的距离不变,远平面中心点压缩后也不变化。

计算方式:

1.首先从侧试图看视锥体,我们可以得到视锥体中的点在经过压缩后 y 前后的关系如下
在这里插入图片描述
2.x坐标的变化和y雷同
在这里插入图片描述
注意:我们这儿的侧视图里面的点并不是都在z轴上(x 坐标等于0),所以z的坐标在上述中并不是不变的.
3.根据上面的对应关系,我们得出矩阵如下
在这里插入图片描述
4.根据远平面和近平面中Z的值不遍
在这里插入图片描述
推导除矩阵的第三行,如下:

<1>.近平面上的点Z不表带入我们上述的矩阵公式,可以得到第三行矩阵是(0 0 A B)
在这里插入图片描述
<2>.远平面中心点,压缩后不变,同样带入矩阵变换方程,至此我们就可以得到一个二元一次方程组:
在这里插入图片描述
可以得到
在这里插入图片描述
由于n,f是我们自己定义的相机的远近裁剪面,是已知的,所以我们可以得到该压缩的完整变换矩阵。
5.得到压缩矩阵之后再经过正交矩阵的就可以得到透视矩阵的矩阵变换了
在这里插入图片描述
在这里插入图片描述

视口变换

以上的话MVP矩阵就算完成了。经过MVP矩阵的后的物体会放置在一个-1到1的视口中,但是我们最终目的是显示到屏幕上,那么我们就需要根据屏幕大小,把我们的视口进行一个缩放矩阵和一个平移矩阵,来确保我们的视口中心点在屏幕中心点,我们视口的宽高和屏幕的宽高一致,这个就是视口变换。
在这里插入图片描述

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

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

相关文章

day23-113. 路径总和ii

113. 路径总和ii 力扣题目链接(opens new window) 给定一个二叉树和一个目标和&#xff0c;找到所有从根节点到叶子节点路径总和等于给定目标和的路径。 说明: 叶子节点是指没有子节点的节点。 示例: 给定如下二叉树&#xff0c;以及目标和 sum 22&#xff0c; 思路 利用…

机器学习(十八):Bagging和随机森林

全文共10000余字&#xff0c;预计阅读时间约30~40分钟 | 满满干货(附数据及代码)&#xff0c;建议收藏&#xff01; 本文目标&#xff1a;理解什么是集成学习&#xff0c;明确Bagging算法的过程&#xff0c;熟悉随机森林算法的原理及其在Sklearn中的各参数定义和使用方法 代码…

【Spring】Spring中的设计模式

文章目录 责任链模式工厂模式适配器模式代理模式模版方法观察者模式构造器模式 责任链模式 Spring中的Aop的通知调用会使用责任链模式责任链模式介绍 角色&#xff1a;抽象处理者&#xff08;Handler&#xff09;具体处理者&#xff08;ConcreteHandler1&#xff09;客户类角…

14.3.4 【Linux】使用 LVM thin Volume 让 LVM 动态自动调整磁盘使用率

想像一个情况&#xff0c;你有个目录未来会使用到大约 5T 的容量&#xff0c;但是目前你的磁盘仅有 3T&#xff0c;问题是&#xff0c;接下来的两个月你的系统都还不会超过 3T 的容量&#xff0c; 不过你想要让用户知道&#xff0c;就是他最多有 5T 可以使用就是了&#xff01;…

Docker+rancher部署SkyWalking8.5并应用在springboot服务中

1.Skywalking介绍 Skywalking是一个国产的开源框架&#xff0c;2015年有吴晟个人开源&#xff0c;2017年加入Apache孵化器&#xff0c;国人开源的产品&#xff0c;主要开发人员来自于华为&#xff0c;2019年4月17日Apache董事会批准SkyWalking成为顶级项目&#xff0c;支持Jav…

Stable Diffusion - 俯视 (from below) 拍摄的人物图像 LoRA 与配置

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/132192139 图像来自 哥特风格 LoRA 俯视 LoRA&#xff0c;提升视觉冲击力&#xff0c;核心配置 <lora:view_from_below:0.6>,(from below,…

工程管理系统简介 工程管理系统源码 java工程管理系统 工程管理系统功能设计em

工程项目管理软件&#xff08;工程项目管理系统&#xff09;对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营&#xff0c;全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#xff…

什么是进程、线程、协程

什么是进程&#xff1f; 我们都知道计算机的核心是CPU&#xff0c;它承担了所有的计算任务&#xff1b;而操作系统是计算机的管理者&#xff0c;它负责任务的调度、资源的分配和管理&#xff0c;统领整个计算机硬件&#xff1b;应用程序则是具有某种功能的程序&#xff0c;程序…

github上有哪些值得读源码的react项目?

前言 下面是我整理的关于值得一读源码的react项目&#xff0c;希望对你有所帮助~ 1、 calcom Star: 21.6k calcom是一个开源的计算器应用程序。它提供了基本的数学运算功能&#xff0c;例如加法、减法、乘法和除法&#xff0c;还支持 科学计算、进制转换和单位转换等高级功能…

【linux-keepalive】keepalive避免单点故障,高可用配置

keepalive: [rootproxy ~]# yum install -y keepalived [rootproxy ~]# vim /etc/keepalived/keepalived.conf global_defs {router_id proxy1 //设置路由ID号vrrp_iptables //不添加任何防火墙规则 } vrrp_instance V…

c语言每日一练(4)

五道选择题 1、有以下代码&#xff0c;程序的输出结果是( ) #include <stdio.h> int main() {int a 0, b 0;for (a 1, b 1; a < 100; a){if (b > 20) break;//1if (b % 3 1)//2{b b 3;continue;}b b-5;//3}printf("%d\n", a);return 0; } A.1…

【ARM Cache 系列文章 8 -- ARM DynamIQ 技术介绍

文章目录 DynamIQ 技术背景DynamIQ技术详解DynamIQ 与 big.LITTLEDynamIQ cluster 分类硬件支持 DynamIQ为什么适合人工智能&#xff1f; DynamIQ 技术背景 2017年3月21日下午&#xff0c;ARM在北京金隅喜来登酒店召开发布会&#xff0c;正式发布了全新的有针对人工智能及机器…

IDEA创建项目常见问题

1.IDEA修改maven路径无效 创建spring项目&#xff0c;Maven导入报错&#xff0c;无法正常导入jar报&#xff0c;发现setting中设置的maven路径不是自己下载的路径&#xff0c;修改后无效。运行之后maven路径又恢复为其默认的路径 解决方案&#xff1a; 删除.mvn文件&#xff0…

dinput8.dll导致游戏打不开的解决方法,快速修复dinput8.dll文件

当你尝试启动某个游戏时&#xff0c;如果遇到dinput8.dll文件缺失或损坏的错误提示&#xff0c;可能会导致游戏无法正常运行。dinput8.dll是DirectInput API的一部分&#xff0c;它提供了游戏手柄、键盘和鼠标等输入设备的支持。本文将详细介绍dinput8.dll的作用、导致游戏无法…

Spring BeanPostProcessor 接口的作用和使用

BeanPostProcessor 接口是 Spring 框架中的一个扩展接口&#xff0c;用于在 Spring 容器实例化、配置和初始化 bean 的过程中提供自定义的扩展点。通过实现这个接口&#xff0c;您可以在 bean 实例创建的不同生命周期阶段插入自己的逻辑&#xff0c;从而实现对 bean 行为的定制…

AI 降临!!!

人的记忆是脆弱的。因此&#xff0c;个人笔记成为了我们构建第二大脑和进行知识管理的重要手段。然而&#xff0c;人工智能的崛起&#xff0c;无疑改变了我们处理信息和知识的方式。作为一名长期关注笔记方法论和 AI 软件的「效率成瘾者」和「软件发烧友」&#xff0c;我深感此…

银河麒麟高级操作系统V10助力联通云建设打出组合拳

联通云基于“双引擎基座一云多芯”为不同行业场景提供可靠、高质量的应用上云服务。在核心代码进行了全面把控&#xff0c;定制多架构芯片应用适配模版&#xff0c;开发了计算、存储、网络、中间件等组件&#xff0c;全面适配自主化服务器和操作系统&#xff0c;提供云服务器、…

Python中的dataclass:简化数据类的创建

Python中的dataclass是一个装饰器&#xff0c;用于自动添加一些常见的方法&#xff0c;如构造函数、__repr__、__eq__等。它简化了创建数据类的过程&#xff0c;减少了样板代码&#xff0c;提高了代码的可读性和可维护性。有点类似java里面的Java Bean。 让我们看一个简单的例子…

Cortex-M3的双堆栈MSP和PSP(学习)

M3的栈&#xff0c;先进后出。 是局部变量内存的开销&#xff0c;函数的调用都离不开栈。 Cortex-M3内核使用了双堆栈&#xff0c;即MSP和PSP。 MSP&#xff1a;Main_Stack_Pointer&#xff0c;即主栈。 PSP&#xff1a;Process_Stack_Pointer&#xff0c;即任务栈。 SP&#…

【图像去噪的扩散滤波】基于线性扩散滤波、边缘增强线性和非线性各向异性滤波的图像去噪研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…