Skip to content

Commit dbce60b

Browse files
authored
Update rasterizer.h
1 parent 3505130 commit dbce60b

1 file changed

Lines changed: 5 additions & 6 deletions

File tree

src/renderer/rasterizer/rasterizer.h

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,8 @@ namespace cg::renderer
143143
float w = p.w;
144144
return (-w <= p.x && p.x <= w) && (-w <= p.y && p.y <= w) && (-w <= p.z && p.z <= w);
145145
};
146-
// if (!(inside(pa_clip) && inside(pb_clip) && inside(pc_clip))) continue;
147-
146+
// Мягкое отсечение: отбрасываем только треугольники целиком за камерой (все w <= 0)
147+
if (pa_clip.w <= 0.f && pb_clip.w <= 0.f && pc_clip.w <= 0.f) continue;
148148
// Деление на w => NDC [-1,1] [web:12]
149149
float inv_wa = 1.f / pa_clip.w;
150150
float inv_wb = 1.f / pb_clip.w;
@@ -194,13 +194,12 @@ namespace cg::renderer
194194

195195
// Интерполяция глубины в NDC (линейная по экрану) [web:24]
196196
float z = fw0 * pa_ndc.z + fw1 * pb_ndc.z + fw2 * pc_ndc.z;
197+
if (!std::isfinite(z)) continue;
198+
z = std::min(1.f, std::max(-1.f, z));
199+
197200

198201
// Depth test [web:44]
199202
if (depth_test(z, size_t(x), size_t(y))) {
200-
// Вызов pixel_shader: он сам вернёт cg::color; конверсия в RT — снаружи/при записи
201-
// Защита от некорректной глубины
202-
if (!std::isfinite(z)) continue;
203-
z = std::min(1.f, std::max(-1.f, z));
204203

205204
// Простой цветовой градиент по барицентрикам, чтобы визуально увидеть треугольник
206205
float3 rgb = float3{ fw0, fw1, fw2 };

0 commit comments

Comments
 (0)