OpenGL学习笔记(10)抗锯齿
2010-10-26 16:45 Clingingboy 阅读(14368) 评论(3) 编辑 收藏 举报计算机通过离散(不连续)的像素来绘制图形,想象一下,真实世界中,我们画直线,是比连续画的,还是一个点一个点画的?计算机就是一个点一个点画的(很小的矩形).这样就会导致绘制的图形走样(锯齿),消除锯齿的技术就叫反走样(抗锯齿)
可以看这篇:http://blog.csdn.net/mikewolf2009/archive/2009/08/18/4460421.aspx
点示例
当点很大时,显示如下
而我们实际想看到的是一个圆点,而不是矩形
启用抗锯齿后的效果
有点圆了
代码
glPointSize(10); glEnable (GL_POINT_SMOOTH); glHint (GL_POINT_SMOOTH, GL_NICEST);
启用抗锯齿
还是以glEnable来启用抗锯齿,可以根据不同图形进行处理
- GL_POINT_SMOOTH 点
- GL_LINE_SMOOTH 线
- GL_POLYGON_SMOOTH 多边形
抗锯齿质量
当然效果越好,那么计算机速度就越慢,即有一个参数设置
glHint用于对点,线,多边形的抗锯齿程度进行设置
- GL_DONT_CARE 放弃,应该是系统默认吧
- GL_FASTEST 速度优先
- GL_NICEST 图形显示质量优先
线示例
未启用
启用后
很明显,启用抗锯齿后,粗线变成了矩形,而未启动则是一个平行四边形
代码
glEnable (GL_LINE_SMOOTH); glHint (GL_LINE_SMOOTH, GL_NICEST); glLineWidth (10);
多重采样
其根据像素样本数量具有多种颜色,深度和多组纹理坐标来处理,特别适合多边形
三个步骤
1. Obtain a window that supports multisampling. With GLUT, you can ask for one by calling
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB |
GLUT_MULTISAMPLE);
2. After you’ve opened a window, you will need to verify that multisampling
is available. For instance, GLUT may give you a window
with “almost” what you have asked for. If querying the state variable
GL_SAMPLE_BUFFERS returns a value of one and GL_SAMPLES returns
a value greater than one, then you’ll be able to use multisampling.
(GL_SAMPLES returns the number of subpixel samples. If there is only
one sample, multisampling is effectively disabled.)
GLint bufs, samples;
glGetIntegerv(GL_SAMPLE_BUFFERS, &bufs);
glGetIntegerv(GL_SAMPLES, &samples);
3. To turn on multisampling, call
glEnable(GL_MULTISAMPLE);
如下两图的比较
这些功能由OpenGL内置支持
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现