文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

基于WPF如何实现3D画廊动画效果

2023-07-05 07:01

关注

本篇内容介绍了“基于WPF如何实现3D画廊动画效果”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

接下来想做一个图廊,所以并没有必要用立方体,只需做一些“墙壁”就行了。

而在一个平面上建起另一个矩形的平面,实则非常容易,只需输入墙角的两点和高度就可以了,这对于写过正方体的人来说绝对是简单得很,无非是把四个点劈成两个三角形

private MeshGeometry3D MakeSurface(Point3D p0, Point3D p1, Point3D p2, Point3D p3){    MeshGeometry3D mesh = new MeshGeometry3D();    Point3D[] pts ={p0, p1, p2, p3};    foreach (var pt in pts)        mesh.Positions.Add(pt);    foreach (var i in new int[6] { 0, 1, 2, 2, 3, 0 })        mesh.TriangleIndices.Add(i);    return mesh;}

接下来可以像之前做正方体时那样,先做一个平的地面,然后在地面上放置一些正方体。

由于地面上的正方形要求垂直于地面,所以重载一下

private MeshGeometry3D MakeSurface(Point p0, Point p1, double high){    return MakeSurface(        new Point3D(p0.X, 0, p0.Y),         new Point3D(p1.X, 0, p1.Y),         new Point3D(p1.X, high, p1.Y),         new Point3D(p0.X, high, p0.Y));}

然后生成模型

基于WPF如何实现3D画廊动画效果

代码为

private void DefineModel(Model3DGroup group){    // Make the ground.    const double wid = 10;    MeshGeometry3D groundMesh = MakeSurface(        new Point3D(-wid, 0, -wid),        new Point3D(-wid, 0, +wid),        new Point3D(+wid, 0, +wid),        new Point3D(+wid, 0, -wid));    DiffuseMaterial groundMaterial = new DiffuseMaterial(Brushes.DarkGray);    GeometryModel3D groundModel = new GeometryModel3D(groundMesh, groundMaterial);    group.Children.Add(groundModel);    MaterialGroup gpMaterial;    for (int x = -2; x <= 2; x += 2)    {        for (int y = -2; y <= 2; y += 2)        {            MeshGeometry3D mesh = MakeSurface(new Point(x, y), new Point(x, y + 1), 1);            byte r = (byte)(128 + x * 50);            byte g = (byte)(128 + y * 50);            byte b = (byte)(128 + x * 50);            Color color = Color.FromArgb(255, r, g, b);            DiffuseMaterial material = new DiffuseMaterial(                new SolidColorBrush(color));            GeometryModel3D model = new GeometryModel3D(mesh, material);            group.Children.Add(model);        }    }}

接下来就是挂载贴图,结果大致如下

基于WPF如何实现3D画廊动画效果

其方法也很简单,就是把material变成想要的图片,故而先把图像放在一个字符串数组里

static readonly string[] imgs = new string[9]{    "2d1.png","2d2.png","2d3.png","2d4.png","2d5.png",    "2d6.png","2d7.png","2d8.png","2d9.png"};

接下来需要注意一点,图像本身需要一个坐标系,故而要把墙壁的代码改为

private MeshGeometry3D MakeSurface(Point p0, Point p1, double high, string uri = null){    var mesh = MakeSurface(        new Point3D(p0.X, 0, p0.Y), new Point3D(p1.X, 0, p1.Y),         new Point3D(p1.X, high, p1.Y), new Point3D(p0.X, high, p0.Y));    //这四个点代表图像上的坐标和图形中点的对应关系    Point[] textureCoods = new Point[4]    {        new Point(0, 1),new Point(1, 1),        new Point(1, 0),new Point(0, 0),    };    foreach (var pt  in textureCoods)        mesh.TextureCoordinates.Add(pt);    return mesh;}

然后在生成正方形时,用图像取代颜色

ImageBrush imgBrush = new ImageBrush();imgBrush.ImageSource = new BitmapImage(new Uri(    $"imgs//{imgs[k++]}", UriKind.Relative));MeshGeometry3D mesh = MakeSurface(new Point(x, y), new Point(x, y + 1), 1);GeometryModel3D model = new GeometryModel3D(mesh, new DiffuseMaterial(imgBrush));group.Children.Add(model);

“基于WPF如何实现3D画廊动画效果”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯