OpenGL--渲染方式

前言

这篇文章主要目的是介绍OpenGL中的颜色混合、正背面剔除,只是作为入门的文章,如果想要深入了解它们的原理还需要继续研究。

一、颜色混合

用一个生活中的例子来介绍什么是颜色混合。
我们拿两块透明有色玻璃叠在一起,透过两块玻璃可以发现叠加的颜色跟两种颜色都不一样,它是一种新的颜色,这就是颜色混合。OpenGL中的颜色混合原理也是这样的,通过不同的颜色和对应的透明度计算出最终的颜色和透明度。

1.开启颜色混合

// 开启混合
glEnable(GL_BLEND);
// 混合因子
glBlendFunc(GL_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

其中glBlendFunc这个函数是设置混合因子,不同的值对应的有不同的颜色混合算法,网上有很多文章解释了颜色混合的算法。个人觉得知道个大概就行,没有必要深究,因为你即便深究你还是没办法创造新的算法。而且算法也是很简单的计算。

2.iOS中的应用

CALayer有个alpha属性,同时颜色值RGBA中的A就是alpha,他们归根结底都是用到了颜色混合。当alpha为1时,也就是不透明,这种情况下,OpenGL会自动过滤该控件下层控件的颜色计算,因为他们本来就被上层的控件遮挡了。所以,能不用alpha就尽量不用,这样能减少GPU的开销。

3.离屏渲染

这里引入一个家喻户晓的概念,离屏渲染。关于离屏渲染的理解,笔者在网上看到了一篇文章对其进行详细介绍,附上地址:
https://www.jianshu.com/p/e92c7a8cea8f

二、正背面剔除

在开始正背面剔除之前,我们先了解一下OpenGL的正背面定义。OpenGL默认的正面是三角形顶点按逆时针顺序排列,这种方式让我想到了右手螺旋定则,判断电流的南北极,有兴趣的可以查查右手螺旋定则。当然,法向量计算跟这个也有关联。话不多说,进入主题。

1.开启正背面剔除

// 开启正背面剔除
glEnable(GL_CULL_FACE);
// 设置被剔除的面,设置正面还是背面被剔除
glCullFace(GL_BACK);

我们通过效果图来看看开启和不开启的区别。
没有开启正背面剔除.png

我们看到这个图形时,已经无法区分上下左右的面了,因为OpenGL绘制的时候并没有将我们认为是在背后的面隐藏,而是按照我们提供的顶点很耿直的在绘制。其结果就是这个效果图,看着非常难受,接下来我们开启正背面剔除。
开启正背面剔除.png

没有对比就没有伤害,开启了正背面剔除的图形看上去就很像立体图形了。之所以会出现这种情况,我们在没有开启正背面剔除时,我们就像有了透视眼,能看到被前方的三个面挡住的另外三个面。被我们的透视眼看到的实际上是另外三个面的内面,准确来讲是背面,因为这个立体图形我是按照实际生活中的立方体,展示在外面的是正面,而在立方体内部的是背面。背面没有被剔除我们就能看到了,所以才有了第一张图片出现的效果。如果我没有解释清楚正背面剔除,可以下载文章末尾提供的demo地址,自己运行试试。

总结

本来这章要解释深度测试的,但是由于笔者还没有找到合适的例子,因为OpenGL不开启深度测试也不清空深度缓冲区的情况下,照样能让图形进行3D变换。如果以后笔者找到了合适的例子再补上。
本文仅仅带小伙伴们了解了下颜色混合和正背面剔除的基本知识,至于实现的算法和为什么要在这样处理,不在本文的介绍范围之类。后续将要与纹理打交道,希望有兴趣的伙伴点个关注,点关注、不迷路。
demo地址还是跟之前文章一样:https://github.com/zhaoguyixia/OpenGL.git

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在OpenGL绘制3D立体场景绘制中。不同图形之间会出现重叠、遮挡、交叉。并且光源着色器对图形颜色进行重新计算。这...
    无名27号阅读 4,046评论 0 1
  • [TOC] 学习目标 渲染过程中可能产生的问题 油画渲染 正面和背面剔除 深度测试 多边形模型 多边形偏移 裁剪 ...
    velue阅读 5,744评论 0 0
  • 在本篇文章开始之前呢。我们需要先了解一个非常重要的概念:环绕。环绕是OpenGL中任何三角形都需要遵循的重要特性。...
    Mr_Lxh阅读 3,971评论 0 0
  • 学习目标: 1.渲染过程产生的问题(掌握) 油画渲染(了解) 正面&背面剔除(掌握) 深度测试(掌握) ZFigh...
    小破孩丫阅读 3,666评论 0 1
  • 幸福的样式大于一。 年少时常以为:幸福就是远方,远到逃离父亲的严厉,远到逃出家庭的禁锢,如是而已。 二十来岁时常以...
    萨小拉阅读 1,819评论 0 0

友情链接更多精彩内容