예제 #1
0
    private static Vector3[] RefineVertexPositions(Geometry geometry, RefinementResult refinementResult)
    {
        var stencils = refinementResult.Mesh.Stencils.Map(stencil => new WeightedIndex(stencil.Index, stencil.Weight));

        Vector3[] refinedVertexPositions = new Subdivider(stencils).Refine(geometry.VertexPositions, new Vector3Operators());
        return(refinedVertexPositions);
    }
예제 #2
0
    public static RefinementResult Combine(RefinementResult resultA, RefinementResult resultB)
    {
        SubdivisionMesh combinedMesh = SubdivisionMesh.Combine(
            resultA.Mesh,
            resultB.Mesh);

        int[] combinedControlFaceMap = Enumerable.Concat(
            resultA.ControlFaceMap,
            resultB.ControlFaceMap).ToArray();

        return(new RefinementResult(combinedMesh, combinedControlFaceMap));
    }
예제 #3
0
    public RefinementResult Refine(int refinementLevel)
    {
        int  actualRefinmentLevel;
        bool derivativesOnly;

        if (Type == GeometryType.SubdivisionSurface)
        {
            actualRefinmentLevel = refinementLevel;
            derivativesOnly      = false;
        }
        else
        {
            actualRefinmentLevel = 0;
            derivativesOnly      = true;
        }

        RefinementResult refinementResult = RefinementResult.Make(
            new QuadTopology(VertexCount, Faces),
            SurfaceMap,
            actualRefinmentLevel, derivativesOnly);

        return(refinementResult);
    }