计算机图形学入门07:光栅化中的采样与走样

1.什么是光栅化?

        在前面的章节里提过,光栅化(Rasterization)就是将物体投影在屏幕上的图形,依据像素打散,每一个像素中填充不同的颜色。

        如下图中的老虎,可以看到屏幕上有各种多边形,这些多边形经过各种变换和操作后,会形成屏幕空间的多边形。这样还不够,还需要进一步将多边形打散成像素,告诉每个像素的值应该是什么,这一步的过程就是光栅化

2.三角形网格

        在图形学中,三角形网格(Triangle Meshes)构成了物体表面结构,如下图所示为三维物体和二维物体,都是用三角形构成而来。

        那么为什么使用三角形作为基本形状单元(Fundamental Shape Primitives)呢?因为有如下优点:

        1.因为三角形是最基础的多边形:

                任何多边形都可以用三角形组成,任何多边形都可以拆成三角形。

        2.三角形独特的性质:

                三角形内部一定是个平面,在三角形内部给定三个点连成一个三角形一定是一个平面。

                三角形内外定义非常清晰,可以通过向量叉乘来判断点是否在三角形内部。

                定义良好的三角形顶点插值方法,实现颜色的平滑过渡。

3.采样

        那么如何将三角形填充到屏幕像素中呢?如下图所示:

        这里就用到了采样(Sampling)。所谓采样就是一个连续的函数f(x)在不同x值拿到这个函数的值是多少,相当于把一个函数给离散化的过程。采样在图形学说是非常重要的概念,会有各种各样的采样,这里说的采样是指利用像素的中心对屏幕空间进行一个采样。还可以采样时间、位置、法线,反射光等。

3.1三角形采样

        利用像素的中心对屏幕空间进行采样,就是判断每个像素的中心是否在三角形内部。如下图所示:

        定义一个二进制函数inside(t,x,y),这个函数的作用是给一个屏幕空间中的任意一个点Point(x,y),判断这个点是否在三角形内部,如果在三角形内返回1,否则返回0。

        那么使用这个函数对屏幕空间上所有点进行计算,如下示意代码:

        判断点是否在三角形内部则是通过向量叉乘的方法实现,在前面线性代数的章节中有解释。那么,如果一个像素点中心刚好在三角形边缘怎么处理?有规范参照规范,没有规范自己决定是否在三角形内部或外部。如下图所示:

3.2采样过程优化

        上述对一个三角形进行采样的时候,把屏幕上所有的像素都进行了遍历,如果改三角形只是占屏幕中很小的范围,那么就会造成极大的浪费。这时,就需要进行优化。

3.2.1 AABB包围盒

        如下图所示,左侧白色部分肯定不在三角形内部,右侧蓝色区域为三角形覆盖的最大区域,给定一个包围盒,指轴向包围盒,称为AABB包围盒(Axis-Aligned Bounding Box)。而在包围盒之外区域的像素点自然不需要去判断了。

3.2.2逐行检测

        当一个三角形本身覆盖不了多少像素,但是使用AABB包围盒覆盖了很多像素,比如很窄长又旋转的三角形。对于这种情况,使用AABB包围盒检测方式有些浪费,这时候可以进行逐行检测,就是从三角形左下角开始往右检测,检测完一行再检测上一行,直到检测完最上一行。如下图所示:

3.3采样分类

3.3.1位置上的采样

        对于任何一个拍出来的照片,如果放大都可以看到一个个格子,也就是在分辨率上的像素。图像信息到达感光元件时,把他们离散为屏幕上一个一个的像素,这么一个过程的采样,就是位置上的采样。如下图所示:

3.3.2时间上的采样

        采样不仅发生在不同位置,也可以发生在不同的时间。在不同时间段采样就是时间上的采样。比如视频、动画都是一帧一帧播放的,每一帧就是一张图,将每一张图片叠加在一起就是如下图所示:

4.走样

        走样(Aliasing),表示失去原来的样子。在图形学中表示在光栅化三角形的时候,得到的结果与原本变样了。常见的走样有锯齿(Jaggies)、摩尔纹(Moire)、车轮效应(Wagon wheel effect)

4.1锯齿

        上述采样过程中,得到判断后在三角形内部像素的中心点。如下图所示:

        然后给对应的像素点填充上红色的颜色,就得到下面的左侧图,而实际上的三角形应该是右侧的样子。这种情况称为锯齿。注意:这里是每个像素代表一个小方块,但是实际上的成像屏幕像素并不这么简单,只是方便理解。

        如下图所示,可以明显看到放大后三角形产生了锯齿。

4.2摩尔纹

        如上图所示,把左边图所有奇数行和奇数列像素都去掉,然后把剩下的图像拼接到一起(相当于缩小了照片),然后依旧按照原始大小进行显示,就会出现左边所示的摩尔纹。在日常生活中用手机去拍屏幕也会产生一系列的条纹。

4.3车轮效应   

        在生活中,有些高速行驶的汽车,但是我们的眼睛看他的车轮却反而像是在倒着转,这也是采样所导致的,我们称之为车轮效应。造成这个问题的原因是人眼在时间上的采样,跟不上运动的速度,时间上采样慢也就是采样频率低。

4.4产生走样的原因

        上述三种情况也被称为Sampling Artifacts,当然还有其他情况。锯齿和摩尔纹都是在空间或者位置上采样产生的问题,而车轮效应是在时间上采样产生的问题。总结就是,信号(函数)变换太快,采样速度太慢。采样速度也就是采样频率

4.2.1采样频率

        采样频率可以理解为抽取样本的间隔。应用到光栅化里面,我们可以把三角形当做无数的点组成,而我们屏幕又是由一个个的像素组成,这些像素的中心点对应到三角形中的某些点,等同于所有点中抽取出的样本。那么采样的间隔自然是我们像素的实际物理大小。因此若屏幕大小不变,分辨率变高(即像素越多,像素的中心点物理间隔越小),采样频率越高。

        那么,产生了走样如何解决?将会在下一章说明。

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

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

相关文章

教师办公神器推荐,口碑爆棚!

亲爱滴老师们,我要给大家安利几款超级实用的教师办公神器,不仅功能强大,而且口碑爆棚,绝对能让你们的工作效率飞起来! 博思白板:创意无限,教学生动 一款可以无限扩展的数字白板,让教…

Lodop 实现局域网打印

文章目录 前言一、Lodop支持打印的方式lodop 打印方式一般有3种:本地打印局域网集中打印广域网AO打印 二、集成步骤查看lodop 插件的服务端口:查看ip后端提供接口返回ip,前端动态获取最后步骤 前言 有时候会根据不同的ip来获取资源文件&…

linux网络 dns域名解析

目录 DNS 域名体系结构 如何实现域名解析 正向解析 反向解析 主从服务器解析 bond 网卡 DNS 是域名系统的简称 域名和ip地址之间的映射关系 互联网中 IP地址是通信的唯一标识 逻辑地址 访问网站 域名 IP地址不好记 域名朗朗上口 好记 域名解析的目的就是为了实现 访…

为什么我们需要在软件本地化过程中使用术语服务?

你知道软件翻译和本地化的术语服务吗?此解决方案涵盖源术语和目标术语的创建、开发和维护。所有术语都存储在具有多个字段的数据库中,包括术语定义、用法示例、上下文和历史记录。这使我们能够正确处理每个术语的创建或更改请求,避免创建重复…

【ai】pycharm远程ssh开发

选 远程开发: SSH 连接到服务器 局域网的ubutnu 服务器的 ssh登录账号 登录后就开始下载 可能ubutnu 服务器上安装一个serverwindows 客户端的pychramr上装一个client ? 突然发现实际有两个下载: 后端也要安装,竟然需要1G 那…

网站调用Edge浏览器API:https://api-edge.cognitive.microsofttranslator.com/translate

Edge浏览器有自带的翻译功能,在运行pc项目可能会遇到疯狂调用Edge的API https://api-edge.cognitive.microsofttranslator.com/translate 这个URL(https://api-edge.cognitive.microsofttranslator.com/translate)指向的是微软认知服务中的A…

【问题解决】adb remount 失败或刷机无法连接设备(KaiOS)

问题描述 1、设备无法adb remount成功, 2、通过fastboot无法识别设备,一直卡住 3、已经识别到9008端口,但是设备与刷机工具connect fail,甚至软件crash 解决方案 1、安装高通驱动工具:QDLoder HS-USB Driver QDLoade…

【Python】【matLab】模拟退火算法求二元高次函数最小值

一、目标函数 求二元高次函数的最小值。目标函数选择: 用于测试算法的简单的目标函数: 二、Python代码实现 import numpy as np# 目标函数(2变量) def objective_function(x):return x[0] ** 2 2 * x[0] - 15 4 * 4 * 2 * x[…

【Vue】项目目录介绍和运行流程

文章目录 一、项目目录介绍二、public/index.html三、src/main.js四、运行流程 一、项目目录介绍 虽然脚手架中的文件有很多,目前咱们只需认识三个文件即可,这三个文件就决定了我们项目的运行 main.js 入口文件App.vue App根组件index.html 模板文件 我…

递归在多级数据结构中的简单应用

哈喽,我是小码,半年多没更新了,这段时间换了新工作,工作也很忙。后续会尽量多写点,坚持确实是一件很难,很酷的事情。最近在公司负责开发商品有关的开发,商品包含类型、款式等属性,而…

视频推广短信:新时代的营销利器(视频短信XML接口示例)

随着移动互联网的普及,短信已经不再是简单的文字信息传递工具,而是逐渐演变为一种有效的推广手段。特别是当视频与短信结合时,它所带来的营销效率更是令人瞩目。 一、视频推广短信的特点 1.直观性:与传统的文字短信相比&#xf…

游戏盾之应用加速,何为应用加速

在数字化时代,用户对于应用程序的防护要求以及速度和性能要求越来越高。为了满足用户的期望并提高业务效率,应用加速成为了不可忽视的关键。 应用加速是新一代的智能分布式云接入系统,采用创新级SD-WAN跨域技术,针对高防机房痛点进…

令人瞠目结舌的8个ChatGPT-4o提示词

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

【python】OpenCV—Bitplane

学习来自: 位平面分割(Bit-Plane Slicing)使用OpenCVPython进行图像处理的初学者指南 位平面 位平面(bitplane)是一个在计算机科学中用于描述图像数据的概念,具体定义如下: 【定义】&#x…

《手把手教你》系列练习篇之10-python+ selenium自动化测试(详细教程)

1. 简介 今天我们继续前边的练习,学习和练习一下:如何使用webdriver方法获取当前测试页面的URL、如何获取当前页面的title、如何打开浏览器的一个新建页面、如何操作单选按钮等等,这些小练习,来巩固基础。 2. webdriver方法获取…

​谁用谁知道,教师实用工具分享​

老师们面临着日益增长的教学和管理任务。为了有效提升工作效率,一些实用的工具成为了老师们不可或缺的助手。给大家分享几款教师必备的工具,帮助教师们在教学和管理工作中更加得心应手。 1. 知乎:知识的海洋 知乎是一个中文问答社区&#xf…

Docker-compose安装、使用,容器化部署springboot项目

一、docker-compose的安装 1、按官网的方式去安装 1)下载docker-compose curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 若…

【微机原理及接口技术】中断系统

【微机原理及接口技术】中断系统 文章目录 【微机原理及接口技术】中断系统前言一、中断概述中断的基本概念中断处理过程 二、8086/8088中断系统中断类型中断响应过程中断向量表内部中断服务程序 总结 前言 本篇文章我们会讲到中断的概述,8086/8088中断系统。 一、…

bootstrap5-学习笔记3-文字格式+表格+徽章

参考: Bootstrap5 教程 | 菜鸟教程 https://www.runoob.com/bootstrap5/bootstrap5-tutorial.html Bootstrap 入门 Bootstrap v5 中文文档 v5.3 | Bootstrap 中文网 https://v5.bootcss.com/docs/getting-started/introduction/ 之前用bootstrap2和3比较多&#x…

微软云计算Windows Azure(三)

目录 五、Windows Azure Marketplace六、Windows Azure服务平台(一)网站(二)虚拟机(三)云服务(四)移动服务(五)大数据处理(六)媒体支持…