Skip to content
This repository has been archived by the owner on Nov 17, 2020. It is now read-only.

Latest commit

 

History

History
42 lines (26 loc) · 1.48 KB

3-2.MVP.md

File metadata and controls

42 lines (26 loc) · 1.48 KB

MVP三种矩阵功能

M: Model

用于表示所绘制顶点在三维空间中的位置(包括旋转、缩放、平移)。

V: View

表示用于观察世界的“摄像机”所处的位置以及姿态。

P: Projection

用于表示摄像机所观察到的物体,如何映射到投影平面上。

投影矩阵分为两种

  1. 正交投影
    • 正交投影没有近大远小,最终渲染空间为一个长方形
  2. 透视投影
    • 透视投影产生近大远小的效果,最终渲染空间为一个梯形体

使用方法

变换过程为 $pos = M_{Project} M_{View} M_{Model} V_{input} $

其中 $pos$ 归一化(指$pos=\frac{pos}{pos.w}$,不需要vertex shader进行)后是投影面坐标:

  • $pos.x \in [-1, 1] $
  • $pos.y \in [-1, 1] $
  • GLSurfaceView 中心是$(pos.x, pos.y)$原点

由于使用列向量,所以变换过程从右至左(其中数值为了便于理解,没有实际意义):

  1. $V_{input}$ 输入物体坐标,比如绘制一个圆形,中心位置是$(0, 0, 0)$
  2. $M_{Model}$ 进行变换,变换后发现圆形中心实际处于$(0, 0, -5)$的位置
  3. $M_{View}$ 进行变换,变换后发现圆形中心相对于摄像头处于$(0, 5, -2)$的位置
  4. $M_{Projection}$ 进行视角变换,变换后物体位于投影面$(0, 0.3)$,深度$0.2$

得到物体在投影平面的坐标和深度之后,OpenGL对物体进行光栅化、剪裁,而后将像素由投影平面变换到视口空间,即

  • $x \in [0, view\ width]$
  • $y \in [0, view\ height]$