0.前言

做一个基于OpenGLES的项目,其中涉及到渐变宽度曲线绘制功能的开发(类似下图效果),花了一些时间学习相关的知识,这里做一下总结与整理。受限于个人能力,这里不给出具体实现时OpenGL整个工程的搭建和每个接口函数的详细说明(免得误导他人),只给出大体的使用方法和关键性的调用语句。

1.抗锯齿问题

上图中的效果除了抗锯齿外,还有颜色、宽度、透明度的变化;在OpenGL2.0及其以上版本中,颜色、透明度的变化可以通过shader渲染实现,因此主要问题只剩下抗锯齿和宽度变化,这篇文章首先讲抗锯齿部分的处理。

OpenGL中已经定义了绘制线段的相关接口函数,从OpenGL1.1中固定渲染管道操作的glBegin(GL_LINES)操作,到OPENGL2.0以上的可编程渲染管道操作的glDrawArray(GL_LINES,...)操作。但是直接调用时,一般绘制的线段在具有一定角度时(非水平、垂直状态下)会产生明显的锯齿状,那么如何消除这种锯齿?OpenGL提供了如下解决方法。

2.解决方法

2.1 glHint()

这是一个看起来十分神奇的配置,以绘制线段为例,大体调用如下:

 glEnable(GL_BLEND);glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_DST_ALPHA);glEnable(GL_LINE_SMOOTH);glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);/* 绘制线段操作 */

效果也是出类拔萃,对比如下,左边的线段是默认设置下绘制得到,右边的线段是开启了上述设置后绘制的结果。仔细观察会发现右边的线段宽度比左边要大一些,但实际上代码中两段线段的宽度设置相同。这是一个暗示,暗示OpenGL内部抗锯齿的操作,具体原理分析见下一篇文章。。。

但我尝试在android平台上(高通8953)如上设置后,并没有产生抗锯齿效果。网上查阅相关问题时,看到一个说法,glHint()只是给硬件一个“建议”,可是否会起作用还要看硬件是否支持这样的设置“建议”,好吧。

2.2 反走样

线条的锯齿,就是走样的一种表现,相对应的可以通过设置OpenGL中的反走样来处理。OpenGL中设置反走样有如下方式。

1)设置全局环境中的反走样

OpenGL中默认开启了MSAA,要使用它还需要申请用于多重采样的缓冲区,申请方式与窗口系统有关。在glut中申请调用如下,只需增加一个GLUT_MULTISAMPLE属性

glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH |GLUT_RGBA | GLUT_MULTISAMPLE);

之后开启多重采样再进行绘制

glEnable(GL_MULTISAMPLE);
/*绘图操作*/

下图中左边为未开启MSAA的绘制结果,右边为开启MSAA之后的绘制结果。

不过在android平台中需要在EGL的初始化代码中做类似的设置,相关设置参考https://blog.csdn.net/u014248312/article/details/78027383

另外,这种设置只有在默认的绘制环境中起作用。假如你自己创建了一个FBO,在FBO中渲染时,上面的全局设置就无法发挥作用了。因此引入第二种多重采样设置—在FBO中使用多重采样。

2)FBO中的多重采样

这方面相关介绍很多,链接给出了相关的调用说明,就不再赘述了。

有两点需要注意:

a.FBO中的多重采样只作用于该FBO,譬如使用该FBO渲染,之后将渲染结果拷贝至系统默认FBO(一般是屏幕上),就具有抗锯齿作用;可若需要对该纹理做进一步的后处理,则无法直接操作,需要将该FBO的数据拷贝至一个没有开启多重采样的FBO上,再绑定这个普通FBO的纹理,做后续操作

b. 经过测试发现我的android平台中,若开启了全局MSAA,则在FBO中使用MSAA时,需要在上述操作之后增加一句        glGenerateMipmap(GL_TEXTURE_2D);调用,否则按照a中的操作得到的纹理仍然不具有抗锯齿效果

啰嗦了半天,也就只是实现了抗锯齿的设置,此时绘制得到的线段宽度无法连续变化。不得已要再进一步,下一篇文章介绍宽度连续变化线段的绘制实现。

3.参考资料

https://blog.csdn.net/wangdingqiaoit/article/details/52830310

https://blog.csdn.net/csxiaoshui/article/details/78932603

OpenGL中的抗锯齿绘线(上)相关推荐

  1. 游戏中的抗锯齿技术Anti-Alasing提炼总结

    游戏中的抗锯齿技术Anti-Alasing提炼总结 锯齿(走样,失真)产生的根本原因 图形学的根本过程是一个图形转化成图像的过程,该过程是一个连续信号经过采样转化成离散信号(显示设备的像素是离散的)的 ...

  2. 图形学中的抗锯齿讨论以及在unity中的应用

    抗锯齿(Anti-Aliasing)是图形学中,很重要的一个部分.本文旨在做一些分析总结,并对平时不理解的细节,做了调研,但毕竟不是做GPU行家,所以有不对的地方,欢迎拍砖^^. 1 什么是锯齿 下图 ...

  3. 用EasyPoi导出Excel中单元格图片(线上阿里云)

    用EasyPoi导出Excel中单元格图片(线上阿里云): 导出数据需要包含图片 问题描述 提示:这里描述项目中遇到的问题: 数据库中存储图片格式是阿里云(oss)的图片url,导出excel显示图片 ...

  4. OpenGL快速近似抗锯齿FXAA

    OpenGL快速近似抗锯齿FXAA 先上图,再解答. 正常显示 按下空格键 完整主要的源代码 源代码剖析 先上图,再解答. 正常显示 按下空格键 完整主要的源代码 #

  5. OpenGL核心技术之抗锯齿

    笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D ...

  6. Android Paint 抗锯齿画线模糊

    背景 Android 开发过程中, 或多或少会遇到需要使用自定义控件的情况, 而Paint作为画笔, 在整个开发过程中有着至关重要的地位, 用好它, 能让自定义控件展示出你期望的效果, 用不好- 或许 ...

  7. OpenGL学习笔记一之高级OpenGL篇十一 抗锯齿

    转载自 https://learnopengl-cn.github.io/04%20Advanced%20OpenGL/11%20Anti%20Aliasing/ 在学习渲染的旅途中,你可能会时不时遇 ...

  8. UE4在PSVR中的抗锯齿和优化相关知识

    UE4目前版本(4.15)在PS平台上并不支持MSAA,在未来的版本会加入.也就是说目前没有办法在PS平台上使用Forward Rendering + MSAA的组合 FXAA效率最高,但效果最差,只 ...

  9. 关于三角形重心坐标插值/锯齿/抗锯齿/延迟渲染中的抗锯齿问题

    我们都知道,在渲染流水线中,顶点着色器对输入的顶点数据进行处理(如顶点的坐标变换和光照计算)以后,GPU会进行进行齐次除法并将顶点从三维空间转换到二维的屏幕坐标,接着将这些所需要的着色数据发送到光栅化 ...

  10. 五分钟搞懂游戏开发中的抗锯齿算法

    常见抗锯齿算法总结 锯齿由来 抗锯齿算法 SSAA MSAA CSAA FSAA TAA 锯齿由来 场景的定义在三维空间中是连续的,而最终显示的像素则是一个离散的二维数组,这是计算机屏幕产生锯齿的原因 ...

最新文章

  1. iOS 获取键盘相关信息
  2. 第八节:详细讲解Java中的异常处理情况与I/O流的介绍以及类集合框架
  3. 负数在计算机中如何表示?
  4. idea 2020和2017下载
  5. 开源:秋式广告杀手源码
  6. 路由器访问控制列表详解
  7. java中的equals和hashCode
  8. -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; -webkit-font-smoothing: antialiased
  9. ble主服务的uuid 是一致的吗_nrf52832 开发之添加DFU服务
  10. 利用反射来实现动态代理
  11. 第一次在CSND做记录,关于linux修改文件的最后访问时间。
  12. 桌面整理之DeskGo
  13. xposed框架定位修改怎么用_Android中Xposed框架篇-修改系统位置信息实现自身隐藏功能...
  14. 根文件系统的作用 VSF的作用 Linux系统结构详解 加载内核映像和根文件系统映像
  15. java dagger2_Dagger2用法整理
  16. 主板24pin接口详图_特殊装机:24pin主板用20pin的供电
  17. 【php】相对路径/绝对路径报错?
  18. 刀具半径补偿 c语言,C语言程序实现数控加工刀具半径补偿原理与坐标计算.pdf...
  19. Android Studio中Git更新本地的远程(remote)branch列表?
  20. 干货 | 双曲空间度量学习在情绪识别中的应用

热门文章

  1. esxi - 加装vmware titan xp显卡配置
  2. AR涂涂乐项目之识别图制作制作地球仪线框二
  3. [机器学习] 实验笔记 - 表情识别(emotion recognition)
  4. 【每日爬虫】:利用线程池爬取百思不得姐段子
  5. ARMA模型结合PSO算法进行股票预测
  6. 图像超分辨率:优化最近邻插值Super-Resolution by Predicting Offsets
  7. Predicting drug–disease associations through layer attention graph convolutional network 论文解析
  8. iOS开发--AVPlayer实现音乐播放器
  9. 某医院门诊预约系统/医院预约挂号系统
  10. VC中三种常见中文内码的转换方法