(同学说整理,顺道POST出来咯….)
整体思路:
首先通过HW3我们已经能够完成3D Pipeline,但是我们最后的模型绘制只是将每个面的顶点依次用线段连接起来,这一次我们需要对每个面进行绘制,其实就是对每个面进行颜色填充。那么问题来了,怎么填充?填充什么颜色?
怎么填充每个面,这里使用的是边相关扫描线算法,思路均参考给的链接;
颜色怎么获取呢?光照模型用于计算每个面的每个顶点的颜色,Shading则用于通过顶点获取面中其他像素点的颜色,到这里我们就能给每个面fill正确的颜色(具体的光照模型 明暗绘制请参考下面链接);
还没完,因为还要处理我们填充好的面是否可见的问题,这里就需要用到Z-Buffer了。思路是,Z-Buffer维护两个缓存,帧缓存(存放指定位置颜色值),深度缓存(存放指定位置深度),这两个缓存对应于我们整个window窗口,缓存中每个位置对应于窗口中的每个像素。所以我们在用边相关扫描填充每个面的时候,就转化成对Z-Buffer进行处理。对于需要填充面的每个像素,得到颜色还有z,如果z比Z-Buffer的深度缓存中的z小(说明更接近人眼),就更新深度缓存和帧缓存。完成所有面之后,我们只需要遍历整个帧缓存,一直用该缓存中对应位置的颜色值drawDot就能完成绘制了(详细参考Z-Buffer和边相关扫描线算法链接)。
光照模型
- 粗读这两篇了解一些基本思路
http://blog.csdn.net/pleasecallmewhy/article/details/8377944
http://www.ownself.org/blog/2010/guang-zhao.html - 这一篇建议同时参考笔记学习
http://www.cnblogs.com/mavaL/archive/2010/11/01/1866451.html
明暗绘制
明暗绘制这一块建议还是参考笔记,明白主体思路。
这一篇讲Gouraud Shading和Phong Shading的思路
http://jwc.neau.edu.cn/eol/data/res/jsjtxx/Chapter4/CG_Txt_4_021.htm
Z-Buffer
建议IE打开
http://course.cug.edu.cn/cugThird/CGOL_NET/CLASS/course/8-4-a.htm
边相关扫描线算法
建议IE打开
http://course.cug.edu.cn/cugFirst/computer_graphics/class/course/2-3-1-a.htm
- 初识OpenGL与开发环境配置