三角形 画_从零开始学图形学:画两个三角形——光栅化,Z-buffer与抗锯齿

e2be35b057ecc6aa6225771c10cd4324.png

本文基于闫令琪老师的 GAMES101 课程,包括课程内容和实验解析,旨在用文字版的通俗易懂的方式从零入门图形学,非常欢迎大家与我讨论。由于笔者能力有限,也欢迎大家的指正。

本文首发于知乎专栏图形图像与机器学习,以后会常更新,欢迎大家的关注与催更。

GAMES101 所有作业的代码:DQSSSSS/GAMES101_Assignment 。

本文附有 GAMES101 实验二详解。


引入

在上一篇文章中,我们介绍了 MVP 变换:如何把物体规范到成像的空间内。好比你给妹子拍照:

  1. Model transformation:妹子摆好姿势;
  2. View transformation:你摆好相机;
  3. Projection transformation:咔嚓!

等等,这个咔嚓是不是不太对?我们只是把空间变换好了,但是图像究竟怎么投影在屏幕上,还是一个问题。这里介绍一下光栅化(rasterization)技术,便是为了解决它产生的。

光栅化技术的思路,可以理解为在屏幕上画画,而画出来的就是所要成像的物体形成的画面。画面上的每个像素是一个作画单元,它可以定义为单通道灰度、三通道RGB、HDR甚至更复杂的内部结构,在此将其介绍为黑盒,或者理解为灰度、RGB之类简单情况即可。

考虑如何光栅化一个物体,不如先考虑如何光栅化一个三角形。因为现如今很多模型的表面是由三角形组成的,因为二维三角形有许多优点:在三维空间可以良好密铺、是最简单的形状、一定只会处于一个平面上等等。

0981affb980f89cf6674a6e4201b32cc.png
GAMES101 ppt 05, page 28

下面就考虑怎么光栅化一个三角形。

光栅化:画一个三角形

做完 MVP 变换之后,我们已经把所有物体都放到了长方体里,唯一要做的事情就是把它们往一个面上投影。先考虑一个简单的问题:如果只有一个三角形,而且我们也知道它的颜色,如何把它显示到平面上?

方法很简单,首先将其投影到二维平面上,然后枚举每个像素,判断是否在三角形内,如果是则染色,否则跳过。一个像素是有大小的,我们用它的中心点来代替它,于是就变成判断中心点是否在三角形内。判断一个点是否在三角形内,只需要做叉积即可,详见实验部分的代码。

a04aaa2a61ec5fa69ec06be7ecb81220.png
GAMES101 ppt 05, page 36

如果遍历所有的像素,那实在是太慢了:因为不是所有的像素都需要被染色。一个物体的表面可能有成千上万个三角形组成,每个三角形都遍历所有像素的话

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值