• [Games101] Lecture 05 Rasterization 1 (Triangles)


    Rasterization 1 (Triangles)

    从规范立方体映射到屏幕

    • 屏幕是像素构成的数组
    • 数组的大小:分辨率
    • 屏幕是一个典型的光栅成像设备
    • 暂时认为像素是成像的最小单位

    屏幕空间的定义

    • 使用整数坐标描述像素
    • 像素范围在 ( 0 , 0 ) (0,0) (0,0) ( w i d t h − 1 , h e i g h t − 1 ) (width-1,height-1) (width1,height1) 范围内
    • 像素 ( x , y ) (x,y) (x,y) 的中心坐标在 ( x + 0.5 , y + 0.5 ) (x+0.5,y+0.5) (x+0.5,y+0.5)
    • 整个屏幕的坐标范围在 ( 0 , 0 ) (0,0) (0,0) ( w i d t h , h e i g h t ) (width,height) (width,height) 之间

    视口变换:将三维空间的立方体映射到屏幕

    • Irrelevant to z z z
    • Transform in x y xy xy plane: [ − 1 , 1 ] 2 [-1, 1]^2 [1,1]2 to [ 0 , w i d t h ] × [ 0 , h e i g h t ] [0, width] \times [0, height] [0,width]×[0,height]

    image-20220811152234740

    • 视口变换矩阵

    M viewport  = ( w i d t h 2 0 0  width  2 0  height  2 0  height  2 0 0 1 0 0 0 0 1 ) M_{\text {viewport }}=\left(

    width200 width 20 height 20 height 200100001" role="presentation" style="position: relative;">width200 width 20 height 20 height 200100001
    \right) Mviewport = 2width00002 height 0000102 width 2 height 01

    Triangles - Fundamental Shape Primitives

    使用三角形作为基本形状的原因

    • 三角形是最基本的多边形
    • 任何其他多边形都能被拆分为三角形
    • 三角形的特有性质
      • 三角形保证其在同一屏幕内 (三点确定一个平面)
      • 通过向量叉积可以轻松定义三角形的内部和外部(见 Lecture 2)
      • 定义三角形顶点的属性可以轻松的在三角形内插值

    Rasterization = Sampling A 2D Indicator Function

    对三角形的光栅化的一个简单方式是对 2D 平面进行采样,采样的方式可以简单的通过函数描述如下

    image-20220811153050430
    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);
    
    • 1
    • 2
    • 3

    采样结束以后,再点亮屏幕中 image[x][y] = 1 的点即可,点的实际坐标是 ( x + 0.5 , y + 0.5 ) (x+0.5, y+0.5) (x+0.5,y+0.5)

    image-20220811153301093

    注意,采样不仅可以在位置上,可以在时间上进行采样,视频就是在时间中采样的一种方式
    image-20220811154346700

    • 加速采样的方法

      • 包围盒

      image-20220811153516740

      • 进行增量三角形遍历:适合又瘦又长的三角形

      image-20220811153503345

  • 相关阅读:
    GPT-人工智能如何改变我们的编码方式
    手把手怎么把照片修复高清,p图小白也能轻松上手
    nvm下载node指定版本后npm不存在
    Unity-UML类图讲解
    无用自动化测试?
    SAP UI5 BaseObject.extend 方法的单步调试
    【Java Web项目】基于WebSocket的Web聊天室
    JAVA计算机毕业设计在线培训课程网站管理系统Mybatis+源码+数据库+lw文档+系统+调试部署
    【C++】list模拟实现
    基于NodeJS实现企业微信机器人推送
  • 原文地址:https://blog.csdn.net/Muyunuu/article/details/126306457