计算机图形学(二)输出图元_14_OpenGL像素阵列函数_1_位图函数

 OpenGL像素阵列函数

OpenGL中有两个函数可用于定义矩形阵列的形状或图案。一个是位图,另一个是像素图。OpenGL也提供若干的函数用于存储、复制及管理像素值阵列。

OpenGL位图函数

下面的函数定义了一个二值的阵列:

glBitmap (width, height, x0, y0, xOffset, yOffset, bitShape);

函数中的参数width和height分别给出阵列bitShape的列数和行数。bitShape的每一元素赋值为0或1。值为1表示对应像素用前面设定的颜色显示;否则,对应像素不受该位图影响。(作为一个选项,可使用1表示将指定颜色与存储在刷新缓存中对应位置的颜色值相结合。)参数x0和y0定义了矩形阵列“原点”的位置。原点位置指定为bitShape的左下角,而x0和y0可正可负。另外,需要指定帧缓存中应用图案的位置。该位置称为当前光栅位置(current
raster position )
,而位图在将原点置于当前光栅位置后显示。赋给xOffset和yOffset的值用做位图显示后更新帧缓存当前光栅位置的坐标位移。

x0, y0, xOffset, yOffset和当前光栅位置的坐标值使用浮点数格式。位图当然用整数的像素位置。但浮点数的坐标允许将一组位图以任意的间隔安排,这在某些应用如用位图字符形成字符串中很有用。

可以使用下面的子程序来设定当前光栅位置:

glRasterPos* ()

参数和后缀码与glVertex函数中的一样。因此,当前光栅位置在世界坐标系中给出,由观察变换将其变换到屏幕坐标系。在我们的二维例子中,可以直接使用整数屏幕坐标指定当前光栅位置的坐标。当前光栅位置的默认值是世界坐标系中的原点(0,
0, 0)。

位图的颜色使用glRasterPos被引用时的有效颜色。任何后来的颜色改变不会影响该位图。

矩形位阵中每一行以8位为单位组织存放,即安排成一组8位无符号字符。但我们可以使用任何方便的网格大小来描述形状。作为一个例子,图3.61给出了一个用10行9列的网格定义位阵列,这时每行使用16个二进制位来描述。在将该图案应用于帧缓存像素时,第9列之后的所有位值均被忽略。

使用下面的程序段可将图3.61中的位图案应用于帧缓存中:

GLubyte bitShape [20] = {
  0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00,
  0xff, 0x80, 0x7f, 0x00, 0x3e, 0x00, 0x1c, 0x00, 0x08, 0x00};
glPixelStorei (GL_UNPACK_ALIGNMENT, 1);//Set pixel storage made.
glRasterPos2i (30, 40);
glBitmap (9, 10, 0.0, 20.0, 15.0, bitShape);

bitShape的阵列值从矩形网格的底部开始逐行指定。接着使用OpenGL函数glPixelStorei设定位图的存储模式。该函数中使用参数值1表明数据值用字节边界对齐。glRasterPos用来设定当前光栅位置为(30,
40)。最后,函数glBitmap指定位阵列在阵列bitShape中给出,且该阵列有9列10行。这个阵列的原点坐标在(0.0, 0.0),即在网格的左下角。我们给出坐标位移为(20.0, 15.0),尽管在本例中该位移没有用。

时间: 2024-10-09 21:13:13

计算机图形学(二)输出图元_14_OpenGL像素阵列函数_1_位图函数的相关文章

计算机图形学(二)输出图元_10_多边形填充区_1_多边形分类和识别

多边形填充区 一个多边形(polygon)在数学上定义为由三个或者更多称为顶点的坐标位置描述的平面图形,这些顶点由称为多边性的边(edge或者side)顺序连接.进一步来看,几何上要求多边形的边除了端点之外没有其他公共点.因此,根据定义,一个多边形在其单一平面上必须有其所有的顶点且边之间无交叉.多边形的例子有三角形.矩形.八边形和十六边形等.有时,任一有封闭折线边界的平面图形暗指一个多边形,而若其没有交叉边则称为标准多边形(( standard polygon)或简单多边形( simple po

计算机图形学(二)输出图元_3_画线算法_1_直线方程

画线算法 场景中的直线段由其两端点的坐标位置来定义.要在光栅监视器上显示一线段,图形系统必须先将两端点投影到整数屏幕坐标,并确定离两端点间的直线路径最近的像素位置.接下来将颜色值装人帧缓存相应的像素坐标处.视频控制器从帧缓存读出写入的颜色值并绘制屏幕像素.这一过程将一线段数字化为一组离散的整数位置.一般而言,这些位置是实际线路径的近似.例如,计算出的线位置(10.48, 20.51)转换为像素位置(10, 21).坐标值舍入到整数,引起除水平和垂直以外所有线段的阶梯效应("锯齿形"),

计算机图形学(二)输出图元_20_章节总结(上)

输出图元章节总结 发了好久第2章终于结束了,本章中讨论的输出图元为使用直线.曲线.填充区域.单元阵列样式和文本构造图形提供了基本的工具.我们通过在笛卡儿世界坐标系统中给出几何描述来指定图元. 用于沿线段路径绘制像素的三种方法是DDA算法.Bresenham算法和中点算法,Bresenham算法和中点算法是等同的并且是最有效的.沿线段路径的像素的颜色位存储按照递增地计算内存地址的方式而有效完成.任何线段生成算法都可以通过分割线段并将分割的线段分布到可用处理器上来获得并行的实现. 圆和椭圆采用中点算

计算机图形学和OpenGL(二)坐标系和绘制点线函数

这节开始前我们先了解一下图元的概念.图形软件包中用来描述各种图形元素的函数称为图形输出原语,也称图元(primitive).而描述对象几何要素的输出图元一般称为几何图元.点和线是最简单的几何图元,本节就会简单介绍点和线段的绘制方法. 一.坐标系统. 坐标系统一般分为屏幕坐标和OpenGL中的绘图坐标. 在上一节中我们简单的写了个示例程序,程序中介绍了gluOrtho2D命令.我们可以利用该命令设定一个二维笛卡尔坐标系.该函数的四个变量制定的是显示图形x和y坐标范围.所以我们可以使用下面代码制定一

【计算机图形学课程】二.MFC鼠标响应函数模拟画图软件

上一篇文章我们讲述MFC绘制图形的基本函数,包括绘制直线.绘制矩形.绘制椭圆及绘制文字,同时通过绕圆旋转和矩形平移简单的理解了图形学知识.这篇文章我将介绍鼠标响应和键盘响应,通过这些事件让学生实现一个类似画图的简单软件,同时充分发挥学生想象,自己创作东西.        前文:       [计算机图形学课程]一.MFC基本绘图函数使用方法 一. MFC工程创建及鼠标响应 新建一个MFC 单文档的应用程序"MousePic". 然后,选择"View(视图)"->

计算机图形学(三)_图元的属性_2_颜色和灰度

颜色和灰度 颜色是所有图元的一个基本属性.用户可以选择多种颜色,依赖于特定系统的能力和设计目标.颜色可用数值指定也可以从菜单或显示的标尺中选择.对于视频监视器而言,这些颜色编码转换成控制电子束的强度等级.在彩色绘图仪中,颜色码可用来控制喷墨量或笔的选择. RGB颜色分量 在彩色光栅系统中,可选用的颜色数量依赖于帧缓存中提供的存储容量.颜色信息可用两种方式存储在帧缓存中:直接在帧缓存中存储RGB编码,或将颜色码存入一个独立的表中并在像素位置存储指向颜色表表项的索引.使用直接存储方案时,当应用程序指

计算机图形学(三)_图元的属性_6_ 点属性函数

OpenGL 点属性函数 前段时间一直在忙着改项目,现在好了,争取天天更新 指定点位置的显示颜色由状态表中的当前颜色值控制.而该颜色用glColor函数或glIndex函数来指定.我们使用下面的函数来指定OpenGL中一个点的大小: glPointSize (size); 该点以像素方块的形式显示.参数size用正浮点数值指定,该值舍入到一个整数(除非该点经反走样处理).显示该点的水平和垂直像素数由参数size决定.这样,点大小为1.0时显示一个像素,而点大小为2.0时显示2x2的像素阵列.如果

计算机图形学(三)_图元的属性_1_OpenGL状态变量

OpenGL状态变量 属性值和其他参数设置由定义当前OpenGL状态的独立函数指定.OpenGL中的状态变量有颜色和其他图元属性.当前矩阵模式.模型观察矩阵的元素.缓存当前位置和场景光照效果参数等.所有OpenGL参数都有默认值,它们在被指定新值前保持不变并发挥作用.任何时候我们都可以查询系统的状态参数的当前值.本章后面几节中只讨论输出图元的属性设定,后面几章将会涉及其他参数. OpenGL的所有图元使用当前状态表中的属性显示.改变一个或几个属性设定只能影响OpenGL状态改变后指定的那些图元.

计算机图形学(三)_图元的属性

图元的属性  通常,任何影响图元显示方法的参数一般称为属性参数(attribute parameter).诸如颜色和大小等属性参数确定了图元的基本特性.其他则指出在特定条件下怎样显示图元.特定条件属性的例子有在交互式对象选择程序中的可见性或可检测性.这类特定条件属性将在后面几章中详细讨论.这里,我们仅仅考虑控制图元的基本显示特性的属性,而不考虑特定的条件.例如,线段可以是点线或划线.粗线或细线以及蓝色或橙色.区域可以使用一种颜色或多色图案填充.文本可以按从左到右的阅读方式进行显示,也可以沿屏幕对