读书人

一个矩形缠绕一条轴转动这样的动画

发布时间: 2012-07-24 17:47:58 作者: rapoo

一个矩形,围绕一条轴转动,这样的动画,能否实现?

轴是垂直方向的。如下图,然后,矩形围绕轴,旋转。

这样的动画,如何实现?


XML code
             |             |             |             |             |             |             |            -------------------             |           |                   |             |           |                   |             |           |                   |             |            -------------------             |             |             |             |             |


[解决办法]
是不是这意思?做的不精确,回头再研究。
C# code
    public partial class MainWindow : Window    {        int i = 0;        MatrixTransform3D mt3d = new MatrixTransform3D();        public MainWindow()        {            InitializeComponent();            Viewport3D viewport = new Viewport3D();            ModelVisual3D modelvisual = new ModelVisual3D();            Model3DGroup modelgroup = new Model3DGroup();            GeometryModel3D geomodel = new GeometryModel3D();            GeometryModel3D geomodel2 = new GeometryModel3D();            MeshGeometry3D mgeo = new MeshGeometry3D();            MeshGeometry3D mgeo2 = new MeshGeometry3D();            viewport.Camera = new PerspectiveCamera(new Point3D(0, 0.5, 8), new Vector3D(0, 0, -1), new Vector3D(0.5, 0, -1), 45);            mgeo.Positions.Add(new Point3D(-0.5, -0.5, -0.5));            mgeo.Positions.Add(new Point3D(0.5, -0.5, 0.5));            mgeo.Positions.Add(new Point3D(0.5, 0.5, 0.5));            mgeo.Positions.Add(new Point3D(0.5, 0.5, 0.5));            mgeo.Positions.Add(new Point3D(-0.5, 0.5, -0.5));            mgeo.Positions.Add(new Point3D(-0.5, -0.5, -0.5));            mgeo2.Positions.Add(new Point3D(-1.5, 1, -1));            mgeo2.Positions.Add(new Point3D(1.5, 1, -1));            mgeo2.Positions.Add(new Point3D(1.5, 1.1, -1));            mgeo2.Positions.Add(new Point3D(1.5, 1.1, -1));            mgeo2.Positions.Add(new Point3D(-1.5, 1.1, -1));            mgeo2.Positions.Add(new Point3D(-1.5, 1, -1));            geomodel.Geometry = mgeo;            geomodel.Material = new DiffuseMaterial(Brushes.Black);            geomodel.Transform = mt3d;            geomodel.BackMaterial = new DiffuseMaterial(Brushes.Black);            geomodel2.Geometry = mgeo2;            geomodel2.Material = new DiffuseMaterial(Brushes.Black);            modelgroup.Children.Add(geomodel);            modelgroup.Children.Add(geomodel2);            modelvisual.Content = modelgroup;            viewport.Children.Add(modelvisual);            grid1.Children.Add(viewport);            CompositionTarget.Rendering += new EventHandler(CompositionTarget_Rendering);        }        void CompositionTarget_Rendering(object sender, EventArgs e)        {            double m11 = Math.Cos(i * 0.01);            double m12 = Math.Sin(i * 0.01);            Matrix3D matrix = new Matrix3D();            matrix.M11 = 0;            matrix.M12 = m11;            matrix.M13 = m12;            matrix.M21 = 1;            matrix.M22 = 0;            matrix.M23 = 0;            matrix.M31 = 0;            matrix.M32 = -m12;            matrix.M33 = m11;            matrix.OffsetY = 0.9 * (1 - m11 + m12);            matrix.OffsetZ = 0.9 * (1 - m12 - m11);            mt3d.Matrix = matrix;            i++;        }    } 

读书人网 >C#

热点推荐