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(); }
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); }