voidsetPixel(int x, int y, const vec3f& color, float depth){ if (x >= 0 && x < width && y >= 0 && y < height) { int index = y * width + x; // 右手坐标系:z值越大表示越远 if (depth > zBuffer[index]) { zBuffer[index] = depth; pixels[index] = color; } } }
3. 三角形渲染优化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
voiddrawTriangle(/* 参数 */){ // 顶点排序和退化检测... // 顶部渲染 for (int y = y0; y <= y1; y++) { // 边界检查 if (y < 0 || y >= height) continue; // 坐标插值 int xa = interpolate(x0, y0, x2, y2, y); int xb = interpolate(x0, y0, x1, y1, y); float za = (y2 != y0) ? z0 + (z2 - z0) * (y - y0) / (y2 - y0) : z0; // ...其余代码 } // 底部渲染类似... }