不明确问题检验方法 所有多边形按顶点最大z坐标值 排序后得到一个排序表,设P是排在 表中最后的那个多边形。 设Q是排在P前面并且z坐标范围 与其发生交迭的一个多边形,对Q与 P的次序关系进行检查
不明确问题检验方法 所有多边形按顶点最大z坐标值 排序后得到一个排序表,设P是排在 表中最后的那个多边形。 设Q是排在P前面并且z坐标范围 与其发生交迭的一个多边形,对Q与 P的次序关系进行检查
检查可以按下面列出的五个步 骤进行,每个步骤判断一种情况。 1.多边形的x坐标范围不相交迭,所以 多边形不相交迭。 2.多边形的y坐标范围不相交迭,所以 多边形不相交迭。 3.P整个在Q远离观察点的一侧。 4. Q整个在P的靠近观察点的一侧。 5.多边形在z=0平面上的投影本身不相 交迭
检查可以按下面列出的五个步 骤进行,每个步骤判断一种情况。 1.多边形的x坐标范围不相交迭,所以 多边形不相交迭。 2.多边形的y坐标范围不相交迭,所以 多边形不相交迭。 3. P整个在Q远离观察点的一侧。 4. Q整个在P的靠近观察点的一侧。 5. 多边形在z=0平面上的投影本身不相 交迭
Xy
如果所有这五步检查都为假,就假 定P是遮挡了Q,交换P和Q在排序表中 的位置。 如果仍做交换,算法会永远循环 下去而没有结果。 为了避免循环,可以做一个限制 当做过首次五步检查后,发生某个多 边形被移到排序表的末尾时,就立即 加上一个标记,以后就不能再做移动。 出现再次应该移动时,用一个多边形
如果所有这五步检查都为假,就假 定P是遮挡了Q,交换P和Q在排序表中 的位置。 如果仍做交换,算法会永远循环 下去而没有结果。 为了避免循环,可以做一个限制。 当做过首次五步检查后,发生某个多 边形被移到排序表的末尾时,就立即 加上一个标记,以后就不能再做移动。 出现再次应该移动时,用一个多边形
所在的平面,把另一个多边形剪裁分 为两个
所在的平面,把另一个多边形剪裁分 为两个。 P Q
第四节z-缓冲算法 z-缓冲算法(深度缓冲算法)是一种 最简单的图象空间算法。对每一个点,这 个算法不仅需要有一个更新缓冲器存储各 点的象素值,而且还需要有一个z-缓冲 存储器存储相应的z值。帧缓冲存储器初 始化为背景值,z缓冲存储器初始化为可 以表示的最大z值。对每一个多边形,不 必进行深度排序算法要求的初始排序,立 即就可以逐个进行扫描转换
第四节 z−缓冲算法 z−缓冲算法(深度缓冲算法)是一种 最简单的图象空间算法。对每一个点,这 个算法不仅需要有一个更新缓冲器存储各 点的象素值,而且还需要有一个z−缓冲 存储器存储相应的z值。帧缓冲存储器初 始化为背景值,z缓冲存储器初始化为可 以表示的最大z值。对每一个多边形,不 必进行深度排序算法要求的初始排序,立 即就可以逐个进行扫描转换
扫描转换时,对每个多边形内部的任意点 (x,y),实施如下步骤: 1.计算在点(x,y)处多边形的深度值z (x,y)。 2.如果计算所得的z(x,y)值,小于在z- 缓冲存储器中点(x,y)处记录的深度值,那么 就做: (1)把值z(x,y)送入z-缓冲存储器的点 处。 (2)把多边形在深度z(x,y)处应有的象素 值,送入更新缓冲存储器的点(X,y)处
扫描转换时,对每个多边形内部的任意点 (x,y),实施如下步骤: 1. 计算在点(x,y)处多边形的深度值z (x,y)。 2. 如果计算所得的z(x,y)值,小于在z− 缓冲存储器中点(xy)处记录的深度值,那么 就做: (1)把值z(x y)送入z−缓冲存储器的点 处。 (2)把多边形在深度z(xy)处应有的象素 值,送入更新缓冲存储器的点(x y)处
算法中深度计算,可通过多边形的 顶点坐标求出所在平面的方程,然后再 使用平面方程,对每个点(x,y),解出相 应的z。 对面方程Ax+By+Cz+D=0, 解出Z是: Z=-D-Ax-By C
算法中深度计算,可通过多边形的 顶点坐标求出所在平面的方程,然后再 使用平面方程,对每个点(xy),解出相 应的z。 对面方程 , 解出 是: A x+ B y+ C z+ D = 0 z C D A B Z − − X − Y =
设在点(x,y)处的深度值是z: -D-Ax-By=Z 则在点(x+△x,y)处的深度值就是 -D-A(x+Ax)-By_-D-Ax-By-AAx C =z1-
设在点(x,y)处的深度值是z1 : z1 C D A x B y = − − − 则在点(x+△x,y)处的深度值就是 Δ x C A z 1 Δ x C A C D A x B y C D A(x Δx) B y = − − − − − = − − + −
z-缓冲算法的工作流程: 帧缓冲区置成背景色; z-缓冲区置成最大z值; for(各个多边形) [扫描转换该多边形; for(计算多边形所覆盖的每个象素(x,y)) I i 计算多边形在该象素的深度值Z(x,y); if(Z(x,y)小于Z缓冲区中的(x,y)处的值) {把Z(x,y)存入Z缓冲区中的(x,y)处; 把多边形在(x,y)处的亮度值存入帧缓存 区的(x,y)处;}
z−缓冲算法的工作流程: 帧缓冲区置成背景色; z−缓冲区置成最大z值; for (各个多边形) { 扫描转换该多边形; for(计算多边形所覆盖的每个象素(x,y)) { 计算多边形在该象素的深度值Z(x,y); if(Z(x,y)小于Z缓冲区中的(x,y)处的值) { 把Z(x,y)存入Z缓冲区中的(x,y)处; 把多边形在(x,y)处的亮度值存入帧缓存 区的(x,y)处;} } }