- 1、本文档共107页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
9-5 隐藏面消除 背面剔除(back culling)算法 许多三维物体中,它们所占据的空间都被一些连续的表面所包围着。当我们观察这些物体的时候,只能看到这些包围表面中的正面部分,背面则无法看到。「背面剔除算法」就是将这些我们看不到的背面多边形去除掉。如下图所示: 我们只能看见三为物体中的其中一面而已 凸面体 凹面体 这个面被其它面挡住了 对于透视投影而言,投影线会相交在观察者的眼中,它们的方向是不同的。我们可以在世界或观察空间中的任意一点上构造一个指向观察者眼睛的向量,并且使它指向该点的方向,如此一来,我们就得到了这一点的观察方向了。如下图所示: 9.5.2 排序 另一种方法也可以用来剔除这些看不到的顶点,其方法可以充分的利用图形硬件的缓冲储存结构来加速其运算。不管场景中的多边形有没有挡住其它的多边形,只要按照从后面到前面的顺序光栅化图形就可以正确的显示所有可见的图形了,也就是将离观察者最近的一个多边形最后进行光栅化处理。这种方法就是我们称它为「画家算法」。 平行投影 我们可以在投影线与投影面交叉角度的基础上更进一步地细分平行投影。如果交叉的角度是直角的话,我们则称之为「正交投影」(orthographic);不是直角的话,我们则称为「倾斜投影」(oblique)。 9.3.2 透视投影 透视投影所建立出来的对象投影图像之大小必须依赖对象与观察者的距离。 原点与图像上的顶点相联系之关系。如下图所示: 无深度投影 具深度投影 焦点距离越小则视角宽度越广,而焦点距离越大则视角宽度越窄。 9-4 裁剪 2D裁剪 裁剪是对于某种图形做出修剪的动作,其目的是为了让看不见的顶点不加以描绘,以提升执行的速度。 第三种剪裁法 第二种剪裁法 第一种剪裁法 线段的裁剪 线段裁剪的方法可以分析图形的相对约束位置,并且找出符合这一点的图形部分。在线段裁剪的情况下,它需要找出其交叉点或线段与裁剪边界的交叉点,通常不是直接就能够把这种交叉发生的地方看得一清二楚的。如下图所示: 在光栅处理阶段之前,先进行裁剪处理,适合处理简单的图形单位。(如多边形) 在光栅处理阶段同时进行,适合于复杂图形。 当裁剪区域中几何结构比较复杂时,选择较大的Buffer光栅图形。然后在Buffer中选择在该复杂裁剪区域内部的图形。 光栅处理:投影转换把物体图形坐标从3D空间映射到屏幕的2D空间,这些图形必须在2D空间中被绘制,使观察者可见。既然我们考虑的是由一系列整齐地镶嵌的小方块组成的光栅图形,因此我们要确定这种几何像素的模拟描述要如何能够被正确地转换成一系列的离散图形,而这种过程我们称之为“光栅处理”(rasterization) 9.4.2 点的裁剪 点的裁剪可以利用这4个有限线段的约束来检查点的坐标是否应该要被裁剪。 9.4.3 线段的裁剪 我们可以将线段的裁剪扩展到上述方法,然而增加内循环的复杂性。 这种线段裁剪方法可以分析图形的相对约束位置,并且找出符合这一点的图形部分。在线段裁剪的情况下,它需要找出交叉点或线段与裁剪边界的交叉点,通常不是直接就能够把这种交叉的地方看清楚。如下图: 剪裁线 剪裁线 剪裁线 剪裁线 区域外编码(region out code) 第一步,区域编码 延长窗口边界,将平面分成9个区域,每个区域用4位二进制代码表示,称为区域码。其作用是识别点相对于裁剪窗口边界的位置。 约定4位码中最右边一位为第1位,则编码规则如下: 1000 0000 1001 1010 0001 0010 0101 0100 0110 left right above below 第二步 ,建立线段端点的区域编码。 设(x,y)是线段端点的坐标,则第1位取 的符号位。 第2位取 的符号位。 第3位取 的符号位。 第4位取 的符号位。 第三步,判断线段与窗口间的位置关系。 (1)若线段两端点的编码均为“ 0000”, 则线段全部位于窗口内。 (2)若线段两端点编码的逻辑“与”不是0000,则线段必位于窗口外。 (3)若根据(1)、(2)不能直接判定线段在窗口内或窗口外,我们需要计算线段与窗口边界的交。由下图可知,这些线段可能穿入窗口的内部,也可能不穿过窗口的内部。 P1 P1’ ? ? P3 P4 P2 P2’ P3’ ? 这类线段的处理过程: 将线段的位于窗口外端点与窗口边界进行比较,以确定线段的多大部分被舍弃。对剩余的部分线段继续按(1)、(2)和(3)进行处理。直到线段完全在窗口内或完全在窗口外为止。 具体操作: (1)可以按照left,right, bottom, top的顺序检查线段端点与窗口边界之间的关系。 现通过例子对该算法进行说明。考虑线段P1P2的端点P1,依次检查P1与窗口的左、右和下边界间的位置关系,发现P1点
文档评论(0)