我的opengl编程学习(二)(混合、深度测试、雾化、多边形平移、显示列表)

简介:

12 混合

混合的底层原理是:如果不开启混合,那么对于帧缓存中的同样一个片断,后来的颜色将会覆写原有的颜色,而开启混合,则会在后来的颜色到来时利用混合因子重新计算该颜色而不是简单的覆写。其中后来的颜色叫做源颜色,而缓存中原来存在的颜色叫做目的颜色。

glEnable(GL_BLEND)打开混合开关,这样ALPHA值就可能会起作用了(如果你使用这个作为因子的话)

glBlendFunc()来产生源颜色和目的颜色的混合因子,有各种产生方法,最后总的混合颜色=源颜色×源颜色的混合因子+目的颜色×目的颜色的混合因子

下面是几个我左的各种混合参数的例子

0 1混合,就是只保留第一个framebuffer上面的东西,后面的绘制都看不见了

1 0混合

用后来的帧缓存替换前面的帧缓存,只有后面帧的信息

将目的和源的AILPHA都设为常量0.5的混合

src 1-src混合

后面的帧的混合系数采用后面帧的颜色值

其实就是颜色越浅的地方透明度越高,好像更加虚幻

13深度测试

在设计到消隐到情况(可能发遮挡),都要开启深度测试

Glenable(depth_test),硬件上就是打开了深度缓存区,当有新的同样XY坐标的片断到来时,比较两者的深度,并且在初始化时打开深度,并且绘制每一帧前要gl_clear(gl-depth-bit)(这根clear_buffer_bit类似,而且同样要设置clear_deppth_bitd 值,用glClearDepth(GLclampd depth),一般设为1,这将背景设为最深,这是默认的,通常不用写)

14

首先glEnable(GL_FOG)

然后用glFog*()设置雾的衰减因子的计算模型和强度和颜色还有雾的范围(还可以用glHint()来设置雾的质量

最要呕注意雾的绘制要再绘制被雾影响的物体之前

15多边形平移

OPENGL中有时为了绘制一个又高亮的轮廓的多边形,或者有时为了做贴花效果,就要将一个多边形和另一个线框叠加,这样有时会产生叠加部分颜色的冲突或不稳定,为了解决这个问题,可以采用多边形平移,它可以将其中一个的深度信息做一个合理的平移,使前后区分,步骤是:

首先用glEnable(GL_POLYGON_OFFSET_xx)打开平移开关;

然后glPolygonOffset(factor, units)产生平移的距离,平移距离等于m * factor + r * units,这里M是一个多边形本身深度变化的最大值,通常可以都设为1

16显示列表

1.产生一个列表:用n=glGenLists (×)产生一个独一无二的LIST标识号,然后用glNewList(theTorus, GL_COMPILE);

这里面的第二个参数可以是GL_COMPILE和GL_COMPILE_AND_EXCUTE,二者的区别是前者在产生列表时不执行绘制,只在calllist的时候绘制,而后者是在产生列表时就立即绘制,一般采用 GL_COMPILE会提高渲染性能

绘制代码;

glEndList();产生列表

使用列表,用glCallList(n)绘制那个列表的内容

2列表中可以存放的内容:

Matrix operations    Raster bitmaps and images  Lights, material properties, and lighting models  Textures   Polygon stipple patterns

使用列表而不是做成函数的好处是,使用函数要每次进行很多矩阵运算,而列表中实际只是存放这些运算的结果,值进行了一次运算,每次调用结果

-3 glIsList,判断一个数是否被作为列表标识符

  glDeleteLists,删除一个标识符范围的列表

-4 绘制多个列表:

glListBase(base);//定义当前在绘制多个列表时的基础标识号的值

glCallLists(len, GL_BYTE, s);//绘制LEN个列表,并且S为列表的偏移量的指针,绘制的列表的号=BASES里的偏移

17

glPushAttrib()glPopAttrib()用来存储一组状态值,如颜色、各种状态的开关等

18 Pixels, Bitmaps, Fonts, and Images

1 OPENGL中所指的BITMAP实质就是二值图像(不局限于黑白),每个像素只有一位,当为1时,将绘制当前设定当颜色,为0时不绘制。

目录
相关文章
|
1月前
|
安全 Java 数据库
shiro学习一:了解shiro,学习执行shiro的流程。使用springboot的测试模块学习shiro单应用(demo 6个)
这篇文章是关于Apache Shiro权限管理框架的详细学习指南,涵盖了Shiro的基本概念、认证与授权流程,并通过Spring Boot测试模块演示了Shiro在单应用环境下的使用,包括与IniRealm、JdbcRealm的集成以及自定义Realm的实现。
43 3
shiro学习一:了解shiro,学习执行shiro的流程。使用springboot的测试模块学习shiro单应用(demo 6个)
|
1月前
|
自然语言处理 机器人 Python
ChatGPT使用学习:ChatPaper安装到测试详细教程(一文包会)
ChatPaper是一个基于文本生成技术的智能研究论文工具,能够根据用户输入进行智能回复和互动。它支持快速下载、阅读论文,并通过分析论文的关键信息帮助用户判断是否需要深入了解。用户可以通过命令行或网页界面操作,进行论文搜索、下载、总结等。
49 1
ChatGPT使用学习:ChatPaper安装到测试详细教程(一文包会)
|
17天前
|
前端开发 JavaScript 安全
学习如何为 React 组件编写测试:
学习如何为 React 组件编写测试:
34 2
|
18天前
|
编解码 安全 Linux
网络空间安全之一个WH的超前沿全栈技术深入学习之路(10-2):保姆级别教会你如何搭建白帽黑客渗透测试系统环境Kali——Liinux-Debian:就怕你学成黑客啦!)作者——LJS
保姆级别教会你如何搭建白帽黑客渗透测试系统环境Kali以及常见的报错及对应解决方案、常用Kali功能简便化以及详解如何具体实现
|
1月前
|
测试技术 开发者
vertx的学习总结6之动态代理类和测试
本文是Vert.x学习系列的第六部分,介绍了如何使用动态代理在事件总线上公开服务,以及如何进行Vert.x组件的异步测试,包括动态代理的创建和使用,以及JUnit 5和Vert.x测试工具的结合使用。
22 3
vertx的学习总结6之动态代理类和测试
|
1月前
|
测试技术
软件质量保护与测试(第2版)学习总结第十三章 集成测试
本文是《软件质量保护与测试》(第2版)第十三章的学习总结,介绍了集成测试的概念、主要任务、测试层次与原则,以及集成测试的不同策略,包括非渐增式集成和渐增式集成(自顶向下和自底向上),并通过图示详细解释了集成测试的过程。
59 1
软件质量保护与测试(第2版)学习总结第十三章 集成测试
|
1月前
|
测试技术
软件质量保护与测试(第2版)学习总结第十章 黑盒测试
本文是《软件质量保护与测试》(第2版)第十章的学习总结,介绍了黑盒测试的基本概念和方法,包括等价类划分、边界值分析和因果图法,并通过具体例子展示了如何设计测试用例来验证软件的功能性需求。
65 1
软件质量保护与测试(第2版)学习总结第十章 黑盒测试
|
1月前
|
人工智能 人机交互 数据库
软件质量保护与测试(第2版)学习总结第一章
本文是《软件质量保护与测试》(第2版)第一章的学习总结,概述了软件的特征、分类、软件工程的层次化技术、现代软件开发的变化,以及软件质量的概念和评价体系,包括黑盒、白盒和灰盒测试方法。
31 1
软件质量保护与测试(第2版)学习总结第一章
|
1月前
|
分布式计算 Hadoop 大数据
大数据体系知识学习(一):PySpark和Hadoop环境的搭建与测试
这篇文章是关于大数据体系知识学习的,主要介绍了Apache Spark的基本概念、特点、组件,以及如何安装配置Java、PySpark和Hadoop环境。文章还提供了详细的安装步骤和测试代码,帮助读者搭建和测试大数据环境。
55 1
|
1月前
|
测试技术 Python
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法
本文主要介绍了自动化测试中setup、teardown、断言方法的使用,以及unittest框架中setUp、tearDown、setUpClass和tearDownClass的区别和应用。
61 0
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法