页数:31页文件大小:338.0 KB来源: 计算机图形学ppt课件
本课件讲解图像空间的面消隐:讨论按离视点距离排序绘制多边形是否可行,给出深度缓存算法的基本思想与步骤,结合种子填色算法给出深度值递推公式,最后用红黄四边形的遮蔽算例逐像素计算屏幕颜色。
计算机图形学讲义 第4章 真实感图形显示——面消隐
任意多面体的面消隐
思考想象:可否使用这样的方法:把所有多边形按照其离视点的最小距离从小到大排序,先画后面的多边形,再依次画前面的多边形?
目标
设有一个红色四边形的四个顶点 ABCD 的坐标分别为 {{0,0,0},{0,6,0},{6,6,0},{6,0,0}},另有一个黄色四边形的四个顶点 EFGH 的坐标分别为 {{4,0,4},{6,2,4},{2,6,−4},{0,4,−4}},设黑色屏幕大小为 0≤x≤7,0≤y≤7,当视点在 z 轴的负无穷远处时,计算屏幕每个像素应该显示的颜色。
主要内容
算法的具体步骤
算法实现的关键
这个算法的关键在以下两点:
对于 A,可以使用区域填充算法,比如种子填色算法或者扫描线算法。对于 B,可以利用平面多边形在相邻点的深度相关性来计算。
2 基于种子填色算法的深度缓存算法
void seed_filling(x, y, fcolor, bcolor) int x, y, fcolor, bcolor; { int c; c = getpixel(x, y); if (c != fcolor && c != bcolor) { putpixel(x, y, fcolor); seed_filling(x+1, y, fcolor, bcolor); seed_filling(x-1, y, fcolor, bcolor); seed_filling(x, y+1, fcolor, bcolor); seed_filling(x, y-1, fcolor, bcolor); } }种子填色算法(填充边界)
void seed_filling(x, y, fcolor, bcolor) int x, y, fcolor, bcolor; { int c; c = getpixel(x, y); if (c == bcolor) putpixel(x, y, fcolor); else if (c != fcolor) { putpixel(x, y, fcolor); seed_filling(x+1, y, fcolor, bcolor); seed_filling(x-1, y, fcolor, bcolor); seed_filling(x, y+1, fcolor, bcolor); seed_filling(x, y-1, fcolor, bcolor); } }深度值的计算
设某个多边形所在平面方程为 ax + by + cz + d = 0,则有深度值 z 的表达式;相邻点之间可利用深度相关性由已知深度递推得到。
计算实例
设有一个红色四边形的四个顶点 ABCD 的坐标分别为 {{0,0,0},{0,6,0},{6,6,0},{6,0,0}},另有一个黄色四边形的四个顶点 EFGH 的坐标分别为 {{4,0,4},{6,2,4},{2,6,−4},{0,4,−4}},设黑色屏幕大小为 0≤x≤7,0≤y≤7,当视点在 z 轴的负无穷远处时,用深度缓存算法(基于种子填色算法)计算屏幕每个像素应该显示的颜色。
算法的具体步骤
具体计算过程
初始化 ZB 和 CB:ZB(i, j) = 100,CB(i, j) = 黑,0 ≤ i ≤ 7,0 ≤ j ≤ 7。
填充 ABCD 内各像素的顺序:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 20 21 22 23 19 18 17 25 24 26 31 32 30 29 27 28 33 34 35 38 36 37 39 40 41 42 43 44 45
从点 (1,1) 开始用种子填色算法遍历 ABCD 内每一点:
填充 EFGH 内各像素的顺序与深度递推(z = x − y,a/c = −1,b/c = 1):
从点 (2,4) 开始用种子填色算法遍历 EFGH 内每一点:
算法实现
作业
设黑色屏幕已经画有一个红色四边形,此四个顶点 ABCD 的坐标分别为 {{0,0,0},{0,6,0},{6,6,0},{6,0,0}},现另有一个黄色四边形的四个顶点 EFGH 的坐标分别为 {{0,4,4},{2,6,4},{6,2,−4},{4,0,−4}},设黑色屏幕大小为 0≤x≤7,0≤y≤7,当视点在 z 轴的负无穷远处时,用深度缓存算法(基于种子填色算法)计算屏幕每个像素应该显示的颜色。画出图形加以解释。
下载地址:{{downurl}}
{{{a}}}
{{#b}}{{{b}}}
{{/b}} {{/title}} {{#nolog}}登陆注册
{{/nolog}} {{#djsx}}点我刷新
{{/djsx}} {{#gocz}} {{/gocz}} {{#ffqr}} {{/ffqr}}