第1张:
从坐到右,从上到下。无纹理、无镜面光、无深度缓冲,依次是:
-
线框。
-
纯色。 即每个三角形一个颜色。
-
flat着色(相比上次,修正后的效果好多了)。也是每个三角形一个颜色,但是这个颜色是参照了光照情况的。
-
gouraud着色。根据光照计算每个三角形的顶点颜色,三角形内部根据顶点颜色进行线性插值。
-
phong着色(这里分辨率太低,看不出和gouraud的区别)。每个像素分别计算光照。
第2张:
分别是flat、gouraud、phong着色,相比第1张,加入了镜面光(注意茶壶的不少地方出现了白色的光斑)。
第3张:
在上一张的基础上引入了纹理。注意壶嘴上的光斑,一个比一个细腻。这一组图仍然没打开深度缓冲,因此显示不太正确。
第4张:
高分辨率的茶壶。软件渲染瓶颈首先是像素处理,因此这么大的茶壶,帧率特别低。
两张分别对应低、高两套设置。
第一个,gouraud着色 + 最近点采样 + 三角形排序(油画家算法)+ 镜面光。帧率123。
第二个,phong着色 + 三线性采样 + 1/z缓冲 + 镜面光。帧率30。
第5张:
平面裁剪。第一个是一个竖着的平面,第一个是一竖一横两个平面。注意裁剪边缘三角形密度较大,因为进行了三角形分割。
第5-2张:
正交投影和平面裁剪。
正交投影,相比普通的透视投影,失去了近大远小的效果。
第二个茶壶,从侧面来观察裁剪平面,证实了这确实是三维空间的裁剪,而非屏幕上的像素裁剪。
第6张:
高分辨率来了!
在屏幕上绘制两个大三角形,展示纹理过滤效果。
从上到下分别是:线框、最近点采样、双线性过滤、三线性过滤、透视纹理修正。
三线性过滤:这里很难看出和双线性的区别,但是在程序中切换状态时是能察觉到变化的。
透视纹理修正:操,屎都给我吓出来了!跟它一比,难怪之前总觉得前面两张怪怪的。这证明了,大纹理三角形不能乱用啊…
第7张:
演示纹理地址寻址方式。
整张图纹理坐标是-2~+2,从上到下,寻址方式依次为箝位、重复、镜像。
第8张:
演示mipmap。
红色是第0层,绿色是第1层,蓝色是第2层,淡蓝色是第三层,等等。
再贴一个骷髅头吧,6万个面,还能有30帧,很好。毕竟我在顶点处理环节非常谨慎的。
gouraud + 镜面光 + 三角形排序(油画家算法,代替z缓冲)。
看了一下水银上的记录,这个项目大概开始10来天了,成品是9000行C++代码,目前效果还是满意的。能够享受成品从视觉上带来的成就感,这是图形相比其他技术的优点。
代码6、7月份分享,执行文件在下面:
http://115.com/file/anwxb9xp#Scan软件光栅.rar
记得看里面的readme.txt。
注意,如果你运行后显示不自然(遮挡关系错误,尤其是骷髅头),尝试按几下4开启深度缓冲,或者按几下5开启油画家算法
Original: https://www.cnblogs.com/cbscan/archive/2012/04/29/2476450.html
Author: Scan.
Title: [图形图像]C++实现的软件光栅器
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/535092/
转载文章受原作者版权保护。转载请注明原作者出处!