From 337406c03f4950afaa9cb2df820bcc9b8b269b5a Mon Sep 17 00:00:00 2001 From: Nico de Poel Date: Tue, 17 Jan 2023 15:15:30 +0100 Subject: [PATCH] Use the node and leaf data to traverse the entire BSP tree and draw all attached faces. This already gets rid of all the collision volumes that were being drawn before. --- ps1bsp.h | 9 ++++++--- test.ps1bsp | Bin 115982 -> 120050 bytes world.c | 51 ++++++++++++++++++++++++++++++++++++++------------- 3 files changed, 44 insertions(+), 16 deletions(-) diff --git a/ps1bsp.h b/ps1bsp.h index eead86a..a8ae1a0 100755 --- a/ps1bsp.h +++ b/ps1bsp.h @@ -85,10 +85,13 @@ typedef struct typedef struct { int planeId; - u_short front; - u_short back; + short front; + short back; + // TODO: add bounding box for frustum culling - // TODO: not sure if face list is needed here + + u_short firstFace; + u_short numFaces; } ps1bsp_node_t; typedef struct diff --git a/test.ps1bsp b/test.ps1bsp index 3673abfd76224eb7ea06bf154d80966ee01f9c9c..cc301685539f60ab88b4bd2521c11998a4280bca 100755 GIT binary patch delta 12329 zcmX}yb>J1n7Qpd|U(nrM(ny1dNOyO4cM7P$r4dv>kPhh*EF@G^R4@T4=@dzkZn!h= zd-mS<^ZoHYbN0-c+1cIMd+(2#Gve=UjGtXF#pdElne|%T%&gR{-4n`fE2j&N3MrLd zX~hxs3NrjpDXU7Wj4B!buT+dmtn#Yl{J&D($Ep%!$Kp6zC2?F3k5{E|JWfQsG)@%6 zoiBqE2Tr2O5|uhhRccjI1N+iP0`diEz=*!P-$>FPHQNWNQ7DOmw&kX%ghjp863SNRKnA zlIjhd0cTcu)JV=ZBhI3-tG9_~!ddAt2D6kXn;MI=;3o_)E}D}=<>vGvIXTrMKORTM z%B3dYtkO5+ANz^_Z}^9P63)hfyeglX%)pTj5BzlEGKrT|AvFU>2F|bE#WJA+OyfN) zXIT)xk7Yvlnb6E=eqmKi&BBqIMbvB@k`6`b@BxirM*g0kgQe)ps<@hqCFd@MK8(5q z`STL;@A&!A_-%3)M12b{ z9$bYZzf(Uc7f4lAwbUQXCoc!8sp{%5Wg<7=O@EZm5!X=1iRUAyCY?{x`6cZAzy1`? zk89I9jSJv9_zW%>4rd-9|kt%GaX zi@4SQU%Ash7Rxp6qx!0NEE76K*Tk3|knDacDSc(1IO#+ERWcfK=MPY$RB|lO{Rux% zrNHti4pN7FN-URPuo|LLQK$qyPSG^POX8vI5^0Ic$_-=pNRLb5;cA4+7|lOMerEDZ z6aUK}^;sm&{ilv_AR7my=wX~4%SLn%=fGv~o7~4abu3$`Qg5kMDxZ$y@lk9@V^v{o zRe3C1QZXIFMlSx-m!xk6JdRc=9naGv`|VOyK}UAj@oYn(YRsZy(BXiuk>H7{mQKNA zrPL(0j20BCgeR+aR7?Cio}zyDt#D<$-%nMoaTUDJPg8AhRqXvAzAdhXr>i}_9j=aN zsP|QSOq~!r*e|{VjT#*IjXkU*u7ZE%>^tF_c&6IxJL6i|`=5OmEboHZ>TBN>*Tz4w zg>}Pq@ErAx?~d!@AN^d_gVm~sKUDKnKTfhf_WlPyK(qfhpfO)9Q3E+3H`)TVSPjMv z@j|so4Nd5<+YhH`BjVrt@BD~___ux}@kr5KeiW9=u}tmsqgi&@e7s-It48w(EA
2XYb@7tEqmTfohW+w)~Wf# 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 delta 8228 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 zXWbaseLight; } - if (face->numFaceVertices == 3) + if (face->numFaceVertices == 3) // Special case: draw single triangles using the simplest method drawface_triangle_fan(face, vecs); else drawface_quad_strip(face, vecs); } -void world_draw(const world_t *world) +static void world_drawnode(const world_t *world, short nodeIdx, char *scratchptr) { - int p; - - // The world doesn't move, so we just set the camera view-projection matrix - gte_SetRotMatrix(&vp_matrix); - gte_SetTransMatrix(&vp_matrix); - u_long frameNum = time_getFrameNumber(); - const ps1bsp_leaf_t *leaf = &world->leaves[0]; - for (u_short leafIdx = 0; leafIdx < world->numLeaves; ++leafIdx, ++leaf) + if (nodeIdx < 0) // Leaf node { - u_short *leafFace = &world->leafFaces[leaf->firstLeafFace]; + const ps1bsp_leaf_t *leaf = &world->leaves[~nodeIdx]; + const u_short *leafFace = &world->leafFaces[leaf->firstLeafFace]; + for (u_short leafFaceIdx = 0; leafFaceIdx < leaf->numLeafFaces; ++leafFaceIdx, ++leafFace) { ps1bsp_face_t *face = &world->faces[*leafFace]; - // Check if we've already drawn this face + // Check if we've already drawn this face on the current frame if (face->drawFrame == frameNum) continue; - world_drawface(world, face, scratchpad); + world_drawface(world, face, scratchptr); face->drawFrame = frameNum; } + + return; } + + const ps1bsp_node_t *node = &world->nodes[nodeIdx]; + + // Still not sure why we have faces attached to nodes... Try to remove this and see what happens + ps1bsp_face_t *face = &world->faces[node->firstFace]; + for (u_short faceIdx = 0; faceIdx < node->numFaces; ++faceIdx, ++face) + { + // Check if we've already drawn this face on the current frame + if (face->drawFrame == frameNum) + continue; + + world_drawface(world, face, scratchptr); + face->drawFrame = frameNum; + } + + world_drawnode(world, node->front, scratchptr); + world_drawnode(world, node->back, scratchptr); +} + +void world_draw(const world_t *world) +{ + int p; + + // The world doesn't move, so we just set the camera view-projection matrix + gte_SetRotMatrix(&vp_matrix); + gte_SetTransMatrix(&vp_matrix); + + world_drawnode(world, 0, scratchpad); }