Exemple #1
0
    public void FindCells()
    {
        newParameters.CopyTo(parameters);

        // Choose a sampler function
        Sample sampler = null;

        switch (samplingType)
        {
        case SamplerType.CENTER:
            sampler = SampleCenter;
            break;

        case SamplerType.CORNERS_AVG:
            sampler = SampleCornersAvg;
            break;

        case SamplerType.CORNERS_MIN:
            sampler = SampleCornersMin;
            break;

        case SamplerType.CORNERS_MAX:
            sampler = SampleCornersMax;
            break;

        case SamplerType.MONTE_CARLO:
            sampler = SampleMonteCarlo;
            break;
        }

        cells = new GridCell[parameters.xDimension * parameters.yDimension];
        Vector3 down = -transform.up;

        for (int y = 0; y < parameters.yDimension; y++)
        {
            for (int x = 0; x < parameters.xDimension; x++)
            {
                Vector3 rayPos = transform.TransformPoint(GetLocalCellBase(x, y)
                                                          + Vector3.up * parameters.scanHeight);
                Vector3 pos;
                float   height = noHitNoCell ? -1f : 0f;
                if (sampler(rayPos, down * parameters.scanHeight, out pos))
                {
                    Vector3 localPos = transform.InverseTransformPoint(pos);
                    height = localPos.y + parameters.scanHeight * 0.5f;
                }

                cells[GetIdx(x, y)] = new GridCell(GetIdx(x, y),
                                                   parameters.gridType, GetLocalCellBase(x, y) + Vector3.up * height);
            }
        }
        for (int y = 0; y < parameters.yDimension; y++)
        {
            for (int x = 0; x < parameters.xDimension; x++)
            {
                RegenerateEdges(x, y);
            }
        }
    }