光栅化阶段:
首先我们确定一个我们要输出的是什么样的,就是设置一个宽高比
例如什么4:3 16:10等,就好像你买个电视他的宽高比一样,输出规格先固定
定义两个概念:垂直可视角度,长宽比(通过他们可以推出水平可视角度)
前面我们已经研究了正交透视投影,这里回顾一下,正交投影是将,所有的z都投射到(-1,1)
首先我们提出一个不起当给说法,屏幕是由一个一个的像素点构成,而像素点可以理解为原子操作,一个像素是只能有一个颜色,他是不会左边是这个颜色右边是那个颜色的(当然还有一个灰度值,以及RGB三色)。一把都是0-256表示也就是用八位数表示( )
20201107:1809份暂时结束,未完待续
像素点我们宽高当作width height
我们吧像素点理解为在某一个方块的中心eg:左下角(0,0)实际在的位置应当是(0.5,0.5)
因为我们前面将正交变化转化到了一个标准立方体里面去,所以我们还需要将他转化成屏幕图形。
我们成像的视口(-1,1)是我们已经设定好的所以我们要将视口缩放到屏幕空间
已经映射好了就是要进行绘制了,回忆一下我们有哪些机器绘制(我想到的就是打印机了,电视机,还有那个数码管,信号的)。
首先是阴极成像官
这里还谈到一个成像技术:各行扫描。思路较为简单,就是本次成像采用单数行成像,下一次就采用偶数行成像,因为切换特别快,已经我们人眼有视觉延迟,所以是不会被发现的,不过现在已经不怎么使用了,缺点就是画面撕裂。目的是以前设备性能没有那么好
还有一些成像设备就不多说了
下面讲到面数,因为一把我们会把一个模型,分解成由四边形或者三变形构成的eg:
对一个三角形进行一些研究
我们怎么将这个三角形着色了,比如说那些边界点如何显示:(如果是完全包围没有话说直接显示,但是边界怎么办,就是这节课的重点了)(是否包围像素中心)
方法一:采样法,或者说离散法,eg:
采样也可以理解为模拟信号(这是计算机处理信号数据的目前主流方式)
使用函数表示很简单:像素中心在就亮,不是就不亮
结果:
把他写成代码新式:
遍历所有的点:
inside的实现就是判断是否在里面的关键,加上0.5是因为吧像素中心代入计算,不然带入的只是一个像素的左下角坐标。
现在我们来聊聊一些实现方式:
方式1:
叉积,我们可以通过叉积判断出来他在向量的那一边:
我们规定一个方向(逆方向):A=p2->p0, B = p0->p1,C = p1->p2(为简化做一个代换)q点显然在A的右边,不在三角形里面,如果在某一个向量的三边的右边,都可以认为不在三角形里面,如他满足三个边的左边那一个点一定在三角形里面(结果和你选取的方向有关)
我们还要考虑一种情况,刚好在向量上面怎么办,还有就是两个三角形的边界点怎么处理
这里老师说,没必要过多探讨,确实,完全可以在你采用的算法里面现时规定,就是一个=>和>的区别
这样采样,在考虑三角形光珊化的时候遍历的所有,但是其实有很多像素是不需要处理的,我们完全可以采用只考虑包围盒(三角形的三条边)里面的点(包括边界)里面的点。
采用:
当然,这个带来额外的计算边界的要求,所有这个比较适用于三条边的长短差距大的三角形,就是长窄(高瘦)类似,对于三边差不多,比较饱满的三角形,遍历整个方形也未尝不可
最后填充
原则上会发生一些失真,就发生锯齿,产生原因主要说就是像素是点方格,
下一节课目标,抗拒之,反走样。