什么是光栅化?

简单来说,光栅化就是将几何数据经过一系列变换(可以说是连点描边裁剪)最终转换为像素,从而呈现在屏幕上的过程。

光栅化的过程

  1. 读取模型的顶点,3个3个的读,因为要画三角形。
  2. 将3个顶点两两连成线,形成三角形。
  3. 计算屏幕像素点在三角形内还是三角形外。在三角形内部的,就上色(颜色是之前算出来的),在三角形外部的,就不上色。
    (注意:如果一个三角形挡在另一个三角形前面,我们应该只画前面的三角形。所以这里还需要比较一下正准备上色的这个像素点是不是已经上过色了。如果这个像素点已经上过色了,并且它是被Z=1的顶点上的色,而我们正准备上色的这个顶点的Z=2(说明这个顶点被挡在了后面),那么这个顶点就不应该上色,因为它是被挡住的点。)

目前,我们使用两种着色模式:平面着色平滑着色

如果使用平面着色,每个图元的每个像素都被一致的赋予该图元的第一个顶点所指定的颜色,由三个顶点构成的三角形将是红色,原因是第一个顶点是红色的。平面着色容易使物体呈现出“块状”,这是因为各颜色之间没有平滑的过渡。一种更好的着色模式是平滑着色。图元中的各像素值由各顶点的颜色经线性插值得到。

  1. 不断的循环以上三个步骤。

如何判断屏幕的哪些像素点在该三角形内部?

主流的算法有两种:

  1. LEE(Linear Expression Evaluation)
  2. Scan Line

LEE(Linear Expression Evaluation)线性表达式评估

  1. 首先因为屏幕只有二维,所以判断点和边的位置关系的时候可以先不管Z,Z只是用来判断前后遮挡的。
  2. 按照顺时针(或者逆时针)的顺序,连接v1v2, v2v3, v3v1,这样就得到了三条边。
  3. 假定边的头是(X+dX, Y+dY),尾是(X, Y) 计算这3条边的方程:E(x,y) = dY(x-X)-dX(y-Y)
    展开之后是dYx + (-dX)y + (dXY-dYX) = 0 即Ax + By + C =0 其中A = dY, B =
    -dX, C = dXY-dYX 我们把v1v2, v2v3, v3v1三条边的A, B, C都求出来,就得到了3条边的方程E1, E2, E3。
  4. 将屏幕像素点的x,y带入方程,A1x + B1y + C1 = E1,如果点在边上,则E1=0,如果点不在边上,则E1!=0。
  5. 最神奇的地方来了。 如果点(x,y)带入3个方程的结果E1, E2,
    E3同时大于0或者同时小于0,即同号,则该点在三角形内,如果异号,则在三角形外。
  6. 每次获得3个点之后,取出其中的min_x, max_x, min_y,
    max_y构成的四边形,将屏幕像素点(x,y)中,在该范围内的点取出,带入LEE公式比较结果。
    如果该点在三角形内,并且没有被遮挡(需要对Z进行判断),则上色,否则不上色。不断迭代,直到所有的三角形都被处理完成,3D模型也画到了屏幕上。

需要注意的地方:

由于多个三角形的边和边是互相挨着的,所以如果直接按上面的方法画,会有很多边重复画了2遍,为了提高渲染效率,我们需要保证每条边只画一遍。 只画三角形的左边和上边。

光栅化(Rasterization)相关推荐

  1. 光栅化 Rasterization

    文章目录 1 光栅化 Rasterization 1.1 视口变换 viewport (正则立方体 to 屏幕) 1.2 像素化 1.2.1 三角形构成图像 1.2.2 三角形离散化 1.2.2.1 ...

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

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

  3. GAMES101笔记_Lec05~06_光栅化 Rasterization

    1 视口变换-从裁剪空间到屏幕空间 Canonical Cube to Screen 1.1 什么是屏幕 What is a screen? 在图形学中,抽象的认为屏幕是一个二维数组,数组中每一个元素 ...

  4. 计算机图形学【GAMES-101】2、光栅化(反走样、傅里叶变换、卷积)

    快速跳转: 1.矩阵变换原理Transform(旋转.位移.缩放.正交投影.透视投影) 2.光栅化(反走样.傅里叶变换.卷积) 3.着色计算(深度缓存.着色模型.着色频率) 4.纹理映射(重心坐标插值 ...

  5. 渲染 光栅化 光线追踪 着色器 投影视图模型矩阵 未来VR关键技术

    渲染介绍得非常详细易懂(强烈建议观看):https://www.zhihu.com/question/31971846/answer/36727962 https://www.zhihu.com/qu ...

  6. 4、计算机图形学——光栅化、抗锯齿、画家算法和深度缓冲算法(Z-buffer)

    一.光栅化(Rasterization) 1.1.概念 光栅raster这个词就是德语中屏幕的意思,光栅化的意思就是将图像绘制在屏幕上进行显示. 1.2.三角形光栅化过程简述 首先,为什么要以三角形的 ...

  7. 谈谈Hybird3D中的光栅化优化

    看到空明流转分享了他的SALVIA 0.5.2优化谈,我也来说说Hybird3D中和光栅化相关的一些优化技术. Hybird3D的设计目标是打造一款准实时的软件高质量渲染器,采用了光栅化和光线跟踪混合 ...

  8. 用C#实现一个简易的软件光栅化渲染器

    这是一个用C#+winform实现的软件光栅化渲染器,今天拿出来与大家分享一下,希望能起到抛砖引玉的作用,给新人一点启发(结构比较简单,注释比较详细^_^),也欢迎司机们拍砖指点和交流~ 目的: 巩固 ...

  9. 图形学基础笔记II:多边形光栅化算法和显卡三角形光栅算法

    为什么三角形就够了 实际对于 3D 来说肯定全是基于三角形的 geometry - OpenGL: Is it more efficient to use GL_QUADS or GL_TRIANGL ...

最新文章

  1. TIOBE 1 月编程语言:Python 摘得 2020 年度编程语言!
  2. iptables_默认规则
  3. 【spring boot】url中传递session id
  4. webpack 合并压缩_webpack的运用
  5. android放在上个元素的左边代码,控件悬浮在某个控件之上 Android五大布局方式——相对布局(RelativeLayout)属性详解...
  6. JDK源码解析之 java.lang.Integer
  7. linux php imagick 扩展安装,linux下为php5.3安装Imagick扩展
  8. 做数据可视化有什么好
  9. 转:Scrapy(爬虫框架)入门教程
  10. GBase 8a MPP Cluster管理工具---“GBaseDataStudio”
  11. 银行卡号识别(CTPN、Densenet、CTC)附数据集
  12. 南京工程学院 DSP期末复习
  13. 数据分析最常用的excel函数公式大全
  14. SPSS中如何进行快速聚类分析
  15. AVC/HEVC/VVC/AV1 块划分、帧内预测过程及预测模式编码
  16. 叮咚智能音箱使用体验:好看的皮囊千篇一律,有趣的灵魂万里挑一
  17. pppd详解_Linux 使用pppd和ppp程序进行3G/4G拨号
  18. idea复制项目导致sources root复用了另一个项目
  19. component组件
  20. 迈向更小的.NET 4-有关客户端配置文件和下载.NET的详细信息

热门文章

  1. 一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。 编写一个函数找出这两个只出现一次的数字。
  2. python分支结构——if语句
  3. PROFIBUS总线光纤模块在矿场设备的应用案例
  4. 怎么为图片添加流烟烟雾?可以使用25种流烟烟雾效果PS笔刷
  5. 聊聊Mysql索引和redis跳表
  6. 全球最好的外贸B2B平台有哪些
  7. 砂.随笔.十.大中午冒雨翘班 感慨一下,福州的天气真是变幻莫测
  8. Python 画机器猫
  9. epoll的具体实现与epoll线程安全,互斥锁,自旋锁,CAS,原子操作
  10. Mac快捷键大全(转)