From 5a1f559ed936ef445153dcd6a2cc3d7714919db1 Mon Sep 17 00:00:00 2001 From: Jesse Buhagiar Date: Mon, 10 Jan 2022 00:41:36 +1100 Subject: [PATCH] LibSoftGPU: Transform normals during T&L stage As well as Vertex Positions, the normals also need to be transformed into eye-space so that lighting can be applied correctly. --- Userland/Libraries/LibSoftGPU/Device.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Userland/Libraries/LibSoftGPU/Device.cpp b/Userland/Libraries/LibSoftGPU/Device.cpp index d15ea2a6ef..9f87a50508 100644 --- a/Userland/Libraries/LibSoftGPU/Device.cpp +++ b/Userland/Libraries/LibSoftGPU/Device.cpp @@ -636,6 +636,11 @@ void Device::draw_primitives(PrimitiveType primitive_type, FloatMatrix4x4 const& triangle.vertices[1].eye_coordinates = model_view_transform * triangle.vertices[1].position; triangle.vertices[2].eye_coordinates = model_view_transform * triangle.vertices[2].position; + // Transform the vertex normals into eye-space + triangle.vertices[0].normal = transform_direction(model_view_transform, triangle.vertices[0].normal); + triangle.vertices[1].normal = transform_direction(model_view_transform, triangle.vertices[1].normal); + triangle.vertices[2].normal = transform_direction(model_view_transform, triangle.vertices[2].normal); + // Transform eye coordinates into clip coordinates using the projection transform triangle.vertices[0].clip_coordinates = projection_transform * triangle.vertices[0].eye_coordinates; triangle.vertices[1].clip_coordinates = projection_transform * triangle.vertices[1].eye_coordinates;