GAMES101 Lecture 05 Rasterization 1(Triangles)

Lecture 05 Rasterization 1 (Triangles)

什么是屏幕

  • 一组像素
  • 数组的大小:分辨率
  • 一种典型的光栅成像设备

光栅

光栅化 == 画在屏幕离

像素

  • 一个个小方块,每个方块中的颜色不会变化(实际上不准确,这样描述只是方便理解)
  • 颜色是RGB三个值的混合

定义屏幕空间

  • 像素的坐标写成(x,y)形式,且为整数
  • 像素坐标[0,width1]
  • 像素(x,y)中心处于(x+0.5,y+0.5)
  • 一个屏幕覆盖范围从(0,0)(width,height)

*不同API的屏幕空间差异

  • OpenGL左下角为(0,0)x轴向右为正,y轴向上为正
  • DirectX左上角为(0,0)x轴向右为正,y 轴向下为正

标准长方体到屏幕

  • 先不管深度z

  • 变换到xy平面(视口变换):[1,1]2>[0,width]×[0,height]

    Viewport(视口)矩阵

    Mviewport=(width200width20height20height200100001)

光栅化

三角形

  • 最基础的多边形
    • 所有多边形都可以分解成三角形
  • 独特的数型
    • 一定是平面
    • 内外定义明确
    • 只需定义三个顶点,内部的属性可通过线性插值确定

采样

把一个连续函数离散化z

(带入不同值求出函数值)

for (int x = 0; x < xmax; ++x)
	output[x] = f(x);

采样是图形学中的核心思想

对于完全在三角形内部的像素,其颜色确定,对于在三角形边界上的像素,通过其中心点判断是否在三角形内部

inside(t,x,y)={1 Point(x,y) in triangle t0 otherwise

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)

如何确定一个点是否在三角形内(inside函数)?

三叉乘,见Lecture 02

边界问题

如果一个点即落在三角形1,又落在三角形2的边界上?

自己定义:如该点可以既在1上又在2上,既不在1上也不在2上等等

在OpenGL中,落在上边和左边算在内部,在下边和右边不算在内部

需要遍历所有像素吗?

使用轴向包围盒(AABB)

处于包围盒外的像素无需遍历

还有更多的加速方法

针对不同情况,有不同方法

posted @   Telluluu  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示