计算机图形学(二)输出图元_8_像素编址和对象的几何要素

来源:互联网 发布:php域名跳转 编辑:程序博客网 时间:2024/06/10 10:49
像素编址和对象的几何要素
       在显示图元的光栅算法讨论中,已经假定帧缓存坐标使用屏幕像素的中心。现在我们考虑不同编址方法的效果和OpenGL等一些图形软件包使用的像素编址方法。
       对象的描述即图形程序的输入,由精确的世界坐标位置来给出,其中的每一个位置都是数学上一个无限小的点。然而,当对象经扫描转换进帧缓存后,输人描述变换为对应有限屏幕区域的像素坐标,且显示的光栅图像可能并不严格符合相关的尺寸。如果必须保证世界坐标系中对象的几何描述,我们可以在输人的数学点到有限的像素区域映射中进行补偿。一种方法是简单地按照物体边界与像素区域的覆盖量来调整物体显示的尺寸。例如,如果一个矩形的宽度为40 cm,那么我们可以调整屏幕显示,这样矩形的宽度为40个像素,其中每一个像素表示1 cm。另一种方法是将世界坐标映射到像素间的屏幕位置,以使物体边界与像素边界对齐,而不是与像素中心对齐。
3.8.1屏幕网格坐标

      图3.33给出了配有划分像素边界的网格线的屏幕区域。其中,一个屏幕位置由一对标识两像素间网格线位置的整数值来给出。任一像素以其左下角进行编址,如图3.34所示。一条直线路径现在被想像成一组网格线交点。例如,端点坐标为(0, 0),(5, 2)和(1,4)的折线的数学路径如图3.35所示。



        使用屏幕网格坐标,我们让屏幕坐标位置(x, y)上的像素占据对角位置在(x, y)和(x+l, y+l)处的单位正方形。这种像素编址方案有很多优点:它避免了半整数像素边界,实现了精确的对象表示,并简化了包含在许多扫描转换算法和其他光栅程序中的处理。
        在前面几节中讨论的画线及曲线生成算法仍可用于以屏幕网格坐标表示的输入位置。这些算法中的决策参数将简化为对屏幕网格的间距差的度量,而不再是像素中心之间的间距差。
3.8.2保持显示对象的几何特性
       当将对象的几何描述转换为像素表示时,就将把数学上的点和线转换为有限的屏幕区域。假如要保留由对象的输入坐标指定的原始几何度量,那么在将对象的定义转换到屏幕显示时,就需要考虑像素的有限尺寸。
        图3.36给出了在3.5节中由Bresenham画线算法绘出的线段例子。如果将线段端点(20, 10)和(30,18)解释为精确的网格交点位置,那么可以看到线段不应该延伸到超过屏幕网格位置(30, 18)。如果要像3.5节给定例子那样绘制屏幕坐标(30, 18)的像素,将会显示跨越水平方向11个单位、垂直方向9个单位的一条直线。而对于数学上的一条直线,△x = 10,△y = 8。如果使用像素的中心位置编址,那么可以通过去除端点中的一个来调整线段显示的长度。如果把屏幕坐标差作为编址的像素边界(如图3.36所示),那么仅用线路径“内部”的一些像素,即通过线段两端点间的像素来绘制直线。对于上述例子,绘制从最左边的像素(20, 10)到最右边的像素(29, 17)之间的像素,这样显示的直线就同数学上从(20, 10)到(30, 18)的直线具有相同的几何大小。
        对于封闭区域,通过仅显示在对象边界内的像素来保持输入的几何特性。例如,图3.37(a)中用屏幕坐标顶点定义的矩形,在按照包括用指定顶点连成的边界像素线在内的像素填充显示时会变大。定义的矩形区域是12个单位,而在图3.37(b)中显示的却是20个单位的区域。在图3.37(c)中,仅显示内部像素就保持了原始的矩形度量。输人的矩形的右边界为x = 4,为了在显示中保持这条边界,将最右边的像素网格坐标设置在x = 3处。这样垂直列中的像素跨越的间隔为x = 3到x = 4。同样,矩形的上部边界(数学上)在y = 3处,因而我们将显示矩形的上部像素设置在y=2处。


    这种沿对象边界的有限像素宽度的补偿能应用于其他多边形和曲线图形,从而使光栅显示保持输入对象的要求。例如,半径为5、中心位置为(10,10)的圆,利用中点算法并以像素中心作为屏幕坐标位置的显示结果如图3.38所示。但绘制出的圆的直径为11。要绘制直径为10的圆,就需要修改画圆算法,如同图3.39那样缩短每条像素扫描线和每个像素列。一种方法是从屏幕坐标(10,5)开

始,在第三象限中沿圆弧顺时针生成点。对于每个生成的点,其他七个圆对称点通过沿扫描线将x坐标值减1和沿像素列将y坐标值减1而生成。类似的方法可以用于椭圆算法中,以保持椭圆显示的指定特性。



0 0
原创粉丝点击