From de7554b9e3aaadf1d2a25f981f79b8322b2cf274 Mon Sep 17 00:00:00 2001 From: David Williams Date: Tue, 27 May 2008 21:33:07 +0000 Subject: [PATCH] Experimental work removing the need for multi material patch. --- include/IndexedSurfacePatch.h | 2 +- source/SurfaceExtractors.cpp | 38 ++++++++++++----------------------- 2 files changed, 14 insertions(+), 26 deletions(-) diff --git a/include/IndexedSurfacePatch.h b/include/IndexedSurfacePatch.h index 6d843304..e26d7aa3 100644 --- a/include/IndexedSurfacePatch.h +++ b/include/IndexedSurfacePatch.h @@ -61,7 +61,7 @@ namespace PolyVox boost::int32_t getIndexFor(const Vector3DFloat& pos); void setIndexFor(const Vector3DFloat& pos, boost::int32_t newIndex); - private: + public: bool m_AllowDuplicateVertices; }; diff --git a/source/SurfaceExtractors.cpp b/source/SurfaceExtractors.cpp index 2473fe2a..16851b28 100644 --- a/source/SurfaceExtractors.cpp +++ b/source/SurfaceExtractors.cpp @@ -50,6 +50,7 @@ namespace PolyVox return; } + singleMaterialPatch->m_AllowDuplicateVertices = true; for(boost::uint32_t ct = 0; ct < indices.size()-2; ct+=3) { if((vertices[indices[ct]].getMaterial() != vertices[indices[ct+1]].getMaterial()) || (vertices[indices[ct]].getMaterial() != vertices[indices[ct+2]].getMaterial())) @@ -62,46 +63,33 @@ namespace PolyVox float mat1 = vert1.getMaterial(); float mat2 = vert2.getMaterial(); - if((mat0 == mat1) && (mat1 == mat2)) - { - exit(1); - } + vert0.setMaterial(0.0f); vert0.setAlpha(1.0); + vert1.setMaterial(0.0f); vert1.setAlpha(1.0); + vert2.setMaterial(0.0f); vert2.setAlpha(1.0); + singleMaterialPatch->addTriangle(vert0, vert1, vert2); vert0.setMaterial(mat0); vert0.setAlpha(1.0); vert1.setMaterial(mat0); vert1.setAlpha(0.0); vert2.setMaterial(mat0); vert2.setAlpha(0.0); - multiMaterialPatch->addTriangle(vert0, vert1, vert2); + singleMaterialPatch->addTriangle(vert0, vert1, vert2); vert0.setMaterial(mat1); vert0.setAlpha(0.0); vert1.setMaterial(mat1); vert1.setAlpha(1.0); vert2.setMaterial(mat1); vert2.setAlpha(0.0); - multiMaterialPatch->addTriangle(vert0, vert1, vert2); + singleMaterialPatch->addTriangle(vert0, vert1, vert2); vert0.setMaterial(mat2); vert0.setAlpha(0.0); vert1.setMaterial(mat2); vert1.setAlpha(0.0); vert2.setMaterial(mat2); vert2.setAlpha(1.0); - multiMaterialPatch->addTriangle(vert0, vert1, vert2); + singleMaterialPatch->addTriangle(vert0, vert1, vert2); - /*vert0.setMaterial(vertices[indices[ct+1]].getMaterial()); vert0.setAlpha(0.0); - vert1.setMaterial(vertices[indices[ct+1]].getMaterial()); vert1.setAlpha(1.0); - vert2.setMaterial(vertices[indices[ct+1]].getMaterial()); vert2.setAlpha(0.0); - multiMaterialPatch->addTriangle(vert0, vert1, vert2);*/ - - /*vert0.setMaterial(vertices[indices[ct+2]].getMaterial()); vert0.setAlpha(0.0); - vert1.setMaterial(vertices[indices[ct+2]].getMaterial()); vert1.setAlpha(1.0); - vert2.setMaterial(vertices[indices[ct+2]].getMaterial()); vert2.setAlpha(0.0); - multiMaterialPatch->addTriangle(vert0, vert1, vert2);*/ - - //multiMaterialPatch->addTriangle(vert0Alpha0, vert1Alpha1, vert2Alpha0); - //multiMaterialPatch->addTriangle(vert0Alpha0, vert1Alpha0, vert2Alpha1); - - /*SurfaceVertex v0 = vertices[indices[ct+0]]; v0.setMaterial(2.1); v0.setAlpha(1.0); - SurfaceVertex v1 = vertices[indices[ct+1]]; v1.setMaterial(2.1); v1.setAlpha(1.0); - SurfaceVertex v2 = vertices[indices[ct+2]]; v2.setMaterial(2.1); v2.setAlpha(1.0); - - multiMaterialPatch->addTriangle(v0,v1,v2);*/ + //Cause the original one to become degenerate... + indices[ct+0] = 0; + indices[ct+1] = 0; + indices[ct+2] = 0; } } + singleMaterialPatch->m_AllowDuplicateVertices = false; } void generateRoughMeshDataForRegion(BlockVolume* volumeData, Region region, IndexedSurfacePatch* singleMaterialPatch, IndexedSurfacePatch* multiMaterialPatch)