示例#1
0
        public FighterGeometry()
        {
            var nose            = new Nose(0.5f, 0.6f, 26, 0.4f);
            var cockpitFuselage = new CockpitFuselage(nose, 1.2f, 1.2f, 3f);
            var mainFuselage    = new MainFuselage(cockpitFuselage);
            var intake          = new EngineIntake(cockpitFuselage);
            var underside       = new Underside(intake);
            var canopy          = new Canopy(0.65f, 0.5f, 3f, 16);
            var wing            = new Wing(4.5f, 4.5f);
            var rear            = new Rear(mainFuselage, underside);
            var tailFin         = new TailFin();
            var stabilizer      = new Stabilizer();
            var exhaust         = new Exhaust(rear, 0.6f);
            var bottomFin       = new BottomFin();

            var path      = exhaust.FlangeEndXSection;
            var graySlide = new Vec3(1f).Interpolate(new Vec3(0f), path.Vertices.Length);

            path.Vertices.Color(graySlide);
            Paths = EnumerableExt.Enumerate(path);

            Fighter = Composite.Create(Stacking.StackBackward(cockpitFuselage.Fuselage, mainFuselage.Fuselage)
                                       .Concat(EnumerableExt.Enumerate(intake.Intake, intake.Belly, underside.Geometry, canopy.Geometry,
                                                                       wing.Geometry, wing.Geometry.ReflectX(), rear.Geometry, exhaust.Geometry,
                                                                       exhaust.StabilizerFlange, exhaust.StabilizerFlange.ReflectX(),
                                                                       tailFin.Geometry, stabilizer.Geometry, stabilizer.Geometry.ReflectX(),
                                                                       bottomFin.Geometry, bottomFin.Geometry.ReflectX())))
                      .Smoothen(0.85f)
                      .Center();
        }
示例#2
0
            public Rear(MainFuselage fuselage, Underside underside)
            {
                var pos1 = new P()
                {
                    position = fuselage.RearXSection.Vertices.First().position + new Vec3(0f, -0.1f, 0f)
                };
                var pos2 = new P()
                {
                    position = fuselage.RearXSection.Vertices.Last().position + new Vec3(0f, -0.1f, 0f)
                };

                XSection     = +(fuselage.RearXSection + pos2 + underside.RearXSection + pos1);
                RearXSection = +(fuselage.RearXSection.Scale(1f, 0.9f) + pos2 +
                                 BottomXSection(underside.RearXSection) + pos1);
                var transforms =
                    from s in EnumerableExt.Range(0f, 2.5f, 0.5f)
                    select Mat.Translation <Mat4> (0f, s / 25f, -s);

                var paths = XSection.MorphTo(RearXSection, transforms);
                var rear  = paths.Extrude <V, P> (false, false);

                RearXSection   = paths.Last();
                EngineXSection = new Path <P, Vec3> (
                    from n in RearXSection.Vertices
                    where n.position.X >= -0.9f && n.position.X <= 0.9f
                    select new P()
                {
                    position = new Vec3(n.position.X.Clamp(-0.75f, 0.75f), n.position.Y, n.position.Z)
                })
                                 .Close();
                ExhaustXSection = EngineXSection.Scale(0.8f, 0.7f);
                transforms      =
                    from s in EnumerableExt.Range(0f, 1f, 0.5f)
                    select Mat.Translation <Mat4> (0f, s / 10f, -s);

                var engine = EngineXSection.MorphTo(ExhaustXSection, transforms)
                             .Extrude <V, P> (false, true);

                Geometry = Composite.Create(rear, engine)
                           .Color(_color);
            }