From 36c409115a7d940b62949b9450d076527b6d10de Mon Sep 17 00:00:00 2001 From: Nico de Poel Date: Fri, 20 Jan 2023 10:54:31 +0100 Subject: [PATCH] Use per-face vertex lighting for improved geometry definition and less light leaking between sharp-angled surfaces. --- test.ps1bsp | Bin 162995 -> 162995 bytes world.c | 4 +++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/test.ps1bsp b/test.ps1bsp index bca53a575b7726a107df0187f40d4308deb08381..3173adb3d2fd5829fdeea41252874a56d1c3b9da 100755 GIT binary patch delta 29016 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 QjAhTplanes[face->planeId]; + // NOTE: this value could be REALLY useful for determining the tessellation subdivisions. It has camera distance *and* angle in it. + // Just include the face size/area for an approximate screen size. Maybe also separate x/y/z for angle-dependent tessellation. short dot = world_planeDot(&cam_vec, plane); if ((dot >= 0) ^ face->side) return; @@ -244,7 +246,7 @@ static void world_drawface(const world_t *world, const ps1bsp_face_t *face) { const ps1bsp_vertex_t *vert = &world->vertices[faceVertex->index]; vecs[vertIdx] = *((SVECTOR*)vert); - vecs[vertIdx].pad = vert->baseLight; + vecs[vertIdx].pad = faceVertex->light; } if (face->numFaceVertices == 3) // Special case: draw single triangles using the simplest method