计算机图形学(二)输出图元

来源:互联网 发布:javascript鼠标跟随 编辑:程序博客网 时间:2024/05/19 11:48
第2章输出图元

       用于图形应用的通用软件包称为计算机图形应用编程接口(CG API ),它提供可以在c++等程序设计语言中用来创建图形的函数库。创建图形时最先要做的一件事就是要描述显示场景的组成部分。图形的组成部分可以是树木和地形、家具和墙壁、商店铺面和街景、汽车和广告牌、原子和分子或者星星和银河。对于每一类场景,要描述每一对象的结构及其在场景中的坐标位置。图形软件包中用来描述各种图形元素的函数称为图形输出原语(graphics output primitive ),或简称为图元(primitive )。描述对象几何要素的输出图元一般称为几何图元。点的定位和直线段是最简单的几何图元。图形软件包中包含的其他几何图元有圆和其他二次曲线、二次曲面、样条曲线和曲面及多边形填色区域。多数图形系统还提供显示字符串的某些函数。在选定的坐标系中指定一个图形的几何要素后,输出图元投影到与该输出设备显示区域对应的二维平面上,并扫描转换到帧缓存的整数像素位置。
    
2.1坐标系统
        为了描述图形,必须首先确定一个称为世界坐标系的合适的二维或三维笛卡儿坐标系。接着通过给出世界坐标系中的位置等几何描述来定义图形中的对象。例如,通过两个端点定义一条直线段,通过一组顶点位置定义一个多边形。这些坐标位置与该对象的颜色、坐标范围(coordinate extent)即对象坐标的x, y,z最小/最大值等其他信息一起存储在场景描述中。坐标范围也称为对象的包围盒(bounding box )。对于二维图形来说,坐标范围也称为对象的包围矩形(bounding rectangle )。通过将场景信息传送给观察函数、由观察函数识别可见面、将对象映射到视频监视器上来实现对象的显示。扫描转换过程将颜色值等场景信息保存到帧缓存的相应位置,从而在输出设备上显示场景中的对象。


2.1.1屏幕坐标

       视频监视器上的位置使用与帧缓存中的像素位置相对应的整数屏幕坐标(screen coordinate)进行描述。像素的坐标值给出扫描行号(y值)和列号(扫描行的x值)。屏幕刷新等硬件处理一般从屏幕的左上角开始对像素进行编址。从屏幕最上面的0行到屏幕最下面的某整数值y(max)行对扫描行进行编号,每一行中像素位置从左到右、从0到x(max)进行编号。但是,使用软件命令可以按照任何方式设定屏幕位置的参考系统。例如,我们可以设定屏幕区域左下角为原点,用整数坐标(参见图3.1)或非整数笛卡儿坐标来描述图形。描述场景几何要素的坐标值由观察函数转换为帧缓存中的整数像素位置。
       图元的扫描转换算法使用定义的坐标描述来确定要显示像素的位置。例如,给定一直线段的两个端点,其显示函数必须计算出两端点间位于线段上所有像素的位置。由于一个像素位置占有屏幕上的一个有限范围,因此实现算法必须考虑像素的有限大小。目前,我们假设每一整数屏幕位置代表像素区域的中心。(将在2.13节考虑其他的像素编址方法。)一旦确定了一个对象的像素位置,必须将合适的颜色值存入帧缓存。为此,我们要使用一个底层函数:
    setPixel(x,y)
该函数将当前颜色设定值存入帧缓存的整数坐标位置(x,y)处,该位置相对于屏幕坐标原点而选定。有时我们也希望获得一个像素位置的当前帧缓存设置。这可使用下列底层函数来获得。   
getPixel(x,y;color);
在这一函数中,参数color得到一个与存储在位置(x,y)的像素中的RGB组合对应的整数值。
       对于二维图形来说,仅需在(x,y)位置指定颜色值;但是对于三维图形来说,还需要其他的屏幕坐标信息。这时,屏幕坐标三维值存储,第三维表示对象位置相对于观察位置的深度。在二维场景中,深度值均为0。




0 0
原创粉丝点击