跳至正文

Rasterization 1(Triangles)

上节课 观测:视图/投影:正交/透视

光栅化:怎么画的问题

问:如何定义视锥?

给近平面定义宽度和高度

定义一个宽高比

还需要定义一个概念 就是视角

垂直可视角度 水平的可视角度是可以相互转化的

MVP?

立方体该画在屏幕上

那屏幕的概念是什么?

抽象认为是一个二维数组

数组中的每一个元素是一个像素

屏幕就是一个典型的光栅成像设备

光栅化就是把东西画到屏幕上的过程

注:像素在这门课里认为是一个一个的方块

颜色不会有变化 当然这是不对的 实际上远远复杂

颜色是RGB的混合 三个不同数字分别描述红绿蓝三个颜色的强度

屏幕空间:

在屏幕上建立一个坐标系

像素都可以用(x,y)来表示

范围从(0,0)(width-1,height-1)

但(x,y)实际中心是(x+0.5,y+0.5)

整个屏幕就覆盖了(0,0)(width,height)

映射到屏幕上会有一个问题 z方向的值呢?

这里暂时先不管

可进行绘制的机器可不仅仅是屏幕

不同的光栅显示设备:示波器(和早期显示器的成像原理一样)

通过扫描来确定点 但是效率不高 所以出现了隔行扫描

显示器:显存或者内存中的一块区域映射到屏幕上

然后告诉显示器该显示什么

平板显示设备LCD 也就是液晶显示器

发光二极管

墨水瓶

回归正题

多变形变换到屏幕空间上

实际上是把多变形拆成不同的像素

三角形的优点:
最基础的多边形 其它多边形都能拆成三角形

三角形三个点内构成平面 不可能出现两个平面

三角形的内部外部定义的很清楚

三角形内任何一个点变成不同的顶点 属性的差值有渐变关系

三角形如何变成真正的像素呢?

一个简单的做法:采样

给你一个连续的函数 在不同的地方问值 这就是采样

这里说的采样是利用像素的中心 对屏幕进行采样

也就是要算出某一个函数在不同像素中心的值是多少

判断是不是在三角形内

那么这个函数要怎么实现呢?

P1 P2 叉乘 P1Q 可以告诉我们QP1 P2的左侧还是右侧

同理其它两条边也是 按顺时针或逆时针依次比较

如果全是同侧 那就判定Q在三角形里面 反之就在外面

那如果有一个点正好在三角形边界呢?

要么不做处理 要么特殊处理 是可以自己定义的

图形语言可能规定好了

蓝色区域是三角形的包围盒 是三角形绝对不会覆盖到的区域

也就是不需要做光栅化的地方(AABB

每一行都只找他的最左和最右

实际上的光栅化

bayer pattern 这里的像素就不是一个方块

特别是三星的 绿色的点比红色和蓝色都要多

这是因为人眼对绿色特别敏感

减色系统

最后遗留下的问题:

对于屏幕中间不同像素的中间点

一个三角形会变成像这样 并不是平滑的三角形

锯齿 就是光栅化图形学中致力于解决的问题

原因在于像素本身也有大小 同时采样率是不够高的

出现了”走样”问题

所以抗锯齿应运而生

发表评论

您的电子邮箱地址不会被公开。