技美 百人计划_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=100001000010txtytz1cosθ0sinθ00100sinθ0cosθ00001kx0000ky0000kz00001

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=10000cosθsinθ00sinθcosθ00001100001000010txtytz1

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

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

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

P矩阵推导

世界空间的应用

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

视觉空间的应用

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

小作业

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值