【GAMES101笔记速查——Lecture 05 Rasterization (Triangles)】

目录

1. 光栅化(Rasterization)

1.1 光栅化相关的定义

1.1.1什么是屏幕?

        1.1.2什么是光栅?

        1.1.3什么是像素?

1.1.4什么是屏幕空间?

1.2 如何实现光栅化?

1.1.1视口变换(Viewport transformation)——将三维的立方体转化到二维平面

1.1.2栅格化三角形形成像素

1.3 绘图工具(Drawing Machines)

1.4 不同的光栅显示设备(Different raster displays)

1.4.1示波器

1.4.2现在的显示设备

(1) LCD (Liquid Crystal Display) 液晶显示器

(2) LED (Light emitting diode) 发光二极管阵列

(3)Electrophoretic (Electronic Ink) Display电泳(电子墨水)显示

1.5栅格化三角形 (Rasterizing a triangle)

1.5.1 为什么选择三角形作为基础图形

1.5.2 如何用像素点近似表示三角形

1.6实际屏幕的光栅化(Rasterization on Real Displays)

1.7 光栅化存在的问题


1. 光栅化(Rasterization)

经过之前提到的模型变换M、视图变换V、投影变换P之后,我们将要观察的景象都放在了 [-1,1]3这样一个经典的立方体中。

      

接下来,我们要做的就是将这个立方体中的东西画在屏幕上

1.1 光栅化相关的定义

1.1.1什么是屏幕

·像素数组

·数组的大小:分辨率

·一种经典的光栅成像设备

        1.1.2什么是光栅

       ·德语中,光栅的意思就是屏幕

       ·我们将光栅化定义为将东西画在屏幕上的过程

        1.1.3什么是像素

       ·有一种说法,像素Pixel是”picture element(图像元素)”的简写形式。

       ·现在比较形象但不太准确的理解:像素是具有统一颜色的小方块

       ·颜色是由红、绿、蓝混合得到。rgb颜色系统

1.1.4什么是屏幕空间

·在屏幕上建立二维坐标系

·像素的索引为(x, y)的形式,其中x和y都是整数

·像素的索引从(0,0)到(width - 1, height - 1)

·像素(x, y)的中心点其实是(x+0.5, y +0.5)

·屏幕空间覆盖范围从(0,0)到(width,height)

      

1.2 如何实现光栅化?

1.1.1视口变换(Viewport transformation)——将三维的立方体转化到二维平面

·与z无关,忽略z坐标

·在x-y平面上变换:[- 1,1]2 到 [0,width] × [0,height]

·先将x,y的[-1,1]拉伸到[-width/2,width/2]\ [-height /2,height /2]

·再以中心为目标平移,变换矩阵如下:

1.1.2栅格化三角形形成像素

顶点数据都是需要输入的,程序将顶点按布局连接起来就是逻辑三角形

具体步骤见1.5

1.3 绘图工具(Drawing Machines)

数控Sharpie绘图机、激光切割机

 

1.4 不同的光栅显示设备(Different raster displays)

1.4.1示波器

示波器的工作原理与早期电脑显示器原理基本相同,使用阴极射线管。

人们为了偷懒,发明出“隔行扫描”的技术,骗过了眼睛,节约了资源。1080p与1080i的区别也在于此(p是逐行扫描)。

1.4.2现在的显示设备

帧缓冲区:栅格显示的内存

   将这块内存中的数据映射到屏幕上即可。

(1) LCD (Liquid Crystal Display) 液晶显示器

(2) LED (Light emitting diode) 发光二极管阵列

(3)Electrophoretic (Electronic Ink) Display电泳(电子墨水)显示

1.5栅格化三角形 (Rasterizing a triangle)

                          

1.5.1 为什么选择三角形作为基础图形

因为三角形具有很多的优点:

·三角形是最基础的多边形

·三角形可以很好的分解其他多边形

·三角形内部一定是平面的

·三角形上顶点插值的定义有良好的方法(重心插值)

1.5.2 如何用像素点近似表示三角形

·往往考虑像素中心点与三角形的位置关系

  1. 简单方法:采样(Sampling)

 

 

·为确定每个像素中心是否在三角形内,我们在屏幕空间定义一个inside函数

·若像素中心在三角形内,则函数值为1;反之,函数值为0。

·inside函数的实现可以使用三次向量叉积

       eg:  P1P2 x P1Q结果为正;(Q在P1P2左侧)

                P0P1 x P0Q结果为正;(Q在P0P1左侧)

                P2P0 x P2Q结果为负。(Q在P2P0右侧)

                按照顶点顺序进行三次叉积,计算结果的方向并不一致

                故,Q点在三角形外部

·通过遍历整个屏幕可以实现光栅化

·光栅化过程需要检查屏幕上所有像素吗?不,可以使用包围盒Bounding Box优化。

·只要选择三角形顶点中x的最大最小值、y的最大最小值,在这个范围内遍历即可

·更快的解决方案是增量三角形遍历Incremental Triangle Traversal,每行都确定边界像素。

1.6实际屏幕的光栅化(Rasterization on Real Displays)

1.7 光栅化存在的问题

锯齿

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值