光栅化

news/2025/10/13 23:59:12/文章来源:https://www.cnblogs.com/wsdanshenmiao/p/19139738

光栅化

Rasterrization—光栅化(三角形的离散化)

屏幕(Screen)在图形学我们可以被抽象为一个二维数组,其中二维数组中的每个元素是像素( pixel )。

屏幕空间(screen space)是由数组构成的平面坐标系,每一个像素用坐标表示,像素的中心在x+0.5和y+0.5上。
image-20240227115640493

为了把单位立方体里面的所有物体画在屏幕上(Canonical Cube to Screen)我们首先必然要做一个视口变换,要得到视口变化矩阵(Viewport transform matrix),原来我们单位立方体的x和y都是2,现在x要变成width那就需要乘width /2,而y要变成height那就需要乘height/2,而z保持不变则为1(这个z值后面会详细介绍用来做深度测试),还需要平移(width /2,height/2)个单位(概括为先缩放再平移)。这样我们就可以算出视口变化矩阵(Viewport transform matrix)(如下图):

img

视口变化矩阵(Viewport transform matrix)

通过视口变化矩阵(Viewport transform matrix)把单位立方体映射到屏幕空间(如下图)

img

xy平面中的变换: [-1, 1]2 to [0, width] x [0, height]

到这一步的时候大家不要忘了我们此时得到的不过是屏幕空间中的一些三角而已,但是这远远不够我们需要把这些三角形打碎打成像素并且告诉每个像素的值是多少然后显示在屏幕上,这一个完整的过程我们称之为光栅化(Rasterization)

image-20240227121528765

三角形在图形学中可以看做是几何体的基本形状(Triangles - Fundamental Shape Primitives),三角形在图形学中有很多很好的性质:

  1. 三角形是最基本的多边形,并且任何其他的多边形都可以拆分为三角形。
  2. 三个点可以保证他在一个平面如果是四边形四个点就不能保证。
  3. 它可以很好地用叉积判断一个点是不是在三角形内部(三角形的内外定义特别清晰)[4]

Sampling—(采样)

采样的概念

采样就是给定一个连续的函数,在不同的点求它的值,也可以认为,采样是把一个连续的函数离散化的过程。

采样是指利用像素的中心对屏幕空间进行采样,采样不仅可以在空间上采样,还可在时间上采样。因此需要定义一个 inside(tri, x, y)函数,使用叉乘判断这个像素的中心是否在三角形内,如果这个点一直在三角形三条边的左边或右边那么就可以认为这个点在这个三角形的内部。

img

如果这个点在三角形的内部那么我们就定义它为1,不在内部就定义为0(这里的像素只考虑是显示还是不显示的问题,不考虑像素内部颜色的变化)。这样我们就可以确定inside(tri, x, y)这个函数了(如下图)

img

接下来就是遍历整个屏幕中的像素,然后判断像素的中心点是否在三角形内部,如果在就赋值为1并显示。

img

遍历整个屏幕空间的像素太浪费了,因为三角形可能只是屏幕中很小的一部分,因此可以进一步优化,只要判断这个三角形包围盒里面的像素就可以了(如下图)

img

采样优化的一种:对三角形包围盒里面的函数进行采样

采样中的Artifacts(瑕疵)

锯齿

采样完成后,我们自然知道有哪些像素的中心点在三角形内,那我们自然而然的可以把这些像素填成三角形对应的颜色,我们又知道像素是一个小方块并且它内部的颜色是均匀的,所以下图左边三角形内的像素中心点对应在不同的像素上会变成右边这样(如下图)

img

这样我们就会发现一个问题,我们想要得到的是一个三角形,但是实际得到的不完完全是一个三角形,不过的它的形状和三角形大概类似,这就是我们所说的锯齿(Jaggies!)。有两个原因导致锯齿:一是像素本身有一定的大小,二是采样的速度更不上信号变化的速度(高频信号采样不足)。

img

Sampling Artifacts in Computer Graphics—(采样所产生的瑕疵)

前面我们已经知道,采样在图形学中广泛存在。光栅化的过程其实就是在屏幕空间离散的像素中心点上进行采样来判断像素是否在三角形内的采样。

一张照片其实就是所有达到感光元件的光学信息,通过把它离散成图像的过程,其实这也是采样。采样不仅可以发生在不同的位置,也可以发生在不同的时间,视频就是在时间中进行采样的。因此采样是广泛存在的,同样采样带来的问题也是广泛存在的。

采样产生的第一个问题就是我们刚刚提到的锯齿问题(Jaggies)

img

摩尔纹

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/936534.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图形学中的变换

图形学中的变换 二维变换 缩放变换(Scale)如上图,如果想把一个图形缩小为原来的0.5倍,那么就需要x坐标变为0.5倍,y坐标也变为0.5倍,可以用以下表达式表示这两个表达式可以用矩阵的形式表示如下Sx表示在x轴方向上…

Unity URP 体积云

Unity URP 体积云 ​ 好久之前开的体积云,因为期末考试和过年拖了很久,这几天才算整完。记录一样实现的思路,方便日后忘记了回来复习。 ​ 云的渲染有多种实现方法,我实现的是基于RayMarching的体积云体渲染,也…

使用DirectX绘制天空盒并实现破坏和放置方块

使用DirectX绘制天空盒并实现破坏和放置方块 绘制天空盒 由于项目中的DxTex软件使用不了,所以直接使用了方法二,将项目中的文件名直接修改,不过这里要注意获取的六个正方形贴图要用正确的顺序读取,也就是+X,-X,+…

编写DX12遇到的坑

编写DX12程序遇到的坑 ​ 写DX12每次遇到Bug都会卡好久,结果大部分时候最后都发现是一些小问题导致的,故将自己遇到的坑都写下来,方便后续遇到时回头查阅。 使用ClearDepthStencil清理DepthBuffer的时候把其他资源…

编写DX12时使用的辅助类

编写DX12时使用的辅助类 有一段时间没有学DX12,导致很多东西都忘了,跟着教程里写的东西还好,略看一遍教程就想起来的,但是自己封装的很多类就算写了注释过了一段时间也基本忘光,而且翻来翻去的也不方便,为了快速…

HLSL语法

语义 语义的概念语义xxxx:+ 大写单词,是用来限定输入值的来源、输出值的去向,其中那些大写单词都是系统提供的,我们需要用他们去填充我们的参数,然后传到顶点着色器和片元着色器中,进行进一步的计算,最后再通过…

DirectX12初始化

DirectX12初始化 这几天跟着龙书把dx12的初始化过了一遍,写点东西记一下,免得之后又忘了。 创建d3d设备 d3d设备相当于对显示适配器的抽象,显示适配器一般为显卡,也可由软件来模拟。可通过下列接口来创建一个d3d设…

用Vmware ESXI6.7离线包封装网卡驱动

用Vmware ESXI6.7离线包封装网卡驱动本来想装最新版的Vmware ESXI9.0的,但安装时提示找不到网卡无法安装,于是在网上搜索一番,发现可以用离线升级包封装网卡驱动的办法进行安装,但由于我的网卡是Realtek瑞昱RTL811…

CF2159B

Sol 假设 \(n<m\)。 考虑枚举列,然后对于每个位置分别做。 但是这非常难做,然后我们考虑包含 \([l,r]\) 这几行的最小矩形,然后发现这个东西可以在枚举列的时候同时计算,然后就做完了。 Code Link。

登录校验---Filter过滤器

过滤器(Filter)概念: Filter 过滤器,是 JavaWeb 三大组件(Servlet、Filter、Listener)之一。 过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。 过滤器一般完成一些通用的操作,比如: 登录校验、统一编码…

环境变量 Path 配置实战指南:从“能用”到“专业”--两种配置环境变量的方法

本指南将通过一个完整的实例,手把手教你如何配置 `Path` 环境变量。我们将超越“如何做”,深入探讨“为什么这么做”,让你彻底理解直接路径与引用路径的本质区别。我们将以配置 Java 开发环境为例,让你清晰地看到每…

10月13日

上午建模语言和数据结构课程 下午听讲Java知识点和练习数据库

Ubuntu22.04安装CH340/CH341驱动

转载自: 陈拓 2024/12/20-2024/12/20 https://zhuanlan.zhihu.com/p/137683332711. 我的系统硬件系统架构arch操作系统版本lsb_release -a2. CH340G,USB-串口转换器3. Ubuntu22.04安装CH340驱动 3.1 用lsusb查看USB插…

玄机蓝队靶场_应急响应_198:实战Live勒索病毒溯源排查

前言: 版权作者:思而听(山东)网络科技有限公司、solar应急响应团队、州弟学安全 特别注意:环境中的勒索家族全版本加密器已被 solar应急响应团队 破解 系统:Windows server 2016 账号密码:administrator/Sierting…

JetBrains Mono字体好看、及其它

请注意箭头。还有输入的是grep != 另外,进到那个深深的目录里后,可以: ln -s `readlink -f .` somewhere 目录不能有hard link,原因可问AI.

STM32——UART

UART通信协议(串口通信) 1、两根通信线(发送和接收),TX与RX要交叉连接。只需进行单向通讯时可只连接一根通信线。 2、仅支持点对点的通信,不像I2C、SPI支持一对多通信。 3、进行通信的两设备电平标准必须一致,当…

WebApi 交叉观察者- IntersectionObserver复盘

交叉观察者- IntersectionObserver复盘 一、 Intersection Observer是什么? Intersection Observer API 提供了一种异步观察目标元素与祖先元素或视口交叉状态的方法。通俗地说,就是可以高效地监测一个元素是否进入或…

[KaibaMath]1009 关于||a|-|b||≤|a+b|的证明

[KaibaMath]1009 关于||a|-|b||≤|a+b|的证明绝对值的三角形不等式为||a|-|b||≤|ab|≤|a|+|b|. 本文给出前半段的证明,即证明||a|-|b||≤|ab|.

css: Bootstrap5 Accordions

<!doctype html> <html> <head> <meta charset="utf-8"> <title>Bootstrap5 Accordions</title><link rel="stylesheet" href="https://cdn.jsdeliv…