IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 技美 百人计划_1.2.3MVP矩阵 -> 正文阅读

[游戏开发]技美 百人计划_1.2.3MVP矩阵

技美 百人计划_1.2.3MVP矩阵

1.2.3MVP矩阵1.2.2矩阵

什么是MVP矩阵

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

M 矩阵 模型空间——》世界空间

模型空间是以自身为原点的空间坐标系
世界空间是以世界中心为原点的坐标系

在不同的建模软件或者游戏引擎中使用的坐标系是不一样的,比如OpenGl使用的右手坐标系,DirectX使用的是左手坐标系,两种坐标系的区分方法是,正x轴指向右面正y轴指向上面,通过延正邪x轴方向到正y轴方向握拳大拇指的指向就是相应坐标系的正z轴方向,在握拳的过程中,如果是顺时针方向就是左手坐标系,如果是逆时针方向就是右手坐标系,在Unity中使用的左手坐标系。

从模型空间到世界空间是怎么变换的:

  • 第一步进行缩放
  • 第二部进行旋转
  • 第三步进行平移

(顺序不能改变(矩阵乘法不满足乘法交换律))
M = [ 1 0 0 t x 0 1 0 t y 0 0 1 t z 0 0 0 1 ] [ c o s θ 0 s i n θ 0 0 1 0 0 ? s i n θ 0 c o s θ 0 0 0 0 1 ] [ k x 0 0 0 0 k y 0 0 0 0 k z 0 0 0 0 1 ] M= \begin{bmatrix} 1&0&0&t_x\\ 0&1&0&t_y\\ 0&0&1&t_z\\ 0&0&0&1 \end{bmatrix} \begin{bmatrix} cos\theta &0&sin\theta&0\\ 0&1&0&0\\ -sin\theta&0&cos\theta&0\\ 0&0&0&1 \end{bmatrix} \begin{bmatrix} k_x&0&0&0\\ 0&k_y&0&0\\ 0&0&k_z&0\\ 0&0&0&1 \end{bmatrix} M=?????1000?0100?0010?tx?ty?tz?1???????????cosθ0?sinθ0?0100?sinθ0cosθ0?0001???????????kx?000?0ky?00?00kz?0?0001??????

V矩阵 世界空间->视觉空间

视觉空间就是以摄像机为空间的坐标系

  • 从世界空间变换到摄像机空间

  • 平移整个观察空间,摄像机原点和世界坐标原点重合,坐标轴重合

  • 谁相机在世界空间中是先旋转,再平移

  • 为了让摄像机与世界坐标重合,逆变换

  • 第一步进行平移

  • 第二部进行旋转

  • 第三步z分量取反(Unity左手坐标系z轴负方向是相机方向)

将摄像机坐标系原点移动到世界坐标系原点
V = [ 1 0 0 0 0 c o s θ ? s i n θ 0 0 s i n θ c o s θ 0 0 0 0 1 ] [ 1 0 0 t x 0 1 0 t y 0 0 1 t z 0 0 0 1 ] V= \begin{bmatrix} 1&0&0&0\\ 0&cos\theta&-sin\theta&0\\ 0&sin\theta&cos\theta&0\\ 0&0&0&1 \end{bmatrix} \begin{bmatrix} 1&0&0&t_x\\ 0&1&0&t_y\\ 0&0&1&t_z\\ 0&0&0&1 \end{bmatrix} V=?????1000?0cosθsinθ0?0?sinθcosθ0?0001???????????1000?0100?0010?tx?ty?tz?1??????

P矩阵 视觉空间——》裁剪空间

  • 不是真正的投影,为投影做准备
  • 目的:判断顶点是否在可见范围内
  • p矩阵:对x,y,z分量进行缩放,用w分量做范围值。如果x,y,z都在W范围内,那么该点在裁剪空间内

两种投影:透视投影(近大远小)
正交投影(没有近大远小多用于2D游戏)对应不同的P矩阵

P矩阵推导

世界空间的应用

大致可以听明白什么意思。但是语法不熟悉
在这里插入图片描述
在这里插入图片描述

视觉空间的应用

大致可以听明白什么意思。但是语法不熟悉
在这里插入图片描述
在这里插入图片描述

小作业

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

模型空间:
模型空间是和某个对象某个物体相关的,也被成为对象空间,局部空间,是基于物体(对象)自身为原点。
世界空间
世界空间是一个特殊的坐标系,它是以世界(概念)为原点,Unity中的世界坐标都是基于世界空间的坐标
观察空间
观察空间在投影之前为投影做准备,观察那些像素符合要求保留那些不符合需要丢弃裁剪掉(由投影模式决定),和其他操作(Unity需要对z轴取反)最后得到可以用来投影的数据。
这里看其他人的:
【最大的区别在于在观察空间中我们使用的是右手坐标系,而这个是符合OpenGL的,在观察空间中我们需要把世界空间的顶点转换到观察空间,为此我们需要求的观察空间的变换矩阵,因为坐标系的不同,所以我们需要对z轴取反,并求得逆变换,
在观察空间还有一项就是需要将观察空间的顶点转换到裁剪空间(也被称为齐次裁剪空间),这个用于变换的矩阵叫做裁剪矩阵,也被称为投影矩阵,在观察空间中并不是真正的投影,而是准备投影的数据,即那些顶点需要保留,那些需要剔除,这是由投影方式决定的】

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-04-28 12:10:15  更:2022-04-28 12:11:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:39:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码