Opengl研究4.0 走样与反走样
Opengl研究4.0 走样与反走样
DionysosLai(906391500@qq.com) 2014-06-25
走样与反走样,也叫混淆与反混淆。所谓走样,是因为使用离散量(像素)表示连续量(图形)而引起的失真。
走样现象:
1. 阶梯状的图形边界
如图所看到的:
因为像素点是一块一块的,存在锯齿状。
2. 图形细节失真
因为显示图形的最小单位为像素,像素是由宽度的。有时候,我们可能显示的线段比像素要窄。要小。那么可能出现两种情况:a. 假设显示的线段宽度比像素宽度小一点,将被保留;b. 假设线段非常细,就不会显示。
---->图形的细节失真。
3. 狭小图形的遗失与动态图形的闪烁
这个是因为图形细节失真造成的。
假设显示线段比較细,假设落在像素中心上,就显示。假设线段正好落在两个像素之间就不显示。---->图形闪烁
反走样,即在图形显示过程中,用于降低或消除走样现象方法。
反走样方法:
1. 提高分辨率:
通过硬件。添加像素。--->代价非常大,并且会引起扫描转换时间、帧缓存容量。
2. 非加权区域採样方法
走样原因:因为在实际中,像素是由实际面积大小不为0,同一时候直线段的宽度是至少为1个像素。
而我们假设是像素面积为0,亮度有覆盖该点的亮度决定,同一时候线段宽度为0。
二者的矛盾是导致走样原因。
解决方法:
改变直线度模型,线上像素灰度(颜色)不等。
方法步骤:
A. 将直线段看做具有一定宽度的狭长矩形。
B. 当直线度与某像素相交时,求出两者相交区域的面积。
C. 依据相交区域面积大小。设置该像素的亮度值。
关键:
是怎样计算相交区域面积大小。
因为像素是个正方形。相交面积计算还能够。有个简便方法,就是将正方形划分成n个区域,推断每一个区域(当成点)是否在线段内就可以。
如图所看到的:
则这个像素的相交面积为3/9;
3. 加权区域採用方法
对于非加权区域採样方法中,面积的计算时,因为每一个区域的权重是一样的,而实际上对于中心的区域,其贡献值比較大。因此。将像素点的各个区域权重是不一样的。越中央,权重越大。反之。权重越小。权重,一般我们能够用一个矩阵表示:
那么对于上图的相交面积即为5/16。
Opengl研究4.0 走样与反走样的更多相关文章
- OpenGL研究2.0 计算圆
OpenGL研究2.0 计算圆 DionysosLai2014-06-18 在游戏中.常常有些地方涉及到一些圆的轨迹计算,例如一些转轴类的游戏,人物一般在角色转轴上面运动.这时,我们就要时刻计算角色的 ...
- OpenGL研究3.0 多边形区域填充
OpenGL研究3.0 多边形区域填充 DionysosLai(906391500@qq.com)2014-06-22 所谓多边形区域填充.就是将多边形内部区域,所有已相同色块填充.注意:这里讨论的多 ...
- Qt 学习之路 2(26):反走样
Qt 学习之路 2(26):反走样 豆子 2012年11月12日 Qt 学习之路 2 9条评论 我们在光栅图形显示器上绘制非水平.非垂直的直线或多边形边界时,或多或少会呈现锯齿状外观.这是因为直线和多 ...
- NeHe OpenGL教程 第四十六课:全屏反走样
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- OpenGL(十八) 顶点数组和抗锯齿(反走样)设置
顶点数组函数可以在一个数组里包含大量的与顶点相关的数据,并且可以减少函数的调用.使用顶点数组需要先启用顶点数组功能,使用glEnableClientState函数启用顶点数组,参数可以是GL_VERT ...
- Simple2D-23(重构)反走样几何图形
以前 Simple2D 使用 Canvas2D 对象来绘制几何图形,而且渲染出来的几何图形存在明显的锯齿.如果想要抗锯齿的几何图形,则需要开启 OpenGL 的 MSAA,这需要很大的开销. 如果不使 ...
- Wu反走样算法绘制圆(C++/MFC实现)
Wu反走样圆 原理:参考Bresenham算法,在主位移过程中计算出离理想圆最近的两个点,赋予不同的亮度值,绘制像素点即可! MFC 中CXXXView类中添加函数: //Wu算法画反走样圆 void ...
- Wu反走样算法绘制直线段
Wu反走样算法 原理:在我看来,Wu反走样算法是在Bresenham算法基础上改进了一番,它给最靠近理想直线/曲线的两个点以不同的亮度值,以达到模糊锯齿的效果.因为人眼看到的是线附近亮度的平均值. M ...
- qt反走样(简选)
# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #qt反走样(简选) #概念 """ ...
随机推荐
- (转)理解TIME_WAIT,彻底弄清解决TCP: time wait bucket table overflow
转载自http://blog.51cto.com/benpaozhe/1767612: 一直对这个问题知其然而不知其所以然,这些日子再次碰到,看了很多的资料,彻底解决一下,呵呵,先上个图,所有理解围绕 ...
- python中的注意事项
.python 中的 and 从左到右计算表达式,若所有值均为真,则返回最后一个值,若存在假,返回第一个假值: or 也是从左到有计算表达式,返回第一个为真的值: 其中数字 0 是假,其他都是真: 字 ...
- .net 外部CSS文件不起作用总结
外部css文件样式全部不起作用 asp.net 页面引用路径的问题 缺少必须属性<link rel="stylesheet" type="text/css" ...
- ES bulk源码分析——ES 5.0
对bulk request的处理流程: 1.遍历所有的request,对其做一些加工,主要包括:获取routing(如果mapping里有的话).指定的timestamp(如果没有带timestamp ...
- spring cloud 学习(二)关于 Eureka 的学习笔记
关于 Eureka 的学习笔记 个人博客地址 : https://zggdczfr.cn/ ,欢迎光临~ 前言 Eureka是Netflix开发的服务发现组件,本身是一个基于REST的服务.Sprin ...
- scrapy-redis基础和介绍
一.scrapy-redis(0.6)依赖的环境 Scrapy >= 1.0.0 #终于过了1版本,这个太重要了,总算坑小了点,感谢那些为了解决各种scrapy与s ...
- asp.net MVC html.ActionLink的几种参数格式
一 Html.ActionLink("linkText","actionName") 该重载的第一个参数是该链接要显示的文字,第二个参数是对应的控制器的方法, ...
- RM报表 实际打印的判断
procedure TFormDZMD.RMReport1PrintReportEvent(Sender: TObject); begin // Log('RMReport1PrintReportEv ...
- 软工作业No.8 第六周 Alpha阶段项目复审
小组的名字和链接 优点 缺点,bug报告 (至少140字) 最终名次 (无并列) 未来的将来的明天在那里等你 http://www.cnblogs.com/macrae/p/9940387.html ...
- 2018-2019-2 网络对抗技术 20165202 Exp1 PC平台逆向破解
一.基础知识 掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码. NOP指令为空指令,当运行该指令时CPU不做任何事情,但是会占用一个指令的时间,当指令间需要有延时,可以插入NOP指令 ...