Ejemplo n.º 1
0
    public OccluderParametersCalculator(ContentFileLocator fileLocator, Device device, ShaderCache shaderCache, Figure figure, float[] faceTransparencies, ChannelInputs shapeInputs)
    {
        this.figure      = figure;
        this.shapeInputs = shapeInputs;
        figureGroup      = new FigureGroup(figure);
        var faceTransparenciesGroup = new FaceTransparenciesGroup(faceTransparencies);

        occlusionCalculator = new FigureOcclusionCalculator(fileLocator, device, shaderCache, figureGroup, faceTransparenciesGroup);
    }
Ejemplo n.º 2
0
    private void DumpSimpleOcclusion(DirectoryInfo shapeDirectory, ChannelInputs shapeInputs, float[] faceTransparencies)
    {
        FileInfo occlusionInfosFile       = shapeDirectory.File("occlusion-infos.array");
        FileInfo parentOcclusionInfosFile = shapeDirectory.File("parent-occlusion-infos.array");

        if (occlusionInfosFile.Exists)
        {
            return;
        }

        Console.WriteLine("Calculating occlusion...");

        if (faceTransparencies == null)
        {
            faceTransparencies = FaceTransparencies.For(figure);
        }

        FigureGroup             figureGroup;
        FaceTransparenciesGroup faceTransparenciesGroup;

        if (figure == parentFigure)
        {
            figureGroup             = new FigureGroup(figure);
            faceTransparenciesGroup = new FaceTransparenciesGroup(faceTransparencies);
        }
        else
        {
            var parentFaceTransparencies = FaceTransparencies.For(parentFigure);

            figureGroup             = new FigureGroup(parentFigure, figure);
            faceTransparenciesGroup = new FaceTransparenciesGroup(parentFaceTransparencies, faceTransparencies);
        }

        var inputs  = new ChannelInputsGroup(parentFigure.MakeDefaultChannelInputs(), new ChannelInputs[] { shapeInputs });
        var outputs = figureGroup.Evaluate(inputs);

        FigureOcclusionCalculator.Result occlusionResult;
        using (var occlusionCalculator = new FigureOcclusionCalculator(fileLocator, device, shaderCache, figureGroup, faceTransparenciesGroup)) {
            occlusionResult = occlusionCalculator.CalculateOcclusionInformation(outputs);
        }

        shapeDirectory.Create();
        if (figure == parentFigure)
        {
            occlusionInfosFile.WriteArray(OcclusionInfo.PackArray(occlusionResult.ParentOcclusion));
        }
        else
        {
            occlusionInfosFile.WriteArray(OcclusionInfo.PackArray(occlusionResult.ChildOcclusions[0]));
            parentOcclusionInfosFile.WriteArray(OcclusionInfo.PackArray(occlusionResult.ParentOcclusion));
        }
    }