From 129177f4a9098872fde9447d6b4adcbe398be84a Mon Sep 17 00:00:00 2001 From: havoc Date: Sun, 17 Oct 2004 11:51:38 +0000 Subject: [PATCH] snap curve vertices to solve some finicky collision problems and probably also makes things look a little better where two curves meet in some cases git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@4662 d7cf8633-e32d-0410-b094-e92efae38249 --- model_brush.c | 3 +++ model_shared.c | 8 ++++++++ model_shared.h | 1 + 3 files changed, 12 insertions(+) diff --git a/model_brush.c b/model_brush.c index 86d65ea4..91dd5a04 100644 --- a/model_brush.c +++ b/model_brush.c @@ -4302,6 +4302,9 @@ static void Mod_Q3BSP_LoadFaces(lump_t *l) Q3PatchTesselateFloat(3, sizeof(float[3]), out->data_collisionvertex3f, patchsize[0], patchsize[1], sizeof(float[3]), originalvertex3f, xtess, ytess); Q3PatchTriangleElements(out->data_collisionelement3i, finalwidth, finalheight); + Mod_SnapVertices(3, out->num_vertices, out->data_vertex3f, 0.25); + Mod_SnapVertices(3, out->num_collisionvertices, out->data_collisionvertex3f, 1); + oldnumtriangles = out->num_triangles; oldnumtriangles2 = out->num_collisiontriangles; out->num_triangles = Mod_RemoveDegenerateTriangles(out->num_triangles, out->data_element3i, out->data_element3i, out->data_vertex3f); diff --git a/model_shared.c b/model_shared.c index 366a03f4..20dc64f7 100644 --- a/model_shared.c +++ b/model_shared.c @@ -1322,6 +1322,14 @@ int Mod_CountSkinFiles(skinfile_t *skinfile) return i; } +void Mod_SnapVertices(int numcomponents, int numvertices, float *vertices, float snap) +{ + int i; + double isnap = 1.0 / snap; + for (i = 0;i < numvertices*numcomponents;i++) + vertices[i] = floor(vertices[i]*isnap)*snap; +} + int Mod_RemoveDegenerateTriangles(int numtriangles, const int *inelement3i, int *outelement3i, const float *vertex3f) { int i, outtriangles; diff --git a/model_shared.h b/model_shared.h index 830428d7..6f57d464 100644 --- a/model_shared.h +++ b/model_shared.h @@ -692,6 +692,7 @@ skinfile_t *Mod_LoadSkinFiles(void); void Mod_FreeSkinFiles(skinfile_t *skinfile); int Mod_CountSkinFiles(skinfile_t *skinfile); +void Mod_SnapVertices(int numcomponents, int numvertices, float *vertices, float snap); int Mod_RemoveDegenerateTriangles(int numtriangles, const int *inelement3i, int *outelement3i, const float *vertex3f); #endif // MODEL_SHARED_H -- 2.39.2