示例#1
0
        public override void InitWorld()
        {
            Light(-10, 10, -10);
            const double r0 = 0.05;
            const double r1 = 3;
            const double r2 = 1;

            void CirclePath(double t, out double x, out double y, out double z)
            {
                x = r1 * Math.Cos(2 * Pi * t);
                y = 0;
                z = r1 * Math.Sin(2 * Pi * t);
            }

            void CircleCurve(double u, double v, out double x, out double y)
            {
                x = r2 * Math.Cos(2 * Pi * v);
                y = r2 * Math.Sin(2 * Pi * v);
            }

            CurveSweepMesh       mesh    = new CurveSweepMesh(40, 10, CirclePath, CircleCurve);
            WireFrameMeshFactory factory = new WireFrameMeshFactory(r0, true, true);
            var torusWire = factory.Build(mesh);

            torusWire.Material = new Material(Magenta);
            Add(torusWire).Translate(ty: r2 + r0);

            TriangleMeshFactory triFactory = new TriangleMeshFactory();
            var torusTriangle = triFactory.Build(mesh);

            torusTriangle.Material = new Material(Cyan)
            {
                Transparency = 0.99
            };
            Add(torusTriangle).Translate(ty: r2 + r0);

            SphereMeshFactory sphereFactory = new SphereMeshFactory(2 * r0);
            var torusSphere = sphereFactory.Build(mesh);

            torusSphere.Material = new Material(Yellow);
            Add(torusSphere).Translate(ty: r2 + r0);

            DefaultFloor();
        }
示例#2
0
        public override void InitWorld()
        {
            DefaultFloor();
            Light(1, 1, -1);

            double Altitude(double u, double v)
            {
                var r = 8 * Helper.Radius(u - 0.5, v - 0.5);

                return(0.2 * Math.Exp(-r / 4) * (1 + Math.Cos(2 * Pi * r)));
            }

            var mesh = new HeightField(50, 50, Altitude);
            var triangleMeshFactory = new TriangleMeshFactory(false, false);

            Add(triangleMeshFactory.Build(mesh).Translate(-0.5));
            var sphereMeshFactory = new SphereMeshFactory(0.05);

            Add(sphereMeshFactory.Build(mesh).Translate(0.5));
        }