GAMES101 Lecture 05 Rasterization 1(Triangles)
1.GAMES101 Lecture 03 & Lecture 04 Transform
2.GAMES101 Lecture 05 Rasterization 1(Triangles)
3.GAMES101 Lecture 06 Rasterization 2 (Antialiasing and Z-Buffering)4.GAMES101 Lecture 07 Shading 1 (Illumination, Shading and Graphic Pipeline)5.GAMES101 Lecture 08 Shading 2 (Shading, Pipeline and Texture Mapping)6.GAMES101 Lecture 09 Shading 3 (Texture Mapping cont7.GAMES101 Lecture 10 Geometry 1 (Introduction)8.GAMES101 Lecture 11 Geometry 2 (Curves and Surfaces)Lecture 05 Rasterization 1 (Triangles)
什么是屏幕
- 一组像素
- 数组的大小:分辨率
- 一种典型的光栅成像设备
光栅
光栅化 == 画在屏幕离
像素
- 一个个小方块,每个方块中的颜色不会变化(实际上不准确,这样描述只是方便理解)
- 颜色是RGB三个值的混合
定义屏幕空间
- 像素的坐标写成
形式,且为整数 - 像素坐标
- 像素
中心处于 - 一个屏幕覆盖范围从
*不同API的屏幕空间差异
- OpenGL左下角为
, 轴向右为正, 轴向上为正 - DirectX左上角为
, 轴向右为正, 轴向下为正
标准长方体到屏幕
-
先不管深度
-
变换到
平面(视口变换):Viewport(视口)矩阵
光栅化
三角形
- 最基础的多边形
- 所有多边形都可以分解成三角形
- 独特的数型
- 一定是平面
- 内外定义明确
- 只需定义三个顶点,内部的属性可通过线性插值确定
采样
把一个连续函数离散化z
(带入不同值求出函数值)
for (int x = 0; x < xmax; ++x)
output[x] = f(x);
采样是图形学中的核心思想
对于完全在三角形内部的像素,其颜色确定,对于在三角形边界上的像素,通过其中心点判断是否在三角形内部
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)
处于包围盒外的像素无需遍历
还有更多的加速方法
针对不同情况,有不同方法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!