计算机辅助设计(CAD).ppt
* #define LEFT 1 #define RIGHT 2 #define BOTTOM 4 #define TOP 8 算法实现 encode x,y,code int x,y; int *code; int c; c 0; if x XL c c|LEFT; else if x XR c c|RIGHT; if y YB c c|BOTTOM; else if y YT c c|TOP; *code c; return; * Void CohenSutherlandLine int x1,int y1,int x2,int y2,Rectangle *rect int x,y; bool accept,done; accept FALSE; done FALSE; int code1,code2,code; encode x1,y1,&code1 ; encode x2,y2,&code2 ; * do if code1 0&&code2 0 //完全可见 accept TRUE; done TRUE; else if code1&code2! 0 //显然不可见 done TRUE; x float rect- xmin ; y y1+ y2-y1 * x-x1 / x2-x1 ; else if TOP&code ! 0 y rect- ymax; x x1+ x2-x1 * y-y1 / y2-y1 ; else if RIGHT&code ! 0 else//进行求交测试 code code1; if code1 0 code code2; if LEFT&code ! 0 * x rect- xmax; y y1+ y2-y1 * x-x1 / x2-x1 ; else if BOTTOM&code ! 0 y rect- ymin; x x1+ x2-x1 * y-y1 / y2-y1 ; if code code1 x1 x; y1 y; encode x,y,&code1 ; else x2 x; y2 y; encode x,y,&code2 ; //for else进行求交测试 while !done if accept Line int x1, int y1, int x2, int y2 ; // for C-S-L程序 * 与二维直线裁剪算法一样,三维Cohen-Sutherland直线裁剪算法也采用端点编码方法来判断线段的可见性。三维裁剪中,按视见体的每一面把整个空间划分成27个子空间,每个子空间都用唯一编码来标识,采用六位编码,具体编码规则为: 第1位为“1”表示端点位于视见体的左边,否则为0; 第2位为“1”表示端点位于视见体的右边,否则为0; 第3位为“1”表示端点位于视见体的下边,否则为0; 第4位为“1”表示端点位于视见体的上边,否则为0; 第5位为“1”表示端点位于视见体的前边,否则为0; 第6位为“1”表示端点位于视见体的后边;否则为0; 若一线段的两端点编码均为零,则此线段的两端点可见,此线段也可见。若线段两端点编码相与 AND 不为零,则该线段为完全不可见线段;否则该线段可能部分可见或完全不可见,此时需要计算视见体与线段交点,方可最后决定。 2 三维Cohen-Sutherland算法 * 2.3.3 真实感图形生成原理 计算机生成真实感图形需解决的问题 (1)场景造型—对景物外形的描述 (2)投影变换 (3)消隐处理 (4)光照模型—模拟光在场景中的传播与分布 (5)画面绘制—根据光照模型,计算画面光度与色度 (6)绘图处理—透明、阴影、表面纹理 (7)图形反混淆—消除细节失真 * 图形消隐的基本概念 消隐算法的基本测试方法 常用的消隐算法 下面图形代表哪一种情况呢? ? ? 三维图形由于投影变换失去了深度信息,往往导致图形的二义性 * 2.3.3 .1 消隐处理 要消除二义性,就必须在绘制时消除实际不可见的线和面,习惯上将这些隐藏线或隐藏面消除的过程称为消隐 当沿投影视线观察一个三维物体时,由于物体中各种表面或其它物体的遮挡,某些线段或面不可见,这些不可见的线段或面称为隐藏线或隐藏面 查找、确定并消除隐藏线和隐藏面的技术称为消隐技术 * 1)消隐处理的实质与算法选择 (1)消隐处理显示的图形与三维空间至二维空间的投影方式有关。 (2)消隐处理面对对象复杂。线、面、个体 (3)消隐处理的实质是一种几何分类,在一定条件下,区分形体的可见与不可见部分。 (4)