视频加载失败

Rasterization 光栅化1

245 字
1 分钟
Rasterization 光栅化1
Rasterization 光栅化1

像素#

  • 一个像素从左下角开始到右上角
  • 范围:[0,0]to[width−1,height−1][0,0]\quad to\quad [width-1,height-1]
  • 像素(x,y)(x,y)的中心点为(x+0.5,y+0.5)(x+0.5,y+0.5)

透视除法#

将裁剪空间的坐标值全部除以ww:

[xyzw]  ⟹  [x/wy/wz/w1] \begin{bmatrix} x\\y\\z\\w \end{bmatrix}\implies \begin{bmatrix} x/w\\y/w\\z/w\\1 \end{bmatrix}

这样才能拿出x,y,z项的三维坐标接着使用

视口变换#

将空间从 [−1,1]2[-1,1]^2 变换为屏幕空间 [0,width]×[0,height][0,width] \times [0,height]

Mviewport=[width/200width/20height/20height/200100001]M_{viewport}=\begin{bmatrix} width/2&0&0&width/2\\ 0&height/2&0&height/2\\ 0&0&1&0\\0&0&0&1 \end{bmatrix}

三角形#

  • 可以通过向量叉积判断一个点是否在三角形外

判断方法#

设三角形 ABCABC 三条边向量分别为 AB→,BC→,CA→\overrightarrow{AB},\overrightarrow{BC},\overrightarrow{CA} ,设顶点PP到三个顶点的向量为AP→,BP→,CP→\overrightarrow{AP},\overrightarrow{BP},\overrightarrow{CP}

AB→×AP→&BC→×BP→&CA→×CP→{>0,inside=0,edge<0,outside\overrightarrow{AB}\times\overrightarrow{AP}\quad\And\quad\overrightarrow{BC}\times \overrightarrow{BP}\quad\And\quad \overrightarrow{CA}\times \overrightarrow{CP} \begin{cases} >0, &inside\\=0,&edge\\<0,&outside \end{cases}

采样操作#

  • 判断像素点中心是否在三角形内(叉积)
for(int x=0;x<xmax;++x)
for(int y=0;u<ymax;++y)
image[x][y]=inside(tri,x+0.5,y+0.5);
  • 可以使用包围盒来减少不必要的判断,比如使用AABB包围盒,只需要判断包围盒内的像素点是否在三角形内就可以
  • 采样会带来锯齿问题(走样)

需要抗锯齿

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Profile Image of the Author
机巧叶片
给互联网留下一点微小的贡献
公告
欢迎来到我的博客!这是一则示例公告。
分类
标签
最新动态
站点统计
文章
26
分类
6
标签
22
总字数
27,977
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Cloudflare Pages
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录