コード例 #1
0
ファイル: OBJImporter.cs プロジェクト: FlashyFire/VKRSlicer
 void Triangulate(Vector3 normal, List <Vector3> points)
 {
     if (points.Count == 3)
     {
         Facet facet = new Facet
         {
             Normal = normal,
             Vx1    = points[0],
             Vx2    = points[1],
             Vx3    = points[2]
         };
         Model.Facets.Add(facet);
     }
     else
     {
         Vector3      up        = Vector3.Subtract(points[0], points[1]).Normalized();
         Matrix4      mt        = Matrix4.LookAt(normal, Vector3.Zero, up);
         var          projected = points.Select(x => Vector3.TransformPosition(x, mt));
         List <float> data      = projected.SelectMany(pt => new float[] { pt.X, pt.Y }).ToList();
         IList <int>  triangles = Tessellator.Tessellate(data);
         for (int i = 0; i < triangles.Count; i += 3)
         {
             Facet facet = new Facet
             {
                 Normal = normal,
                 Vx1    = points[triangles[i]],
                 Vx2    = points[triangles[i + 1]],
                 Vx3    = points[triangles[i + 2]]
             };
             Model.Facets.Add(facet);
         }
     }
 }
コード例 #2
0
        private void Awake()
        {
            lineRenderer.positionCount = vertices.Count;
            for (int i = 0; i < vertices.Count; i++)
            {
                lineRenderer.SetPosition(i, vertices[i]);
            }

            var tessellator = new Tessellator();

            tessellator.AddContour(vertices);
            tessellator.Tessellate(normal: Vector3.back);

            meshFilter.mesh = tessellator.ToMesh();
        }
コード例 #3
0
        public override MeshDraft Construct(Vector2 parentLayoutOrigin)
        {
            var roofDraft = ConstructRoofBase(out List <Vector2> roofPolygon2, out List <Vector3> roofPolygon3);

            var tessellator = new Tessellator();

            tessellator.AddContour(roofPolygon3);
            tessellator.Tessellate(normal: Vector3.up);
            var roofTop = tessellator.ToMeshDraft()
                          .Move(Vector3.up * roofConfig.thickness);

            for (var i = 0; i < roofTop.vertexCount; i++)
            {
                roofTop.normals.Add(Vector3.up);
            }
            return(roofDraft.Add(roofTop)
                   .Paint(roofColor));
        }
コード例 #4
0
        protected static MeshDraft ConstructContourDraft(List <Vector2> skeletonPolygon2, float roofPitch)
        {
            Vector2 edgeA          = skeletonPolygon2[0];
            Vector2 edgeB          = skeletonPolygon2[1];
            Vector2 edgeDirection2 = (edgeB - edgeA).normalized;
            Vector3 roofNormal     = CalculateRoofNormal(edgeDirection2, roofPitch);

            var skeletonPolygon3 = skeletonPolygon2.ConvertAll(v => v.ToVector3XZ());

            var tessellator = new Tessellator();

            tessellator.AddContour(skeletonPolygon3);
            tessellator.Tessellate(normal: Vector3.up);
            var contourDraft = tessellator.ToMeshDraft();

            for (var i = 0; i < contourDraft.vertexCount; i++)
            {
                Vector2 vertex = contourDraft.vertices[i].ToVector2XZ();
                float   height = CalculateVertexHeight(vertex, edgeA, edgeDirection2, roofPitch);
                contourDraft.vertices[i] = new Vector3(vertex.x, height, vertex.y);
                contourDraft.normals.Add(roofNormal);
            }
            return(contourDraft);
        }