图形学笔记(四)变换——三维变换(三维旋转与欧拉角)、MVP变换、视图变换、投影变换(正交投影与透视投影)
图形学笔记(六)光栅化2 —— Artifacts、时域与频域、滤波、卷积定理、超采样、MSAA

在上一节中我们通过MVP变换将所有物体都映射到了经典立方体中([−1,1]3[-1,1]^3[−1,1]3)。
接下来,我们又要如何把立方体画到屏幕上呢?

文章目录

  • 1 基本概念
    • 1.1 什么是屏幕(Screen)
    • 1.2 光栅化(Raster)
    • 1.3 像素(Pixel)
    • 1.4 屏幕空间(Screen-Space)
  • 2 视口变换
  • 3 三角形 - 基础图元
    • 3.1 为什么是三角形是基础图元?
    • 3.2 使用像素来表示一个三角形
  • 4 光栅化的方法——采样
    • 4.1 定义与理解
    • 4.2 采样过程
    • 4.3 三角形的包围盒(Bounding Box)
  • 5 光栅化的加速方法
  • 6 光栅化的问题——锯齿(Jaggie)或走样(Aliasing)

1 基本概念

1.1 什么是屏幕(Screen)

  • 屏幕是像素的二维数组(pixel),数组的大小被称为分辨率(resolution)
  • 屏幕是一个典型的光栅(raster)成像设备

1.2 光栅化(Raster)

  • 光栅(Raster)就是德语中的屏幕。
  • 光栅化(Rasterize)就是把东西画在屏幕上的过程。

1.3 像素(Pixel)

  • 像素是图片单元(picture element)的简写。
  • 暂时把像素当作一个只带有一种颜色的小方块(颜色是rgb(红绿蓝0-255)的混合)。

1.4 屏幕空间(Screen-Space)


屏幕空间就是在屏幕上建立一个坐标系(左下角是原点)。

有以下一些约定:

  • 像素的坐标写成(x,y)的形式。
  • 像素坐标的范围是从(0,0)到(width-1,height-1)的。
  • 像素(x,y)的中心是(x+0.5,y+0.5)。
  • 屏幕的覆盖范围是从(0,0)到(width,height)的。

2 视口变换

想把立方体的内容在屏幕上绘制出来,首先我们要把经典立方体映射到屏幕,即进行以下的过程:

  • 忽略z
  • 把xy平面上的[−1,1]2[-1,1]^2[−1,1]2转化(进行缩放和平移)成[0,width] X [1,height](这个过程也称为视口变换

视口变换矩阵:

经过上面的步骤,我们就确定了屏幕上一些边界点的坐标,接下来我们就要把轮廓内的东西画到屏幕上来进行显示。
接下来介绍将三角形光栅化为像素的过程。

3 三角形 - 基础图元

3.1 为什么是三角形是基础图元?

因为三角形有很多优势:

  1. 三角形是最基础的多边形
  • 可以把其他多边形打碎成三角形
  1. 具有独特的属性
  • 三角行肯定是个平面(planar)(不想四边形一弯折顶点就可以在不同的平面中了)
  • 内部容易区分(通过叉积可以快速判断点是否在三角形内,判断方法可以回顾第二节的内容)


如图所示,AB⃗×AP⃗>0\vec {AB} \times \vec {AP} > 0AB×AP>0,说明P在AB的左边, BC⃗×BP⃗>0\vec {BC} \times \vec {BP} > 0BC×BP>0,说明P在BC的左边 ,CA⃗×CP⃗>0\vec {CA} \times \vec {CP} > 0CA×CP>0 ,说明P在CA的左边。

如果进行三个叉积运算的结果都为正或都为负,表明点都在三角形边的左边或者都在右边,故说明P在三角形内部。
否则说明点在三角形外面。

  • 方便不同的属性进行插值(从一个顶点到另一个顶点内部属性的变化)

3.2 使用像素来表示一个三角形

经过MVP变换和视口变换就可以得到三角形三个顶点的坐标,接下来要将这个坐标转化为像素的集合。
这个过程的输入是三角形顶点投影到屏幕上的位置,输出是像素值的集合,如下图所示。


根据上图我们很容易得到,三角形内部的点一定是要染色的,可是三角形边缘的点怎么办呢?
我们可以通过采样等方式来判断像素(中心点)与三角形的位置关系(在内还是在外?),进而判断边缘的点是否该被染色。

4 光栅化的方法——采样

4.1 定义与理解

定义:把函数离散化的过程。
如下所示,现在有某连续函数,对于很多离散的点去应用这个函数,并计算相应的输出值。

4.2 采样过程

对屏幕进行采样来判断像素的中心是否在三角形内。

(1)定义函数inside(tri,x,y)(1就是染色,0就是不染色)
inside(t,x,y)={1(x,y)处在三角形t内0(x,y)不在三角形t内inside(t,x,y)=\left\{ \begin{aligned} &1 &(x,y)处在三角形t内\\ &0 &(x,y)不在三角形t内\\ \end{aligned} \right. inside(t,x,y)={​10​(x,y)处在三角形t内(x,y)不在三角形t内​
(2)对屏幕的所有像素来进行采样,代码如下所示:

(3)边界情况

对于边界情况,可以做处理也可以不做处理。
比如我们可以认为,下面的每种说法都是对的

  1. 图中的点在三角形1内
  2. 图中的点在三角形2内
  3. 图中的点在三角形1和三角形2内

4.3 三角形的包围盒(Bounding Box)

包围盒就是圈定三角形顶点的xy最小值和最大值的范围。

引入包围盒后,我们不用遍历整个屏幕只要判断包围盒内的点即可。

5 光栅化的加速方法

以下是一种遍历的加速方法。

如图所示从顶点开始,对每一行都有左和右的包围盒,不再多考虑别的像素。

适合比较窄的和旋转的三角形。

6 光栅化的问题——锯齿(Jaggie)或走样(Aliasing)

如图所示,直接栅格化后,边界并不像一个三角形。

原因:像素本身有大小

所以要进行抗锯齿和反走样。

图形学笔记(五)光栅化——屏幕、像素、屏幕空间、视口变换、基础图元与三角形、采样、包围盒、锯齿或走样相关推荐

  1. 计算机图形学三:光栅化-Rasterization

    文章目录 什么是光栅化? 像素和屏幕 直线光栅化(Linear Rasterization) DDA数值微分算法 中点Bresenham算法 三角形光栅化(Triangle Rasterization ...

  2. Game101课程笔记_lecture06_光栅化2

    Game101课程笔记_lecture06_光栅化2 1 Antialiasing 反走样 1 采样理论 1 Artifacts:错误,瑕疵.(in Graphics) 2 antialiasing ...

  3. 计算机图形学中的光栅化

    光栅化 1.屏幕 1.2.屏幕分类 1.3.屏幕分辨率 2.像素(Pixel,缩写px) 3.屏幕空间 3.1 规范立方体转化到屏幕空间 4.光栅化 5.像素表示三角形 5.1 2D的采样方法进行光栅 ...

  4. 计算机图形学笔记五:光栅化(消隐算法)和 前几节内容总结

    消隐算法和前几节内容总结 1.消隐算法 1.1画家算法(Painter's Algorithm) 1.2 Z-Buffer算法 2.前几节内容总结 1.消隐算法 1.1画家算法(Painter's A ...

  5. 一个简单光栅器的实现(五) 光栅化阶段

    在几何阶段我们通过顶点变换获得了世界坐标下的顶点最终渲染到屏幕上的位置和它们的深度值,并且在剔除掉了不在视锥体内顶点,接下来要做的就是根据顶点的位置和三角形索引渲染出模型的每一个三角形. 这个简单的光 ...

  6. 计算机图形学-光栅化(三角形的离散化)

    本专栏内容整理了GAMES101的计算机图形学课程的主要内容,作为我学习计算机图形学的一份复习备份或叫做笔记.内容中如有错误,或有其他建议,欢迎大家指出. 附上GAMES101计算机图形学课程:GAM ...

  7. 计算机图形学(光栅显示系统、基于GLUT的OpenGL程序框架、基本图元光栅化)

    1.光栅显示系统 图形显示设备–CRT光栅扫描显示器(阴极射线管显示器) 电子束轰击屏幕表面的荧光物质,从而产生不同亮度的光点,这些光点是显示器可以控制的最小单位,称为像素.光点会逐渐变暗,需要不断刷 ...

  8. 图形学笔记(四)变换——三维变换(三维旋转与欧拉角)、MVP变换、视图变换、投影变换(正交投影与透视投影)

    图形学笔记(三)变换--缩放.镜像.切变 图形学笔记(五)光栅化--屏幕.像素.屏幕空间.视口变换.基础图元与三角形.采样.包围盒.锯齿或走样 文章目录 1 三维空间中的变换 1.1 三维空间中的齐次 ...

  9. 计算机图形学笔记(一)渲染管线概述

    计算机图形学笔记(一)渲染管线概述 写在前面:因为之前有学习过图形学,博文是对过去知识的拾遗和对学习过程中的总结记录,所以在内容组织上可能不符合逻辑,某些比较熟悉的内容不会体现或简述:在整理资料的时候 ...

最新文章

  1. Facebook人工智能实验室提出「全景分割」,实现实例分割和语义分割的统一
  2. tcp时间戳 引起的网站不能访问
  3. 采用 Vue 编写的功能强大的 Swagger-ui 页面
  4. CALL TRANSACTION 小节
  5. 生产过程中计算机软件的确认--简述医疗器械生产过程确认
  6. “你的手机上未安装应用程序”的解决方案
  7. 7.深度学习练习:Regularization
  8. oracle判断数据出现交叉,Oracle move table分析
  9. python神奇时钟项目_怎么在Python项目中利用Pygame绘制一个时钟
  10. Sandcastle Help File Builder(.NET帮助文档工具)的版本选择心得——支持VS2010至VS2015,高版本项目文件问题...
  11. 洛谷 P1144 最短路计数 解题报告
  12. 125w短波通信距离_短波通信在消防应急救援通信中的应用探讨
  13. 数据库系统概论思维导图
  14. ASCII 在线转换器
  15. win7 配置JDK环境变量
  16. gnome显示桌面图标_「GNOME 3」- 如何显示桌面图标? @20210123
  17. 5421. 【NOIP2017提高A组集训10.25】嘟嘟噜—mayuri
  18. 数据挖掘之关联规则挖掘的一些定义
  19. 吃鸡ios和android灵敏度,和平精英灵敏度怎么调最稳2020二指攻略:安卓苹果灵敏度调节方法大全[多图]...
  20. 电视盒子显示服务器未连接,你家的电视盒子直播总是卡,解决方法全都在这里...

热门文章

  1. linux 搭建/重启 java项目 复制文件命令
  2. 2023全国科技工作者日——回顾2023小蛮腰科技大会暨AIGC人工智能峰会,致敬全国科技工作者
  3. Android 系统的分区和文件系统(1)- Android 系统源码结构分析
  4. ExcelWriter类:用to_excel时不覆盖之前的Excel表
  5. AR技术之基本的功能(一)
  6. pygame监听鼠标
  7. ez-usb fx3 linux,EZ-USB FX3的eclipse开发环境自动生成img文件
  8. 怎么把pdf转换为word办公文档格式
  9. Python-函数式编程模块itertools、functools、operator
  10. hexo博客更换主题的方法