Skip to content

Commit 7741a9e

Browse files
authored
Update rasterizer.h
1 parent 476d3df commit 7741a9e

1 file changed

Lines changed: 10 additions & 17 deletions

File tree

src/renderer/rasterizer/rasterizer.h

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ 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;
146+
// if (!(inside(pa_clip) && inside(pb_clip) && inside(pc_clip))) continue;
147147

148148
// Деление на w => NDC [-1,1] [web:12]
149149
float inv_wa = 1.f / pa_clip.w;
@@ -198,23 +198,16 @@ namespace cg::renderer
198198
// Depth test [web:44]
199199
if (depth_test(z, size_t(x), size_t(y))) {
200200
// Вызов pixel_shader: он сам вернёт cg::color; конверсия в RT — снаружи/при записи
201-
cg::color out = pixel_shader(
202-
// Можно выбрать один из вершинных атрибутов или интерполировать (минимум — проброс одного)
203-
// Для простоты используем барицентрическую интерполяцию ambient/прочих полей VB, если нужно расширить.
204-
VB{
205-
// Предполагается VB с полями position, normal, texcoord, ambient
206-
fw0 * va_ps.position + fw1 * vb_ps.position + fw2 * vc_ps.position,
207-
fw0 * va_ps.normal + fw1 * vb_ps.normal + fw2 * vc_ps.normal,
208-
fw0 * va_ps.texcoord + fw1 * vb_ps.texcoord,
209-
fw0 * va_ps.ambient + fw1 * vb_ps.ambient + fw2 * vc_ps.ambient
210-
},
211-
z
212-
);
213-
214-
// Запись цвета в RT; предполагаем RT — cg::unsigned_color [web:41]
201+
// Защита от некорректной глубины
202+
if (!std::isfinite(z)) continue;
203+
z = std::min(1.f, std::max(-1.f, z));
204+
205+
// Простой цветовой градиент по барицентрикам, чтобы визуально увидеть треугольник
206+
float3 rgb = float3{ fw0, fw1, fw2 };
207+
cg::color out = cg::color::from_float3(rgb);
208+
209+
// Запись цвета и глубины
215210
render_target->item(size_t(x), size_t(y)) = RT::from_float3(out.to_float3());
216-
217-
// Обновление z-буфера [web:44]
218211
if (depth_buffer) depth_buffer->item(size_t(x), size_t(y)) = z;
219212
}
220213
}

0 commit comments

Comments
 (0)