コード例 #1
0
        public static void Pan(this PerspectiveCamera camera, PanDirection direction)
        {
            var vecLeft = Vector3D.CrossProduct(camera.LookDirection, camera.UpDirection);
            TranslateTransform3D xTrans;

            switch (direction)
            {
            case PanDirection.Left:
                xTrans          = new TranslateTransform3D(vecLeft * panFactor);
                camera.Position = xTrans.Transform(camera.Position);
                break;

            case PanDirection.Right:
                xTrans          = new TranslateTransform3D(-vecLeft * panFactor);
                camera.Position = xTrans.Transform(camera.Position);
                break;

            case PanDirection.Up:
                xTrans          = new TranslateTransform3D(-camera.UpDirection * panFactor);
                camera.Position = xTrans.Transform(camera.Position);
                break;

            case PanDirection.Down:
                xTrans          = new TranslateTransform3D(camera.UpDirection * panFactor);
                camera.Position = xTrans.Transform(camera.Position);
                break;

            case PanDirection.None:
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(direction), direction, null);
            }
        }
コード例 #2
0
        public static Point3D GetTarget(this PerspectiveCamera camera)
        {
            TranslateTransform3D xTrans = new TranslateTransform3D(camera.LookDirection * 5);

            return(xTrans.Transform(camera.Position));
            //return new Point3D(0, 0, 0);
        }
コード例 #3
0
ファイル: MyLights.cs プロジェクト: zhamppx97/dotnet-api-docs
        public void TransformPointLight(Vector3D pointLightVector, Vector3D changeVector)
        {
            // Transform light vector.
            TranslateTransform3D pointLightTransform = new TranslateTransform3D();

            pointLightTransform.OffsetX = pointLightVector.X;
            pointLightTransform.OffsetY = pointLightVector.Y;
            pointLightTransform.OffsetZ = pointLightVector.Z;
            _ptLight.Position           = pointLightTransform.Transform(_ptLight.Position);
        }
コード例 #4
0
        // Define the model.
        private void DefineModel(Model3DGroup group)
        {
            // Define a polygon in the XZ plane.
            Point3D center = new Point3D(0, 0, 4.5);

            Point3D[] polygon = G3.MakePolygonPoints(6, center,
                                                     new Vector3D(1, 0, 0), new Vector3D(0, 0, -1));

            // Make a transform to move the polygon in the -Z direction.
            TranslateTransform3D translate = new TranslateTransform3D(0, 0, -3);

            // Make a right pyramid.
            MeshGeometry3D mesh1 = new MeshGeometry3D();

            mesh1.AddPyramid(center, polygon, new Vector3D(0, 3, 0));
            group.Children.Add(mesh1.MakeModel(Brushes.Pink));

            // Make a skewed pyramid.
            translate.Transform(polygon);
            center = translate.Transform(center);
            MeshGeometry3D mesh2 = new MeshGeometry3D();

            mesh2.AddPyramid(center, polygon, new Vector3D(0, 3, 2));
            group.Children.Add(mesh2.MakeModel(Brushes.LightBlue));

            // Make a frustum with cutting plane parallel to the base.
            translate.Transform(polygon);
            center = translate.Transform(center);
            MeshGeometry3D mesh3 = new MeshGeometry3D();

            mesh3.AddFrustum(center, polygon, new Vector3D(0, 4, 0), 2);
            group.Children.Add(mesh3.MakeModel(Brushes.LightGreen));

            // Make a frustum with cutting plane not parallel to the base.
            translate.Transform(polygon);
            center = translate.Transform(center);
            MeshGeometry3D mesh4   = new MeshGeometry3D();
            Point3D        planePt = center + new Vector3D(0, 2, 0);
            Vector3D       planeN  = new Vector3D(1, 1, 1);

            mesh4.AddFrustum(center, polygon, new Vector3D(0, 4, 0), planePt, planeN);
            group.Children.Add(mesh4.MakeModel(Brushes.Orange));

            // Show the axes.
            MeshExtensions.AddAxes(group);
        }
コード例 #5
0
        // Define the model.
        private void DefineModel(Model3DGroup group)
        {
            // Make the initial surface.
            int numX = 40;
            int numZ = 40;

            Point3D[,] surface = G3.InitSurface(0, numX, -3, 3, numZ, -3, 3);

            // Add some craters.
            AddCrater(surface, -1, 0, 1.5, 0.3);
            AddCrater(surface, 1.6, -1.5, 0.5, 0.4);
            AddCrater(surface, 1.5, 1.5, 0.75, 0.3);
            AddCrater(surface, 0.5, -0.6, 1.25, 0.1);

            // Add some relatively large-scale randomness to random points.
            Random rand = new Random(0);

            for (int i = 0; i < 10; i++)
            {
                int ix = rand.Next(0, numX);
                int iz = rand.Next(0, numZ);
                surface[ix, iz].Y += rand.NextDouble(-0.1, 0.1);
            }

            // Fractalize.
            surface = G3.FractalizeSurface(surface, 2, 1, -0.05, 0.05);

            // Translate to center better.
            TranslateTransform3D trans = new TranslateTransform3D(0, 1, 0);

            numX = surface.GetUpperBound(0) + 1;
            numZ = surface.GetUpperBound(1) + 1;
            for (int ix = 0; ix < numX; ix++)
            {
                for (int iz = 0; iz < numZ; iz++)
                {
                    surface[ix, iz] = trans.Transform(surface[ix, iz]);
                }
            }

            // Make the mesh.
            MeshGeometry3D mesh1 = new MeshGeometry3D();

            mesh1.AddSurface(surface);

            // Apply a height map.
            double minY = surface[0, 0].Y;
            double maxY = minY;

            foreach (Point3D point in surface)
            {
                if (minY > point.Y)
                {
                    minY = point.Y;
                }
                if (maxY < point.Y)
                {
                    maxY = point.Y;
                }
            }
            mesh1.ApplyHeightMap(0, 1, minY, maxY);

            GradientStopCollection stops = new GradientStopCollection();

            stops.Add(new GradientStop(Colors.Gray, 0));
            stops.Add(new GradientStop(Colors.LightGray, 0.25));
            stops.Add(new GradientStop(Colors.LightGray, 0.75));
            stops.Add(new GradientStop(Colors.White, 1));
            LinearGradientBrush brush =
                new LinearGradientBrush(stops, new Point(0, 0), new Point(1, 1));

            group.Children.Add(mesh1.MakeModel(brush));
        }
コード例 #6
0
ファイル: Node.cs プロジェクト: jumpingyu/Abaqus_cs
 public Node translate_by(TranslateTransform3D translator)
 {
     point = translator.Transform(point);
     return(this);
 }
コード例 #7
0
        private void Viewport_OnMouseWheel(object sender, MouseWheelEventArgs e)
        {
            var xTrans = new TranslateTransform3D(_camera.LookDirection * e.Delta / 360D);

            _camera.Position = xTrans.Transform(_camera.Position);
        }
コード例 #8
0
        // Define the model.
        private void DefineModel(Model3DGroup group)
        {
            // Define a polygon in the XZ plane.
            Point3D center = new Point3D(0, -1.5, 2);

            Point3D[] polygon = G3.MakePolygonPoints(20, center,
                                                     new Vector3D(0.5, 0, 0), new Vector3D(0, 0, -0.5));

            // Transform to move the polygon.
            TranslateTransform3D xTranslate = new TranslateTransform3D(-2, 0, 0);

            // Make a transform to move the polygon in the -Z direction.
            TranslateTransform3D xzTranslate = new TranslateTransform3D(2, 0, -2);

            // Make a smooth skewed cylinder.
            MeshGeometry3D mesh1 = new MeshGeometry3D();

            mesh1.AddCylinder(polygon, new Vector3D(0, 2, -1), true);
            group.Children.Add(mesh1.MakeModel(Brushes.Pink));

            // Make a skewed cylinder.
            MeshGeometry3D mesh2 = new MeshGeometry3D();

            xTranslate.Transform(polygon);
            mesh2.AddCylinder(polygon, new Vector3D(0, 3, -1));
            group.Children.Add(mesh2.MakeModel(Brushes.Pink));

            // Make a smooth right cylinder.
            MeshGeometry3D mesh3 = new MeshGeometry3D();

            xzTranslate.Transform(polygon);
            mesh3.AddCylinder(polygon, new Vector3D(0, 2, 0), true);
            group.Children.Add(mesh3.MakeModel(Brushes.LightGreen));

            // Make a right cylinder.
            MeshGeometry3D mesh4 = new MeshGeometry3D();

            xTranslate.Transform(polygon);
            mesh4.AddCylinder(polygon, new Vector3D(0, 3, 0));
            group.Children.Add(mesh4.MakeModel(Brushes.LightGreen));

            // Make a cylinder defined by cutting planes.
            MeshGeometry3D mesh5 = new MeshGeometry3D();

            xzTranslate.Transform(polygon);
            mesh5.AddCylinder(polygon, new Vector3D(0, 3, 0),
                              center + new Vector3D(0, 1, 0), new Vector3D(0, 2, 1),
                              center + new Vector3D(0, -0.5, 0), new Vector3D(1, -1, 0),
                              true);
            group.Children.Add(mesh5.MakeModel(Brushes.LightBlue));

            // Make a smooth cylinder defined by cutting planes.
            MeshGeometry3D mesh6 = new MeshGeometry3D();

            xTranslate.Transform(polygon);
            mesh6.AddCylinder(polygon, new Vector3D(0, 3, 0),
                              center + new Vector3D(0, 2, 0), new Vector3D(0, 2, 1),
                              center + new Vector3D(0, -0.5, 0), new Vector3D(1, -1, 0));
            group.Children.Add(mesh6.MakeModel(Brushes.LightBlue));

            // Show the axes.
            MeshExtensions.AddAxes(group);
        }