我是靠谱客的博主 落后麦片,最近开发中收集的这篇文章主要介绍MVP矩阵,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

MVP矩阵:

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

M:模型空间(以自身为中心)—>世界空间(以世界为中心)

对应依次进行矩阵变换:

(1)缩放

(2)旋转

(3)平移

V:世界空间—>视觉空间(以摄像机为中心)

从世界空间变换到摄像机空间—>平移整个观察空间,摄像机原点和世界坐标原点重合,坐标轴重合—>摄像机是在世界空间中是先旋转,再平移—>为了让摄像机与世界坐标重合,逆变换

对应的矩阵变换:

(1)平移

(2)旋转

(3)z分量取反(摄像机默认朝向是-z)

P:视觉空间—>裁剪空间

1.不是真正的投影,为投影做准备。

2.目的:判断顶点是否在可见范围内。

3.P矩阵:对x,y,z分 量进行缩放,用w分量做范围值。如果x,y,z都在w范围内,那么该点在裁剪空间内。

透视投影:

正交投影:

nearClipPlaneHeight=2:Size

farClipPlaneHeight =nearClipPlaneHeight

nearClipPlaneWidth =Aspect nearClipPlaneHeight

farClipPlaneWidth = nearClipPlane Width

OS = 模型原点为坐标系原点的空间坐标系 = 模型空间
WS = 世界空间为坐标原点的空间坐标系 = 世界空间
VS = 摄像机为坐标系原点的空间坐标系 = 视觉空间
CS = 裁剪空间 确定像素是否位于可见范围内
SS = 屏幕空间 显示平面 根据平台不同 坐标原点不同 分别位于左下或者左上 OPENGL屏幕坐标系原点在左下角向上向右增加,D3D屏幕坐标系原点在左上角向下向右增加。
WS = OS * M矩阵
VS = WS * V矩阵
CS = VS * P矩阵
CS得到的坐标经过齐次除法(透视除法)和映射输出 得到SS的二维坐标 (一般unity自动在底层进行 所以我们只要得到裁剪空间内的坐标即可)

【五个空间中 只有观察空间(VS)是右手坐标系 剩余 都是左手坐标系】

最后

以上就是落后麦片为你收集整理的MVP矩阵的全部内容,希望文章能够帮你解决MVP矩阵所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(82)

评论列表共有 0 条评论

立即
投稿
返回
顶部