渲染学习笔记

渲染管线

  • 应用程序阶段
    把需要显示的几何信息输入到渲染管线。
  • 几何阶段
    顶点着色、投影变化、裁剪和屏幕映射。
  • 光栅化阶段
    三角面设置、三角形遍历。

向量

向量长度∥ v ⃗ ∥ = x 2 + y 2 + z 2 \lVert\vec{v}\rVert=\sqrt{x^2+y^2+z^2}v=x2+y2+z2
单位向量n ^ = v ⃗ ∥ v ⃗ ∥ \hat{n}=\frac{\vec{v}}{\lVert\vec{v}\rVert}n^=vv
点乘v ⃗ ⋅ k ⃗ = ∥ v ⃗ ∥ ⋅ ∥ k ⃗ ∥ ⋅ cos ⁡ θ \vec{v}\cdot{\vec{k}}=\lVert\vec{v}\rVert\cdot\lVert\vec{k}\rVert\cdot\cos\thetavk=vkcosθ
v ⃗ ⋅ k ⃗ = 1 ⋅ 1 ⋅ cos ⁡ θ = cos ⁡ θ , v 为 单 位 向 量 \vec{v}\cdot{\vec{k}}=1\cdot1\cdot\cos\theta=\cos\theta,v为单位向量vk=11cosθ=cosθ,v
cos ⁡ θ = v ⃗ ⋅ k ⃗ ∥ v ˉ ∥ ⋅ ∥ k ˉ ∥ \cos \theta=\frac{\vec{v} \cdot \vec{k}}{\|\bar{v}\| \cdot\|\bar{k}\|}cosθ=vˉkˉvk

矩阵

矩阵缩放[ S 1 0 0 0 0 S 2 0 0 0 0 S 3 0 0 0 0 1 ] ⋅ ( x y z 1 ) = ( S 1 ⋅ x S 2 ⋅ y S 3 ⋅ z 1 ) \left[\begin{array}{cccc} S_{1} & 0 & 0 & 0 \\ 0 & S_{2} & 0 & 0 \\ 0 & 0 & S_{3} & 0 \\ 0 & 0 & 0 & 1 \end{array}\right] \cdot\left(\begin{array}{c} x \\ y \\ z \\ 1 \end{array}\right)=\left(\begin{array}{c} S_{1} \cdot x \\ S_{2} \cdot y \\ S_{3} \cdot z \\ 1 \end{array}\right)S10000S20000S300001xyz1=S1xS2yS3z1
矩阵位移:[ 1 0 0 T x 0 1 0 T y 0 0 1 T z 0 0 0 1 ] ⋅ ( x y z 1 ) = ( x + T x y + T y z + T z 1 ) \left[\begin{array}{cccc} 1 & 0 & 0 & T_{x} \\ 0 & 1 & 0 & T_{y} \\ 0 & 0 & 1 & T_{z} \\ 0 & 0 & 0 & 1 \end{array}\right] \cdot\left(\begin{array}{c} x \\ y \\ z \\ 1 \end{array}\right)=\left(\begin{array}{c} x+T_{x} \\ y+T_{y} \\ z+T_{z} \\ 1 \end{array}\right)100001000010TxTyTz1xyz1=x+Txy+Tyz+Tz1
沿x xx轴旋转:[ 1 0 0 0 0 cos ⁡ θ − sin ⁡ θ 0 0 sin ⁡ θ cos ⁡ θ 0 0 0 0 1 ] ⋅ ( x y z 1 ) = ( x cos ⁡ θ ⋅ y − sin ⁡ θ ⋅ z sin ⁡ θ ⋅ y + cos ⁡ θ ⋅ z 1 ) \left[\begin{array}{cccc} 1 & 0 & 0 & 0 \\ 0 & \cos \theta & -\sin \theta & 0 \\ 0 & \sin \theta & \cos \theta & 0 \\ 0 & 0 & 0 & 1 \end{array}\right] \cdot\left(\begin{array}{l} x \\ y \\ z \\ 1 \end{array}\right)=\left(\begin{array}{c} x \\ \cos \theta \cdot y-\sin \theta \cdot z \\ \sin \theta \cdot y+\cos \theta \cdot z \\ 1 \end{array}\right)10000cosθsinθ00sinθcosθ00001xyz1=xcosθysinθzsinθy+cosθz1
沿y yy旋转:[ cos ⁡ θ 0 sin ⁡ θ 0 0 1 0 0 − sin ⁡ θ 0 cos ⁡ θ 0 0 0 0 1 ] ⋅ ( x y z 1 ) = ( cos ⁡ θ ⋅ x + sin ⁡ θ ⋅ z y − sin ⁡ θ ⋅ x + cos ⁡ θ ⋅ z 1 ) \left[\begin{array}{cccc} \cos \theta & 0 & \sin \theta & 0 \\ 0 & 1 & 0 & 0 \\ -\sin \theta & 0 & \cos \theta & 0 \\ 0 & 0 & 0 & 1 \end{array}\right] \cdot\left(\begin{array}{c} x \\ y \\ z \\ 1 \end{array}\right)=\left(\begin{array}{c} \cos \theta \cdot x+\sin \theta \cdot z \\ y \\ -\sin \theta \cdot x+\cos \theta \cdot z \\ 1 \end{array}\right)cosθ0sinθ00100sinθ0cosθ00001xyz1=cosθx+sinθzysinθx+cosθz1

沿z zz旋转:[ cos ⁡ θ − sin ⁡ θ 0 0 sin ⁡ θ cos ⁡ θ 0 0 0 0 1 0 0 0 0 1 ] ⋅ ( x y z 1 ) = ( cos ⁡ θ ⋅ x − sin ⁡ θ ⋅ y sin ⁡ θ ⋅ x + cos ⁡ θ ⋅ y z 1 ) \left[\begin{array}{cccc} \cos \theta & -\sin \theta & 0 & 0 \\ \sin \theta & \cos \theta & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{array}\right] \cdot\left(\begin{array}{c} x \\ y \\ z \\ 1 \end{array}\right)=\left(\begin{array}{c} \cos \theta \cdot x-\sin \theta \cdot y \\ \sin \theta \cdot x+\cos \theta \cdot y \\ z \\ 1 \end{array}\right)cosθsinθ00sinθcosθ0000100001xyz1=cosθxsinθysinθx+cosθyz1

坐标系统

  • 局部空间(Local Space,或者称为物体空间(Object Space)):物体所在的坐标空间,即对象最开始所在的地方。
  • 世界空间(World Space):顶点相对于(游戏)世界的坐标。
  • 观察空间(View Space,或者称为视觉空间(Eye Space)):将世界空间坐标转化为用户视野前方的坐标。观察空间也就是从摄像机的视角所观察到的空间。
  • 裁剪空间(Clip Space):将坐标变换为标准化设备坐标,而范围(-1.0, 1.0)之外的点会被裁剪掉(Clipped)。将所有可见的坐标都指定在-1.0到1.0的范围内不是很直观,所以我们会指定自己的坐标集(Coordinate Set)并将它变换回标准化设备坐标系。
  • 屏幕空间(Screen Space)

img

变换矩阵:模型矩阵、观察矩阵和投影矩阵。
V clip  = M projection  ⋅ M view  ⋅ M model  ⋅ V local  V_{\text {clip }}=M_{\text {projection }} \cdot M_{\text {view }} \cdot M_{\text {model }} \cdot V_{\text {local }}Vclip =Mprojection Mview Mmodel Vlocal 


版权声明:本文为z736248591原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。