正在加载图片...
HiddenLineRemove O 坐标变换 for(对每个面F for(F的每一条边E)将二元组<E,少压入堆栈 While(栈不空) <E,j=栈顶 for(j!=j的每一个面F) f(E被F全部遮挡) 将E清空; break;} if(E被F1部分遮挡) 从E中将被遮挡的部分裁掉 if(E1被分成若干段) 取其中的一段作为当前段 将其它段及相应的j压栈 if(E1段不为空) 显示E 如果消隐对象有N条棱,当N很大时,用两两求交的方法这个工作量是很大的0(N2)。为了提高算 法的效率,需要设法减少求交的工作量。设Ⅴ为由视点出发的观察向量,N为某多边形面的法向量。若 VN0,称该多边形为后向面。若VN0,称该多边形为前向面。如下图中的JEAF、HCBG和 DEABC所 在的面均为后向面。后向面总是看不见的,不会仅由于后向面的遮挡,而使别的棱成为不可见的。因 此可以把这些后向面全部去掉,这并不影响消隐结果。 D 图2.7.9(a)前向面(b)后向面(c)多面体的隐藏线消除 2.7.3消除隐藏面 在使用光栅图形显示器绘制物体的真实图形时,必须解决消除隐藏面的问题。这方面已有许多实用HiddenLineRemove() { 坐标变换; for(对每个面 Fj) for(Fj的每一条边 Ei) 将二元组< Ei ,j>压入堆栈 While(栈不空) { < Ei ,j0> = 栈顶; for(j!= j0的每一个面 Fj) { if( Ei 被 Fj 全部遮挡) { 将 Ei 清空; break; } if( Ei 被 Fj 部分遮挡) { 从 Ei 中将被遮挡的部分裁掉; if(Ei 被分成若干段) { 取其中的一段作为当前段; 将其它段及相应的 j 压栈 } } } if(Ei 段不为空) 显示 Ei ; } } 如果消隐对象有 N 条棱,当 N 很大时,用两两求交的方法这个工作量是很大的 O(N 2)。为了提高算 法的效率,需要设法减少求交的工作量。设 V 为由视点出发的观察向量,N 为某多边形面的法向量。若 V·N>0,称该多边形为后向面。若 V·N<0,称该多边形为前向面。如下图中的 JEAF、HCBG 和 DEABC 所 在的面均为后向面。后向面总是看不见的,不会仅由于后向面的遮挡,而使别的棱成为不可见的。因 此可以把这些后向面全部去掉,这并不影响消隐结果。 图 2.7.9 (a)前向面 (b)后向面 (c)多面体的隐藏线消除 2.7.3 消除隐藏面 在使用光栅图形显示器绘制物体的真实图形时,必须解决消除隐藏面的问题。这方面已有许多实用
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有