当前位置: 首页 > article >正文

【GAMES101】05 Rasterization(Triangles)

光栅化过程:将一系列变换后的三角形转换为像素的过程。

三角形在图形学中得到很多的应用。

  • 最基础的多边形(边数最少)。
  • 任何多边形都可以拆成三角形。
  • 性质:三角形内部一定是平面的。三角形内外部定义非常清楚。
  • 定义三个顶点后,三角形内可以插值。

光栅化中最重要的一步:判断三角形与一个像素(中心点)的位置关系

采样:

  • 一个函数离散化的过程。
  • 采样可以是一维,二维,三维的。光栅化属于二维采样。

光栅化的方法:

给一个三角形,来判断像素中心是否在三角形内。

 三角形转换为像素的过程,实际上就是判断像素跟三角形的关系。更确切地说,像素的中心点是否在三角形内。而一个点是否在三角形内,就可以使用向量的叉积方式判断。

for(int x = 0; x < xMax; ++x)
    for(int y = 0; y < yMax; ++y)
         image[x][y] = inside(tri, x + 0.5, y + 0.5);

通过上面的函数,我们就知道了坐标点(x, y)是否在在三角形内。这个求解的过程,我们一般将它称为采样(像素中心对屏幕的采样)。所以,采样通俗的理解就是给定一个线性函数,通过输入一些值,最后获得输出值的过程。

从上面的for循环,我们知道基本上是遍历了屏幕上的每个像素。在这里就可以做一个简单的优化。先判断是否在三角形所组成的长方形内(既取三角形的三个顶点横坐标和纵坐标的最小最大值)。我们就可以只判断长方形内的像素。

蓝色区域表示三角形的包围盒,只有在这个区域内的像素,才去做上面的for循环;即不需要每一个像素都从(0-width/height)走一遍)。

 经过光栅化的过程,可以获得以下的结果。但是,以上的结果,明显比原本的三角形差的比较远,而且斜边不规则(这就是我们说的锯齿)。


http://www.kler.cn/a/17506.html

相关文章:

  • SpringBoot(八)使用AES库对字符串进行加密解密
  • Gsensor加速度传感器数据异常及概率性卡死
  • 去地面算法——depth_clustering算法调试(1)
  • Stored procedures in PostgreSQL
  • 单例模式详解:如何优雅地实现线程安全的单例
  • 【贪心算法】No.1---贪心算法(1)
  • 【初学人工智能原理】【4】梯度下降和反向传播:能改(下)
  • 算法设计与分析期末复习
  • 判断密码判断密码
  • 删除游戏-类似打家劫舍
  • Canvas和SVG有什么区别?
  • java基础知识——26.反射
  • 架构集群部署
  • 深度学习 -- PyTorch学习 torchvision工具学习 Transforms模块 Normalize用法
  • Db2 hardcode一个CTE
  • 科研人必看入门攻略(收藏版)
  • B017_群函数篇
  • ( 数组和矩阵) 287. 寻找重复数 ——【Leetcode每日一题】
  • Python JSON
  • 网络安全合规-数据安全风险评估
  • 【数据结构】图笔记
  • 【泛函分析】区间上的单调有界函数必存在左右极限,间断点必为第一类间断点
  • 抖音营销策略:新手如何利用抖音提高品牌曝光度
  • 多媒体API
  • Mysql 设置 sort_buffer_size
  • Lenovo MORFFHL鼠标对码教程