作者:紫百合1990_950 | 来源:互联网 | 2023-09-24 18:37
图形学笔记-三角形光栅化定义视口变换为什么是三角形?判断一个像素中心是否在三角形内?定义光栅化就是把顶点数据转换为片元的过程。片元中的每一个元素对应于帧缓冲区中的一个像素。光栅化其
图形学笔记-三角形光栅化
- 定义
- 视口变换
- 为什么是三角形?
- 判断一个像素中心是否在三角形内?
定义
光栅化就是把顶点数据转换为片元的过程。片元中的每一个元素对应于帧缓冲区中的一个像素。
光栅化其实是一种将几何图元变为二维图像的过程。该过程包含了两部分的工作。第一部分工作:决定窗口坐标中的哪些整型栅格区域被基本图元占用;第二部分工作:分配一个颜色值和一个深度值到各个区域。光栅化过程产生的是片元。
把物体的数学描述以及与物体相关的颜色信息转换为屏幕上用于对应位置的像素及用于填充像素的颜色,这个过程称为光栅化,这是一个将模拟信号转化为离散信号的过程。
直观的理解光栅化就是把物体画在屏幕上的过程。
光栅化发生在光栅阶段。在几何阶段完成后就进入光栅阶段,它实现图形对象的扫描转换。即根据几何阶段输出的顶点、颜色和纹理坐标,计算出屏幕上每个像素的颜色属性并存入帧缓冲存储器(颜色缓冲存储器)。
光栅化阶段还实现可见性判断,即在颜色缓冲存储器中保留可见的图形图像,这一过程通过深度缓冲存储器来实现。深度缓冲存储器的大小和形状与颜色缓冲存储器一致,其中保存着屏幕上每个像素的一个深度值(z值)。高效的图形系统中,光栅阶段必须在硬件中完成。
屏幕是典型的光栅成像设备、LCD(液晶显示屏)。
视口变换
在经过几何阶段的投影变换,把透视投影的椎体挤压成空间中的正方体,即把远平面和中间的部分挤成近平面的大小,在做一次正交投影,如下。
之后在光栅化中要做的就是视口变换,即从[-1,1]的三次方的立方体到屏幕之间的变换。
对于一个像素可以简单的想象成为一个小的正方形,在这个正方形内的颜色是一样的,正方形的长为1,那么像素中心的位置就在(x+0.5,y+0.5)的位置上。屏幕的坐标范围为(0,0) to (width,higth)。
变换矩阵Mviewport应满足(-1,-1,0,0)* Mviewport=(0,0,0,0)
和(1,1,0,0)* Mviewport=(width,higth,0,0)。得出视口变换矩阵为:
为什么是三角形?
三角形是最基础的多边形、任何多边形都可以拆成三角形、三角形内部一定是平面、定义三角形三个顶点的属性三角形内可以使渐变的即插值。
判断一个像素中心是否在三角形内?
使用右手定则,即为叉乘。对于右手坐标系,x叉乘y得到的结果为+z。右手四指从x方向旋转到y,拇指的方向就是z方向。下面使用叉积判断内和外。
如下图判断Q点在不在三角形内。
只有当 P1P2×P1Q 和 P2P0×P2Q 和P0P1×P0Q 的结果方向一样才能说明这个点在三角形内部。否则其他情况都是在三角形外部。对于边界点可以自己定义。