反走样知识简单分享-计算机图形学

news/2024/12/4 20:19:12/

 由于图形信号的连续性,当我们想要在光栅显示器上显示图形时,在处理非水平、非垂直且非45°的线段时,直线段或边界会出现锯齿。这是因为光栅显示系统中,使用离散的像素点来显示的图像。因此若我们的像素越大那么锯齿也就越大越明显,像素越小锯齿也就越小越不明显。这是因为我们在光栅化操作时,采样的是像素的中心点。像素的中心点越密集,也就是说我们的采样频率越高。也就是说锯齿出现的原因是因为我们的采样频率不够高

这种用离散量表示连续量引起的失真现象称之为走样(aliasing);用于减少走样现象的技术称为反走样(antialiasing)。光栅图形的走样现象除了产生锯齿形的边界外,还有微小图形闪烁,甚至遗失等现象。走样是光栅扫描显示器的一种固有现象,因此我们只能使用反走样方法来尽可能减少对图形显示的影响。

常用的反走样技术主要分为两类:一类是通过提高硬件设备,提高显示器分辨率。另一类通过改进算法来实现。

硬件技术

采用分辨率更高的显示设备时,可使锯齿相对于图形物体更小一些,所以看上去走样现象有所改善。但是具有局限性,由于受到硬件条件和成本的限制,实现起来较为困难。

软件技术

1、区域采样

根据计算像素区域中被物体覆盖的比率来更改像素点的颜色。或将像素点分割为更小的子像素,通过计算子像素落在直线内部的比例从而得到近似面积。

缺点:需要直接计算相交区域的面积,乘法运算运算量大,且得到的反走样图像不是很平顺,效果不如加权反走样方法获得的图像。

2、加权区域采样

软件反走样技术主要使用加权区域采样。算法的实质是利用人眼视觉特性,这种方法更符合人视觉系统对图像信息的处理方式。把待处理的直线段看作具有一个形状狭长的矩形,并设计算法求出该矩形与某象素区域相交区域的面积,根据该区域与象素中心的距离确定该象素的亮度值

通过加权平均的方法,调节周边像素的亮度和灰度,以产生模糊的边界。通过模糊,我们可以淡化锯齿,从而达到更平滑的视觉效果。加权参数可以选择距离、面积和体积等。比如在白色背景下绘制黑色直线时,可以通过在直线周围添加一些灰色像素来柔化黑色到白色的锐变。

离散计算方法

  • 将象素分割成n个等面积的子象素,计算每个子象素对原象素的贡献,并保存在一张二维的加权表中;
  • 求出所有中心落于直线段内的子象素;
  • 计算所有这些子象素对原象素亮度贡献之和的值;
  • 该值乘以象素的最大灰度值作为该象素的显示灰度值。

下面是我在课程中编写的画直线程序相关的抗锯齿代码分享:

          走样直线                                                        反走样直线

反走样算法实现 

 文章参考:GAMES101-现代计算机图形学入门-闫令琪_哔哩哔哩_bilibili

                   处理反走样常用的四种技术_Hydrion-Qlz的博客-CSDN博客

此篇仅作为一个图形学笔记整理,用于分享和加深记忆,内容也不够深入,希望能对大家的理解有所帮助。如果哪里写的有误欢迎大家指出


http://www.ppmy.cn/news/770121.html

相关文章

【计算机图形学】几何

我们可以用许多方法来表示几何 隐式的 •代数曲面 •水平集 •距离函数 •…… 显式的 •点云 •多边形网格 •细分,NURBS •…… 选择最适合当前的任务/几何类型方式即可 1.两种表示方式的优缺点 隐式显式优点可以方便判断一个点在该几何的外面里面还是在几何上可以方便找出…

元宇宙江湖里的“牛鬼蛇神”

经过两年多的摸索后,业界渐渐对元宇宙形成了一个共识,即“元宇宙”的成熟至少需要三到五年的时间。 可现实中发生的一幕幕,似乎超出了不少人的预期,哪怕是在元宇宙的概念开始降温的局面下,不少城市仍在争先出台各种招…

纯CSS画基本图形(矩形、圆形、三角形、多边形、爱心)

1、正方形 #square {width: 100px;height: 100px;background: red;} 2、长方形 #rectangle {width: 200px;height: 100px;background: red; } 3、圆形 #circle {width: 100px;height: 100px;background: red;-moz-border-radius: 50px;-webkit-border-radius: 50px;border-radi…

计算机图形学(十一):真实感图形(画家算法消除隐藏面)

目录 画家算法的基本思想 多边形优先级的考虑 交叉覆盖和循环覆盖多边形的优先级考虑 解决深度优先级冲突的排序算法 画家算法的特点 画家算法的基本思想 先将画面中的物体按其距离观察点的远近进行排序,结果存放在一张线形表中。距观察点远者称其优先级高&am…

纯CSS画的基本图形(矩形、圆形、三角形、多边形、爱心、八卦等)

这些代码的来源是css-tricks。原文链接: http://www.itivy.com/ivy/archive/2012/1/16/css-shape.html 1、圆形 CSS代码如下:宽高一样,border-radius设为宽高的一半 #circle {width: 100px;height: 100px;background: red;-moz-border-radius…

操作系统 计算机系统概述

操作系统(Operating System)是计算机系统中的一种系统软件,它管理和控制计算机硬件资源,为用户和应用程序提供一个可靠、方便的工作环境。下面是关于操作系统的基本概念、发展历程以及程序运行环境的介绍。 基本概念 操作系统是…

Golang每日一练(leetDay0118) 扁平化嵌套列表迭代器、整数拆分

目录 341. 扁平化嵌套列表迭代器 Flatten Nested List Iterator 🌟🌟 343. 整数拆分 Integer Break 🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/…

自制0-36V便携电源:typec+pd诱骗

1、芯片选择: 1.1、LDR6321 选用LDR6321,最高诱骗输出20V,手册如下: https://atta.szlcsc.com/upload/public/pdf/source/20211112/6C547DE14631DD2A11892D79A9F4FADD.pdf 该芯片立创商城有售,淘宝也有售&#xff0c…