1.2数学基础

news2024/10/6 6:04:32

向量运算

矩阵运算

比较基础就不记录了


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.coloradmin.cn/o/1711250.html

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

相关文章

Pycharm中如何引入gitee?

1、在Pycharm中打开settings,找到plugins,搜索gitee,点击install,点击ok即可。 2、下载安装好后,选择VCS,找到Get from version Control。 3、通过ssh公钥方式登录,ssh公钥可以gitee上获取 4、…

跨境电商拓海新策略:智能小家电遇全球机遇与挑战

全球化与互联网普及背景下,跨境电商成为企业拓展海外市场的重要途径。智能小家电以其创新性和实用性,逐渐成为跨境电商热门品类。面对全球市场的机遇与挑战,跨境电商企业需要深思如何制定有效的拓海新策略。 首先,智能小家电在全球…

IC开发——VCS基本用法

1. 简介 VCS是编译型verilog仿真器,处理verilog的源码过程如下: VCS先将verilog/systemverilog文件转化为C文件,在linux下编译链接生成可执行文件,在linux下运行simv即可得到仿真结果。 VCS使用步骤,先编译verilog源…

HT46R002 贴片 SOP8 经济型AD型OTP MCU单片机芯片

HT46R002在智能家居中的具体应用案例可以包括以下几个方面: 1. 智能照明控制:可以用于控制LED灯的亮度和色温,甚至可以通过手机APP远程控制开关和调节灯光效果。 2. 环境监测:用于监测室内温度、湿度、空气质量等,当检…

【busybox记录】【shell指令】ln

目录 内容来源: 【GUN】【ln】指令介绍 【busybox】【ln】指令介绍 【linux】【ln】指令介绍 使用示例: 创建链接文件 - 链接文件(默认 - 硬链接) 创建链接文件 - 链接文件(软链接) 创建链接文件 -…

李廉洋:5.29黄金震荡,原油持续走高,今日美盘行情走势分析及策略。

黄金消息面分析:当前美国存在一个令人担忧且未被充分关注的问题:房地产行业低迷、高利率和抵押贷款利率、租金高涨以及美联储的紧缩政策构成了一个恶性循环。由于高房价和高抵押贷款利率,美国住房经济活动远低于两年前的水平。为了让该行业好…

Android ANR Trace日志阅读分析技巧

什么是Trace日志 Trace日志是指ANR目录下的一份txt文件 adb pull /data/anr/traces.txt Trace日志有什么用 分析应用ANR无响应的问题, Trace怎么用 Cmd line: com.xx ABI: arm Build type: optimized Zygote loaded classes3682 post zygote classes3750 Intern…

SpringSecurity6从入门到实战之引言和基本概念

SpringSecurity6从入门到实战之引言和基本概念 前言 在当今数字化时代,随着网络应用的日益普及,保护用户数据和系统安全变得至关重要。作为Java开发社区的中坚力量,Spring框架提供了一整套解决方案来构建企业级应用程序。然而,随…

Android 13 VSYNC重学习

Android 13 VSYNC重学习 引言 学无止境,一个字干就完事! 源码参考基于Android 13 aosp! 一. Android VSync模块开胃菜 在开始正式的分析之前,我们先简单对Android的Vsync模块简单介绍下,如下图所示,其中: HW_VSync是…

Dolphinscheduler不重启加载Oracle驱动

转载自刘茫茫看山 问题背景 某天我们的租户反馈数据库连接缺少必要的驱动,我们通过日志查看确实是缺少部分数据库的驱动,因为DolphinScheduler默认只带了Oracle和MySQL的驱动,并且需要将pom文件中的test模式去掉才可以在打包的时候引入。我…

C# 中 async 与 await 关键字详解

async 和 await 关键字的作用是使方法能够异步执行并等待异步操作的完成。(最重要的一点是记住 “异步执行”与“等待异步操作完成”,不是等待主线程操作完成) async 修饰符可将 方法、lambda 表达式或匿名方法指定为异步。 async 关键字用于…

一张图一个表——CSS选择器总结

CSS选择器总结: (这些表是一张图片^_^) 看底部 完整思维导图图片和表格的下载地址:https://download.csdn.net/download/denlnyyr/10597820

LeetCode 377.组合总和Ⅳ

这题是我蠢了&#xff0c;它说是组合数我就信了&#xff0c;言尽于此 class Solution { public:int combinationSum4(vector<int>& nums, int target) {vector<int> dp(2000,0);dp[0]1;for(int i0;i<target;i){for(int j0;j<nums.size();j){if(i>nums…

22.Volatile原理

文章目录 Volatile原理1.Volatile语义中的内存屏障1.1.volatile写操作的内存屏障1.1.1.StoreStore 屏障1.1.2.StoreLoad 屏障 1.2.volatile读操作的内存屏障1.2.1.LoadStore屏障1.2.2.LoadLoad屏障 2.volatile不具备原子性2.1.原理 Volatile原理 1.Volatile语义中的内存屏障 在…

定位器与PWM的LED控制

文章目录 一、STM32定时器二、脉宽调制pwm三、定时器控制led&#xff08;1&#xff09;实验内容&#xff08;2&#xff09;创建工程&#xff08;3&#xff09;Keli程序&#xff08;4&#xff09;观察波形图&#xff08;5&#xff09;实物连接图&#xff08;6&#xff09;实践效…

Python机器学习 Tensorflow + keras 实现CNN

一、实验目的 1. 了解SkLearn Tensorlow使用方法 2. 了解SkLearn keras使用方法 二、实验工具&#xff1a; 1. SkLearn 三、实验内容 &#xff08;贴上源码及结果&#xff09; 使用Tensorflow对半环形数据集分 #encoding:utf-8import numpy as npfrom sklearn.datasets i…

AI图书推荐:用ChatGPT和Python搭建AI应用来变现

《用ChatGPT和Python搭建AI应用来变现》&#xff08;Building AI Applications with ChatGPT API&#xff09;将ChatGPT API与Python结合使用&#xff0c;可以开启构建非凡AI应用的大门。通过利用这些API&#xff0c;你可以专注于应用逻辑和用户体验&#xff0c;而ChatGPT强大的…

clocking wizard IP核通过AXI4-Lite接口实现动态重新配置应用实例

在最近的FPGA应用中&#xff0c;应用到了基于Zynq 7000的Uart串口设计&#xff0c;为了让串口的时钟更精确&#xff0c;采用了外部时钟模式&#xff0c;如下图所示。外部时钟连接到了Clocking Wizard IP核的输出端。 在串口通信时&#xff0c;发现串口有错码出现。例如&#xf…

ADS基础教程16 - 存档和导入(workspace、cell、view)

设计加密保护IP 一、引言二、workspace归档二、Cell归档三、View归档四、导入归档文件 一、引言 介绍如何ADS中如何对workspace、cell和view进行存档&#xff0c;以及如何将存档文件导入到工程中。 二、workspace归档 (1)在菜单栏中&#xff0c;选择File–>Archive Works…

Follow Your Pose: Pose-Guided Text-to-Video Generation using Pose-Free Videos

清华深&港科&深先进&Tencent AAAI24https://github.com/mayuelala/FollowYourPose 问题引入 本文的任务是根据文本来生成高质量的角色视频&#xff0c;并且可以通过pose来控制任务的姿势&#xff1b;当前缺少video-pose caption数据集&#xff0c;所以提出一个两…