我的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时不绘制。

目录
相关文章
|
5天前
|
SQL 安全 测试技术
软件测试的艺术:从错误中学习,提升产品质量
本文将探讨软件测试的重要性和如何通过测试来提高产品质量。我们将从软件测试的基本概念入手,逐步深入到不同的测试方法、工具和技术。同时,我们还将讨论如何建立有效的测试策略以及如何处理测试过程中发现的问题。
|
17天前
|
Android开发
Android学习 —— 测试init.rc中的条件触发的处理顺序
Android学习 —— 测试init.rc中的条件触发的处理顺序
|
2月前
|
测试技术
详解单元测试问题之Mockito中添加或更新打桩列表如何解决
详解单元测试问题之Mockito中添加或更新打桩列表如何解决
40 3
|
3月前
|
安全 测试技术
软件测试项目式学习二(认识软件测试及软件测试分类与案例分析)
软件测试项目式学习二(认识软件测试及软件测试分类与案例分析)
62 1
|
3月前
|
JSON 前端开发 测试技术
从零开始:学习使用 Postman 进行接口测试
在当前,API(应用程序接口)的使用变得越来越普遍。其中,HTTP/HTTPS API 是最常见的一种。无论是开发前端还是后端,测试 API 都是一个关键环节。Postman 是一种流行且强大的 API 测试工具,能够帮助开发人员轻松地进行接口测试和调试。
|
3月前
|
编解码 算法 程序员
老程序员分享:OpenGL学习进程(10)第七课:四边形绘制与动画基础
老程序员分享:OpenGL学习进程(10)第七课:四边形绘制与动画基础
|
4月前
|
存储 网络协议 测试技术
【如何学习Python自动化测试】—— Cookie 处理
【如何学习Python自动化测试】—— Cookie 处理
36 1
|
4月前
|
测试技术 Python Windows
【如何学习Python自动化测试】—— 多层窗口定位
【如何学习Python自动化测试】—— 多层窗口定位
31 1
|
4月前
|
JavaScript 测试技术 Python
【如何学习Python自动化测试】—— 时间等待
【如何学习Python自动化测试】—— 时间等待
32 1
|
4月前
|
Web App开发 前端开发 测试技术
【如何学习Python自动化测试】—— 页面元素定位
【如何学习Python自动化测试】—— 页面元素定位
60 1