目录

OpenGL状态变量

颜色和灰度

RGB颜色分量

颜色表

灰度

OpenGL颜色函数

OpenGL的RGB和RGBA颜色模型

OpenGL颜色索引模式

OpenGL颜色调和

OpenGL颜色数组

其他OpenGL颜色函数

点的属性

OpenGL点属性函数

线的属性

OpenGL线属性函数

曲线属性

填充区属性

OpenGL填充区属性函数

字符属性

OpenGL字符属性函数

OpenGL反走样函数

OpenGL询问函数

OpenGL属性组

总结


任何影响图元显示方法的参数一般称为属性参数,例如颜色和大小等属性确定了图元的基本特性。

维护属性和其他参数当前值表的图形系统称为状态系统状态机。输出图元的属性和当前帧缓存位置等其他参数称为状态变量状态参数。在给一个或几个参数赋值时,系统进入一个特定状态,该状态一直保留到状态参数的值再次改变。

OpenGL状态变量

OpenGL中的状态变量有颜色和其他图元属性、当前矩阵模式、模型观察矩阵的元素、缓存当前位置和场景光照效果参数等。所有OpenGL参数都有默认值,它们在被指定为新值前保持不变并发挥作用。

OpenGL中的所有图元使用当前状态表中的属性显示。

颜色和灰度

颜色时所有图元的一个基本属性。

RGB颜色分量

颜色信息可以用两种方式存储在帧缓存中:

  • 直接在帧缓存中存储红色、绿色和蓝色编码
  • 将颜色码存入一个独立的表中并在像素位置存储指向颜色表项的索引

颜色表

在使用颜色表存储颜色信息时,这时帧缓存中的值用做指向颜色表的索引。

颜色表可以应用于许多应用中,既提供了“合理”数量可同时显示的颜色又不要求大容量帧缓存。表项内容可以在任何时候进行修改,使用户可以很容易地实验设计、场景和图表中地不同颜色组合、而不改变图形数据结构中属性的设定。

灰度

当RGB函数中指定相同量的红色、绿色和蓝色时,结果是某种程度的灰色。

OpenGL颜色函数

使用下面的函数将颜色显示模型设定为RGB:

第一个常量指示正在使用单个帧缓存,第二个常量设定RGB模式,即默认模型。如果要用指向颜色表的索引来指定颜色,则用OpenGL常量GLUT_INDEX取代GLUT_RGB。

OpenGL的RGB和RGBA颜色模型

多数OpenGL颜色设定使用RGB模式。除了红色、绿色和蓝色分量之外,还有称为α系数的第四个分量,用于控制颜色调和。可以在调用glutInitDisplayMode时选择GLUT_RGBA指定这种模式。

使用下面的函数来选择当前的颜色分量:

例如下面的语句将图元的当前颜色指定为青色:

OpenGL颜色索引模式

在使用颜色索引模式下指定颜色时,通过指定一个指向颜色表的索引来设定当前颜色:

下面的语句将当前颜色索引设定为196:

有一个glut子程序可用来与窗口系统进行交互,从而为指定的一个索引位置指定颜色如下:

OpenGL颜色调和

许多图形软件包提供生成多种颜色调和效果的方法,这些函数称为颜色调和函数图像混合函数。在OpenGL中,通过先将第一个对象装载进帧缓存,再将第二个对象的颜色与帧缓存颜色相混合来实现两个对象颜色的调和。当前帧缓存颜色称为OpenGL目标颜色,而第二个对象的颜色称为OpenGL源颜色。

要在应用中进行颜色调和,必须先用下面的函数激活这个OpenGL特性:

使用下面的函数将关闭OpenGL的颜色调和子程序:

颜色可按要达到的效果进行多种调和,通过指定两组调和因子来生成不同的颜色效果。一组调和因子针对帧缓存中的当前对象(“目标对象”),而另一组调和因子针对新来的(“源”)对象。将要装入帧缓存的新的调和颜色计算如下:

这里,RGBA源颜色分量为(Rs,Gs,Bs,As),目标颜色分量为(Rd,Gd,Bd,Ad),源调和因子为(Sr,Sg,Sb,Sa),而目标调和因子为(Dr,Dg,Db,Da)。

使用下列函数可选择调和因子的值:

OpenGL颜色数组

可在顶点数组中和坐标值混合来指定场景中的颜色值。

激活OpenGL的颜色数组:

对RGB模式要指定颜色分量的位置和格式:

使用颜色数组的例子:

可以将颜色和顶点坐标一起装入一个交错数组。每一个指针用适当的位移值指向单一的交错数组。

OpenGL提供一个可以一次性指定所有顶点和颜色数组及其他类型信息的函数。

在颜色索引模式下,使用下面的语句定义一个颜色索引数组:

其他OpenGL颜色函数

用来为显示窗口选择RGB颜色分量的函数,glClearColor指定所有颜色缓存的颜色。然后用下面的命令将净颜色用于这些颜色缓存:

在颜色索引模式下,使用下面的函数设定显示窗口的颜色:

窗口背景色用存放颜色表中index位置的颜色来指定。执行glClear(GL_COLOR_BUFFER_BIT)函数后窗口就以该颜色显示。

点的属性

颜色和大小

OpenGL点属性函数

glPointSize(size)指定点的大小

glColor或glIndex指定点的颜色

线的属性

直线段可以使用三个基本属性来显示:颜色、线宽和线型。

OpenGL线属性函数

glLineWidth(width)设定线宽

glLineStipple(repeaterFactor, pattern); 默认状态下,直线段显示成实线。但也可以显示划线、点线或短划和点混合的线段。还可以改变短划及短划或点之间的长度。

pattern描述如何显示线段的一个16位整数。repeaterFactor说明模式中每一位重复应用多少次才轮到下一位。

在使用线型显示线段之前,必须先激活线型特性:

使用下列函数关闭线型特性:

曲线属性

曲线属性的参数和线段相同,可以使用各种颜色、宽度、短划线模式和有效的画笔和笔刷选择来显示曲线。

严格来说,OpenGL并不把曲线作为和点及线段一样的图元来考虑。

在OpenGL中可使用几种方法来显示曲线:

  • 使用一组线段来逼近曲线
  • 使用样条来画

填充区属性

一般的图形软件包提供的基本填充属性是内部的显示模式。我们可以将一区域显示为单一颜色、指定填充图案或只给出边界的“空心”模式。也可以使用各种笔刷模式、颜色调和或纹理对场景中的指定区域进行填充。其他选项包括填充区域边界。对于多边形来说,可以使用不同颜色、线宽和线型给出边界。还可以为区域前向面和后向面选择不同的显示属性。

填充图案可以使用一个为不同位置指定不同颜色的矩形颜色阵列来给出。

也可以按照多种方式将填充图案和背景颜色混合。图案和背景色混合时使用透明因子来确定背景中有多少应该混合到对象颜色中。

OpenGL填充区属性函数

OpenGL仅提供对凸多边形的填充区子程序。显示一个填充凸多边形要经过下面四个步骤:

1.定义一个填充图案

2.引用多边形填充子程序

3.激活OpenGL多边形填充特性

4.描述要填充的多边形

除了为多边形内部指定一个填充图案,还有选项:显示一个空心多边形;另一选项是只显示顶点。

用十六进制定义一个位图:

建立了掩模之后,可以使用下列函数将其当作填充图案:

在使用当前图案填充多边形时需要激活子程序:

关掉图案填充:

填充多边形的另一种方法是使用纹理。这将生成仿真木材、砖、拉丝钢或其他材料外貌的图案。也可以仿照线图元中的做法得到多边形内部的插值填充。

我们也可以仅显示多边形的边,来生成线框图或多边形的空心显示。还可以通过显示一组顶点来显示多边形。通过下面函数选定:

参数face指定多边形的哪一个面上仅显示边或顶点,displayMode为GL_LINE时仅描绘边,GL_POINT时仅描绘顶点,GL_FILL默认的显示模式。

可以在填充内部时同时使用不同的颜色或图案来显示它的边或顶点。

这种填充方法可能在边之间产生缝隙。

消除缝线的方法是:

第二个函数用来设定一对计算深度位移总量的浮点值factor1和factor2.深度位移的计算如下:

两因子的典型值为0.75和1.0

OpenGL提供了从线框图显示中消除选定边的机制:

如下面程序段仅显示三角形的两条边:

多边形标志也可以在一个数组中指定,创建一个边标志数组的语句为:

使用下列函数可以单独指定一个场景中的前向面和后向面:

vertextOrder:GL_CW,则随后定义的顺时针多边形可看作前向面。GL_CCW逆时针次数为前向面朝向,默认次序。

该特性用来交换以顺时针为次序指定顶点的多边形的面。

字符属性

显示的字符外观由字体、大小、颜色和方向这些属性控制。

字符大小由磅指定。

字符串的方向按字符向上向量设定。字符串显示成其字符底线到帽线的方向与向上向量一致。

对齐是另一个可能使用的字符串属性,这个属性指定如何依赖参考坐标来定位文本。下图中给出了字符水平和垂直对齐的一般位置。

OpenGL字符属性函数

使用OpenGL软件包显示字符有两种方法。使用核心库中的位图函数来设计字体集,或引用OpenGL字符生成函数。

OpenGL反走样函数

由于低频采样(不充分采样)而造成的信息失真称为走样。可以使用校正不充分取样过程的反走样方法来改善所显示的光栅线的外观。

使用下列函数激活OpenGL的反走样子程序:

primitiveType:GL_POINT_SMOOTH、GL_LINE_SMOOTH、GL_POLYGON_SMOOTH

假定用RGBA模式指定颜色,则同样需要激活OpenGL颜色调和操作:

颜色调和方法:

OpenGL询问函数

使用OpenGL查询函数可以获得包括属性设定在内的任意状态参数的当前值。

需要指定两个变量。第一个是标识一个属性或状态参数的OpenGL符号常量。第二个变量是一个指针,指向由函数名指出的数据类型的一个数组。例如,使用下列语句可以获取当前RGBA浮点颜色设定:

OpenGL属性组

属性和其他状态参数按属性组进行组织。每一组包括相关的状态参数集合。

点属性组包括了大小和点的平滑(反走样)参数。

线属性组包括了线宽、模板状态、模板图案、模板重复计数及线段光滑状态等。

多边形属性组包括了11种多边形参数,如填充模式、前向面标识及多边形平滑状态。

保存一个指定属性组所有参数的工作由下列命令实现,它将指定组的所有参数放进属性栈:

attrGroup用标识一个属性组的OpenGL符号常量来赋值。

用下列函数将属性栈的所有值进行重建:

glPopAttrib();

总结

属性控制图元的显示特征。

颜色是所有图元的公共属性。

基本的点属性是颜色和大小。线属性由颜色、宽度和线型。

填充属性包括实心颜色填充、填充图案填充或仅仅显示区域边界的空心填充。

字符可以按照不同颜色、大小、间隔和方向进行显示。

我们可以通过应用调整像素强度的反走样过程来改善光栅图元的外貌。

OpenGL中,图元的属性由状态变量来维护。

计算机图形学 学习笔记 图元的属性相关推荐

  1. 计算机图形学 学习笔记(七):二维图形变换:平移,比例,旋转,坐标变换等

    接上文 计算机图形学 学习笔记(六):消隐算法:Z-buffer,区间扫描线,Warnock,光栅图形学小结 在图形学中,有两大基本工具:向量分析,图形变换.本文将重点讲解向量和二维图形的变换. 5. ...

  2. 计算机图形学 学习笔记(九):曲线曲面(一):参数曲线、参数几何代数形式

    接上文 计算机图形学 学习笔记(八):三维图形变换:三维几何变换,投影变换(平行/ 透视 投影) 计算机图形学三大块内容:光栅图形显示(前面已经介绍完了 1-8).几何造型技术.真实感图形显示.光栅图 ...

  3. GAMES101-现代计算机图形学学习笔记(作业07)

    GAMES101-现代计算机图形学学习笔记(作业07) Assignment 07 GAMES101-现代计算机图形学学习笔记(作业07) 作业 作业描述 思路 结果 原课程视频链接以及官网 b站视频 ...

  4. GAMES101-现代计算机图形学学习笔记(作业02)

    GAMES101-现代计算机图形学学习笔记(作业02) Assignment 02 GAMES101-现代计算机图形学学习笔记(作业02) 作业 作业描述 需要补充的函数 思路 结果 原课程视频链接以 ...

  5. GAMES101-现代计算机图形学学习笔记(作业01)

    GAMES101-现代计算机图形学学习笔记(作业01) Assignment 01 GAMES101-现代计算机图形学学习笔记(作业01) 作业 作业描述 需要补充的函数 思路 结果 原课程视频链接以 ...

  6. 计算机图形学 学习笔记(八):三维图形变换:三维几何变换,投影变换(平行/ 透视 投影)

    接上文 计算机图形学 学习笔记(七):二维图形变换:平移,比例,旋转,坐标变换等 通过三维图形变换,可由简单图形得到复杂图形,三维图形变化则分为三维几何变换和投影变换. 6.1 三维图形几何变换 三维 ...

  7. 计算机图形学 学习笔记(五):多边形裁剪(Suther land-Hodgeman),文字裁剪

    接上文 计算机图形学 学习笔记(四):直线裁剪算法:Cohen-Suther land,中点分割法,Liang-Barsky 光栅图形学算法 3.4 多边形裁剪 之前上一篇文章中,我们介绍了直线段的裁 ...

  8. 计算机图形学 学习笔记(四):直线裁剪算法:Cohen-Suther land,中点分割法,Liang-Barsky

    接上文 计算机图形学 学习笔记(三):多边形的区域填充算法,反走样算法 光栅图形学算法 本文主要讲解直线裁剪算法. 裁剪 使用计算机处理图形信息时,计算机内部存储的图形往往比较大,而屏幕显示的知识图形 ...

  9. 计算机图形学学习笔记——Whitted-Style Ray Tracing(GAMES101作业5讲解)

    计算机图形学学习笔记--Whitted-Style Ray Tracing GAMES101作业5讲解 遍历所有的像素生成光线 光线与平面求交 遍历所有的像素生成光线 关于作业五中如何遍历所有的像素, ...

最新文章

  1. Linux软raid创建和维护
  2. Text模式和PDU模式短信的区别
  3. 正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——1 概述
  4. JDK源码解析之 Java.lang.Byte
  5. pcb钻孔披锋改善报告_高速高频PCB技术 || 玻纤效应对高速信号的影响
  6. 信息学奥赛一本通(2021:【例4.6】最大公约数)
  7. python有必要看数据结构_盘点 Python 10 大常用数据结构(上篇)
  8. qt如何安装python_安装Python QT,PythonQT,的
  9. java安卓开发异步任务_Android笔记4-android之多线程和异步任务
  10. 电商十二、pinyougou02.sql的内容③
  11. JVM中的GC是什么
  12. 过cloudflare,使用cfscrape,以及cfscrape挂代理的方式
  13. Springboot中使用@Value无法取到application.properties值
  14. markdown插入图片的几个办法
  15. Android 跳转外部浏览器坑
  16. ai怎么平均排列,AI怎么等距离排列直线? ai等比排列直线的教程
  17. 刘意JavaSE 学习笔记——总纲
  18. 国际物流信息管理系统产品简介之CA——ES/1 Supper Logistic
  19. MATLAB报错:位置 1 处的索引无效。数组索引必须为正整数或逻辑值的一种解决办法
  20. 计算机意外重启或错误,Win7系统安装提示计算机意外重启或遇到错误解决方案...

热门文章

  1. 斯坦福自然语言处理习题课1——绪论
  2. 石英晶振常用术语解释
  3. 【LeetCode 单链表专项】反转链表II(92)
  4. day_03_连接池、事务、一对多和多对多配置
  5. linux显示只读文件系统,linux 服务器忽然变成只读文件系统
  6. phpexcel导出大量数据合并单元格_PHPExcel处理一个单元格内多条数据拆分成多个单元格多条数据...
  7. WIN10蓝屏崩溃原因查找
  8. label 标签属性的总结归纳
  9. 网页(手机wap)如何让广告点击后不再显示?您该这样写代码
  10. Kitty中的动态线程池支持Nacos,Apollo多配置中心了