Пример #1
0
        protected override void CreateDirectionalSurfaceSampling(
            Func <Point3D, Point3D, double> estimateScreenDistanceWithoutClip,
            Func <int, int, Tuple <int, int> > mapping,
            int subdivisions,
            List <Vertex> vertices,
            List <IndexedLine> lines
            )
        {
            if (vertices.Count > 0)
            {
                return;
            }

            var builder        = new WireframeBuilder();
            var surfaceSampler = new SurfaceConstantParameterLinesBuilder(
                builder
                );

            var bezierPatch = new BernsteinPatch();

            for (var i = 0; i < 16; ++i)
            {
                bezierPatch.ControlPoints[i / 4, i % 4] = ControlPoints[i].Position;
            }
            surfaceSampler.Build(bezierPatch);

            vertices.AddRange(builder.Vertices.ToList());
            lines.AddRange(builder.Lines.ToList());
        }
Пример #2
0
        public BernsteinPatch GetBernsteinPatch()
        {
            if (_segmentsU > 1 || _segmentsV > 1)
            {
                throw new ArgumentException(
                          "There exists more than one bernstein patch here"
                          );
            }

            var bezierPatch = new BernsteinPatch();

            for (var i = 0; i < 16; ++i)
            {
                bezierPatch.ControlPoints[i / 4, i % 4] =
                    _virtualPoints[i].Position;
            }
            return(bezierPatch);
        }
Пример #3
0
        private BernsteinPatch GetPatchByLocation(int uPatchNum, int vPatchNum)
        {
            var patchControlPoints = BezierPatchGroup.GetList2DSubRectCyclic(
                ControlPoints,
                3 * SegmentsU + 1,
                3 * uPatchNum,
                3 * vPatchNum,
                4,
                4
                );

            var bezierPatch = new BernsteinPatch();

            for (var i = 0; i < 16; ++i)
            {
                bezierPatch.ControlPoints[i / 4, i % 4] = patchControlPoints[i];
            }

            return(bezierPatch);
        }