ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

TinyRenderer的知识点梳理

2026/8/6 18:04:44 拓冰建站 浏览量
TinyRenderer的知识点梳理

用C++实现的初级光栅器

在学习GAMES101后,跟着完成一个Github上的一个tinyRenderer的项目。这篇随笔简要的介绍了都有什么知识点,没有具体的数学实现,只是我在复习时的脉络梳理。作为我的第一篇博客,写的不好请原谅,并希望您加以给予一些修改意见,我会认真倾听并思考,感谢。

在Visual Studio 创建项目

Bresenham算法

A,B两点
连接A,B

Bounding Box包围盒

取最小,最大的x,y轴坐标进行包围盒
三角形三个点A,B,C
Cross(PA,PB)<0 || Cross(PB,PC)<0 || Cross(PC,PA)<0 则在三角形外

重心坐标

矩阵算

Z-Buffer深度缓冲

将每个三角形进行遍历,在每个包围盒中更新z-buffer的深度值,更新为更小深度的值

仿射变换

  1. 线性变换
    1. 旋转
    2. 放缩
    3. 错切
  2. 平移

视图变换+透视变换+视口变换

矩阵算

Phong反射模型

环境光+漫反射+镜面反射

平滑着色, 法线贴图,漫反射贴图,镜面反射贴图

取三角形的三个顶点,根据α,β,γ占比分别乘x,

  1. x=法线,实现平滑着色
  2. x=uv坐标
    1. 实现纹理--法线贴图 _ _nm
    2. 实现颜色--漫反射贴图 _ _diffuse
    3. 实现高光--镜面反射贴图 _ _spec

切线空间法线贴图

法线贴图->切线空间法线贴图 _ _ nm_tangent
法线贴图,模型不能进行旋转等操作
切线空间法线贴图可以

法线贴图的法线(世界空间) 转换成 切线空间法线贴图的法线(局部(切线)空间)

阴影贴图

  1. 在光源处生成阴影贴图
  2. 应用阴影
    1. 计算该像素在光源视角下的位置
    2. 采样阴影贴图中的深度
    3. 比较:当前深度 > 贴图深度?→ 在阴影中
    4. 应用阴影效果(变暗)

Sobel边缘检测

卷积,大于敏感度阈值,被认为是边界,涂黑

AO环境光遮蔽

在模型周围一个球内取随机位置,定为光源位置
在这些位置这些位置的阴影贴图,取平均阴影

SSAO屏幕空间环境光遮蔽

先光栅化一遍
再遍历一遍每个像素,在每个像素目前对应的坐标周围进行采样,通过采样点的深度与采样点投影到平面后的像素的深度进行比较。若投影到屏幕的采样点的深度 < 采样点的深度,则被遮挡,被遮挡数多,则变暗
生成白模