将在投影变换中得到的正则立方体显示在屏幕上
屏幕被划分成一个个正方体,称为像素。像素使用坐标 ( x , y ) (x, y) (x,y)来表示,其中心是 ( x + 0.5 , y + 0.5 ) (x+0.5, y+0.5) (x+0.5,y+0.5), 范围是 ( 0 , 0 ) (0,0) (0,0)到 ( w i d t h − 1 , h e i g h t − 1 ) (width-1,height-1) (width−1,height−1)。
光栅化主要分为两步
先缩放然后平移,变换过程中与z无关,变换矩阵如下所示。 ( w i d t h 2 0 0 w i d t h 2 0 h e i g h t 2 0 h e i g h t 2 0 0 1 0 0 0 0 1 ) \begin{pmatrix} \frac{width}{2} & 0 & 0 & \frac{width}{2}\\ 0 & \frac{height}{2} & 0 & \frac{height}{2}\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1 \end{pmatrix} ⎝⎜⎜⎛2width00002height0000102width2height01⎠⎟⎟⎞
这里关心的问题是如何将连续的三角形平面放到不连续的像素中显示。
最简单的光栅化方法:通过采样来解决,将像素中心在三角形内部的像素采样出来,然后用这些采样出来的像素点来代表三角形。
这里,判断点 P P P在三角形内部的方法使用了叉积,首先规定规定一个走向,如 A A A-> B B B-> C C C,然后按走向来依次计算3个叉积,如下所示 a ⃗ = A P ⃗ × A B ⃗ b ⃗ = B P ⃗ × B C ⃗ c ⃗ = C P ⃗ × C A ⃗ \vec{a}=\vec{AP}\times\vec{AB}\\ \vec{b}=\vec{BP}\times\vec{BC}\\ \vec{c}=\vec{CP}\times\vec{CA} a =AP ×AB b =BP ×BC c =CP ×CA 若 P P P在三角形内部,则 a ⃗ , b ⃗ , c ⃗ \vec{a},\vec{b},\vec{c} a ,b ,c 的方向相同。
但是采样会带来新的问题——走样 aliasing,这些问题都被称为sampling artifacts,例如
解决上述问题的方法——反走样,其基本思路是在采样之前进行模糊化处理(pre-filter),然后再采样。模糊化处理实际上是在采样之前使用低通滤波器过滤掉高频部分,目的是使边缘模糊化。
实际的做法是使用超采样(supersampling MSAA),其基本思路是将一个像素再划分为多个小的部分来采样,然后每个像素的值是像素中所有的小的部分的平均值。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/179394.html原文链接:https://javaforall.cn