https://haqr.eu/tinyrenderer/rasterization/

看他的代码是没有什么价值的,这里已经给了一个 Idea, 我们就是从图片底部一行行往上刷。把三角形边框和内部涂色。 June 23, 2026 6:11 AM (GMT+8) (计时开始,看一下一个小时能不能自己实现出来) (June 23, 2026 6:41 AM (GMT+8) OK,只用了 30 分钟)
- 对所有顶点按照 y 排序,这样就知道扫描线的范围了,我们不需要从图片底部扫到图片顶部,而是从这个三角形顶点的
y_min到y_max- 找到涂色扫描线的左右端点,然后调用
draw_line涂色。 这是单个三角形,所以只有一个线段。- 左右
x1x2其实非常容易求得,使用相似三角形,差值就可以了。或者这样理解,y变化一点,那么对应的x变化多少,直线斜率就能体现这种关系。



简而言之,旧式的扫描线方法就是一个三角形,从下往上一行行从左向右刷色。
前面的过时的扫描线方法虽然实现起来并不复杂,代码行数不是很多。但是扫描线的实现细节还是繁琐的,先对 y 排序,然后又分上下部分,找左右端点之类。
更现代的做法是先确定 aabb (轴对齐的包围盒),然后判断包围盒内的点是否在三角形内部。这两点都是非常容易做到的。
triangle(vec2 points[3]) {
vec2 bbox[2] = find_bounding_box(points);
for (each pixel in the bounding box) {
if (inside(points, pixel)) {
put_pixel(pixel);
}
}
}
这里就很能感受到和我们上面的扫描线做法的区分,一个很 “CPU”, 一个很 “GPU”。

