精华内容
下载资源
问答
  • 这是一款神奇的jQuery和css3平面图片转换为3d模型动画效果插件。该插件可以将平面图片转换为3d模型,并且该插件还带有地标动画,点击地标可以看到改点地标的内容。
  • 平面3d立体图片工具
  • VC 6.0 源码演示3D几何图形的绘制,程序包含了显示类中二维显示和三维显示的关键技术,可能与论文中的内容稍微不同,但是实质完全一样。程序在VC6.0下调试通过。显示类的定义部分在eidterView.h 文件中.  其实现...
  • 3d图 # 方式一 plt.subplot(projection='3d') # 方式二 # get current axes plt.figure(figsize=(14, 10)) axes = plt.gca(projection='3d') 空间直线 方式一 x = np.linspace(0, 10, 20) y = np.linspace(2, 8, ...

    3d图

    # 方式一
    plt.subplot(projection='3d')
    
    # 方式二
    # get current axes
    plt.figure(figsize=(14, 10))
    axes = plt.gca(projection='3d')
    

    空间直线

    方式一

    x = np.linspace(0, 10, 20)
    y = np.linspace(2, 8, 20)
    
    z = 2*x + 5*y + 3
    
    plt.plot(x, y, z)
    
    

    方式二

    x,y,z = array([22.5, 50. , 34.6]), array([12. , 47.5, 38.4]), array([3.5, 7.5, 7.6])
    axes.plot3D(x, y, z)
    

    平面

    # 三维平面, 要求X,Y都是二维的
    x = np.linspace(0, 10, 20)
    y = np.linspace(2, 8, 20)
    X,Y = np.meshgrid(x, y)
    Z = 2*X + 5*Y + 3
    
    plt.figure(figsize=(14, 10))
    axes = plt.gca(projection='3d')
    axes.plot_surface(X, Y, Z)
    
    axes.plot(x, y, z, c='k', lw=5,)
    
    展开全文
  • 图片绕着 x 轴旋转,左侧视图为旋转后投影到二位平面图片,右侧为旋转过程中的三维视图。 过程一 可以把图片分成上下两部分,上半边完全没动,下半部分绕着 x 轴旋转 ##过程二 过程二稍复杂,先看其中某一帧的...

    思路参考自: 扔物线

    整体效果

    话不多少,直接上效果

    通过观察可以发现这个动画分为三个过程

    • 过程一: 底部翘起来

    • 过程二: 转起来

    过程三:右边翘起来

    三维图像投影到二维平面

    图片绕着 x 轴旋转,左侧视图为旋转后投影到二位平面的图片,右侧为旋转过程中的三维视图。

    在这里插入图片描述

    过程一

    可以把图片分成上下两部分,上半边完全没动,下半部分绕着 x 轴旋转,不断改变转动角度就可以达到过程一的效果

    在这里插入图片描述

    过程二

    过程二稍复杂,先看其中某一帧的情况

    红线下半部分翘起来了,上半部分没有翘起来,所以考虑分为上下两部分绘制

    下半部分

    在这里插入图片描述

    1. 图片绕着 z 轴旋转 20 度
    2. 裁剪图片,只取下半部分
    3. 图片绕着 x 轴旋转 45 度
    4. 图片绕着 z 轴旋转 -20 度

    上半部分

    在这里插入图片描述

    1. 图片绕着 z 轴旋转 20 度
    2. 裁剪图片,只取上半部分
    3. 图片绕着 x 轴旋转 0 度(为什么?为了和其他过程统一过程,方便代码编写)
    4. 图片绕着 z 轴旋转 -20 度

    拼接

    把这两部分图拼接起来就是过程二中某一帧的效果

    实现过程二的动画

    保持每一帧 绕着 x 轴旋转的角度固定,改变绕着 z 轴旋转的角度就可以实现过程二的动画。

    改进过程一(方便代码编写)

    过程一下半部分

    1. 图片绕着 z 轴旋转 0 度
    2. 裁剪图片,只取下半部分
    3. 图片绕着 x 轴旋转某个角度
    4. 图片绕着 z 轴旋转 0 度

    不断改变 x 轴旋转的角度就可以就可以实现过程一中下半部分的动画效果

    过程一上半部分

    1. 图片绕着 z 轴旋转 0 度
    2. 裁剪图片,只取上半部分
    3. 图片绕着 x 轴旋转 0 度
    4. 图片绕着 z 轴旋转 0 度

    过程三

    过程三和过程一类似,不再赘述。

    整个动画具体参数

    • 过程一:

      • 上半部分:旋转角度都是 0
      • 下半部分:绕 z 轴旋转角度始终为 0,绕 x 轴旋转角度从 0 过渡到 -45 度
    • 过程二:

      • 上半部分:绕着 z 轴旋转角度从 0 过渡到270 度,绕着 x 轴旋转的角度固定为 0 度
      • 下半部分:绕着 z 轴旋转角度从 0 过渡到270 度,绕着 x 轴旋转的角度固定为 -45 度
    • 过程三

      • 上半部分:绕 z 轴旋转角度始终为 270 度,绕 x 轴旋转角度从 0 过渡到 45 度
      • 下半部分:绕 z 轴旋转角度始终为 270 度,绕 x 轴旋转角度始终为 0 度

    代码编写

    首先定义一个enum,标识动画当前进行到那个过程

    enum FlipAnimationSteps { animation_step_1, animation_step_2, animation_step_3 }
    

    设置动画参数,监听动画状态

    class _FlipAnimationApp extends State<FlipAnimationApp>
        with SingleTickerProviderStateMixin {
      var imageWidget = Image.asset(
        'images/mario.jpg',
        width: 300.0,
        height: 300.0,
      );
    
      AnimationController controller;
    
      CurvedAnimation animation;
    
      @override
      void initState() {
        super.initState();
        controller =
            AnimationController(duration: const Duration(seconds: 1), vsync: this);
        animation = CurvedAnimation(
          parent: controller,
          curve: Curves.easeInOut,
        )..addStatusListener((status) {
            if (status == AnimationStatus.completed) {
              switch (currentFlipAnimationStep) {
                case FlipAnimationSteps.animation_step_1:
                  currentFlipAnimationStep = FlipAnimationSteps.animation_step_2;
                  controller.reset();
                  controller.forward();
                  break;
    
                case FlipAnimationSteps.animation_step_2:
                  currentFlipAnimationStep = FlipAnimationSteps.animation_step_3;
                  controller.reset();
                  controller.forward();
                  break;
                case FlipAnimationSteps.animation_step_3:
                  break;
              }
            }
          });
    
        controller.forward();
      }
    
      @override
      Widget build(BuildContext context) {
        return AnimateFlipWidget(
          animation: animation,
          child: imageWidget,
        );
      }
    
      @override
      void dispose() {
        controller.dispose();
        super.dispose();
      }
    }
    
    

    再来看看核心类AnimateFlipWidget,动画相关的主要逻辑都在里面。

    class AnimateFlipWidget extends AnimatedWidget {
      final Widget child;
    
      double _currentTopRotationXRadian = 0;
      double _currentBottomRotationXRadian = 0;
      double _currentRotationZRadian = 0;
    
      static final _topRotationXRadianTween =
          Tween<double>(begin: 0, end: math.pi / 4);
      static final _bottomRotationXRadianTween =
          Tween<double>(begin: 0, end: -math.pi / 4);
      static final _rotationZRadianTween =
          Tween<double>(begin: 0, end: (1 + 1 / 2) * math.pi);
    
      AnimateFlipWidget({Key key, Animation<double> animation, this.child})
          : super(key: key, listenable: animation);
    
      @override
      Widget build(BuildContext context) {
        final Animation<double> animation = listenable;
    
        return Center(
          child: Container(
            child: Stack(
              children: [
                Transform(
                  alignment: Alignment.center,
                  transform: Matrix4.rotationZ(currentFlipAnimationStep ==
                          FlipAnimationSteps.animation_step_2
                      ? _rotationZRadianTween.evaluate(animation) * -1
                      : _currentRotationZRadian * -1),
                  child: Transform(
                    transform: Matrix4.identity()
                      ..setEntry(3, 2, 0.002)
                      ..rotateX(currentFlipAnimationStep ==
                              FlipAnimationSteps.animation_step_3
                          ? _currentTopRotationXRadian =
                              _topRotationXRadianTween.evaluate(animation)
                          : _currentTopRotationXRadian),
                    alignment: Alignment.center,
                    child: ClipRect(
                      clipper: _TopClipper(context),
                      child: Transform(
                        alignment: Alignment.center,
                        transform: Matrix4.rotationZ(currentFlipAnimationStep ==
                                FlipAnimationSteps.animation_step_2
                            ? _currentRotationZRadian =
                                _rotationZRadianTween.evaluate(animation)
                            : _currentRotationZRadian),
                        child: child,
                      ),
                    ),
                  ),
                ),
                Transform(
                  alignment: Alignment.center,
                  transform: Matrix4.rotationZ(currentFlipAnimationStep ==
                          FlipAnimationSteps.animation_step_2
                      ? _rotationZRadianTween.evaluate(animation) * -1
                      : _currentRotationZRadian * -1),
                  child: Transform(
                    transform: Matrix4.identity()
                      ..setEntry(3, 2, 0.002)
                      ..rotateX(currentFlipAnimationStep ==
                              FlipAnimationSteps.animation_step_1
                          ? _currentBottomRotationXRadian =
                              _bottomRotationXRadianTween.evaluate(animation)
                          : _currentBottomRotationXRadian),
                    alignment: Alignment.center,
                    child: ClipRect(
                      clipper: _BottomClipper(context),
                      child: Transform(
                        alignment: Alignment.center,
                        transform: Matrix4.rotationZ(currentFlipAnimationStep ==
                                FlipAnimationSteps.animation_step_2
                            ? _currentRotationZRadian =
                                _rotationZRadianTween.evaluate(animation)
                            : _currentRotationZRadian),
                        child: child,
                      ),
                    ),
                  ),
                ),
              ],
            ),
          ),
        );
      }
    }
    
    

    这个类返回了一个 Stack 布局,可以把上半部分和下半部分的变换结果叠加在一起(注意:不能用Column布局哦),children里面的两个Transform就是上下两部分变化之后的结果。可以发现两个Transform都是符合前面的变换流程(绕 Z 轴旋转 - > 裁剪 -> 绕 X 轴旋转 -> 绕 Z 轴转回来)。

    看一下下半部分裁剪的过程

    class _BottomClipper extends CustomClipper<Rect> {
      final BuildContext context;
    
      _BottomClipper(this.context);
    
      @override
      Rect getClip(Size size) {
        return new Rect.fromLTRB(
            -size.width, size.height / 2, size.width * 2, size.height * 2);
      }
    
      @override
      bool shouldReclip(CustomClipper<Rect> oldClipper) {
        return true;
      }
    }
    

    定义一个类,继承CustomClipper类,重写getClip指定具体的裁剪范围。

    源码

    源码点这里
    喜欢的话 star 哦

    展开全文
  • PRODEPTH 是一款由Pixel Film Studios 公司出品的平面图片转三维空间动画插件,ae软件中非常火的图片转三维空间动画效果,现在FCPX软件也可以实现啦,那就就是通过使用prodepth这款插件,可以将平面图片转成三维摄像...

    PRODEPTH 是一款由Pixel Film Studios 公司出品的平面图片转三维空间动画插件,ae软件中非常火的图片转三维空间动画效果,现在FCPX软件也可以实现啦,那就就是通过使用prodepth这款插件,可以将平面图片转成三维摄像机空间动画效果,非常好用!

    FCPX插件:平面图片转三维空间动画 PRODEPTH安装方法

    注意:在安装“FCPX插件:平面图片转三维空间动画 PRODEPTH Mac”之前要先关闭“Final Cut Pro X”软件。

    1、FCPX插件ProDepth Mac特别版软件包下载完成后打开,双击打开【Generators.dmg】。

    2、将左侧的【Pixel Film Studios ProDepth】拖到右边的【Generators】。

    3、双击打开【Effects.dmg】。

    4、将左侧的【Pixel Film Studios ProDepth】拖到右边的【Effects】。

    5、然后打开【double click to install】。

    6、安装完成点击【OK】即可

    7、然后打开“Final Cut Pro X”软件,在软件【已安装的效果】处,会显示安装好的“FCPX插件Pixel Film Studios ProDepth”,如图所示:

    8、在“Final Cut Pro X”软件【已安装的发生器】处,会显示安装好的“FCPX插件Pixel Film Studios ProDepth”,如图所示:


    Pixel Film Studios PRODEPTH下载-FCPX插件:平面图片转三维空间动画 PRODEPTH Mac 附教程 v.1.2特别版 - Mac天空

    FCPX插件:Pixel Film Studios PRODEPTH插件介绍

    借助ProDepth,用户可以用全新的方式改变他们的媒体。ProDepth深度变化从未如此有趣和容易。用户可以在Pixel Film Studios的Final Cut Pro X中将自己的相机的视角设置为可定制的路径,摆动位置和旋转,摆动位置,应用脉动等等。

    FCPX插件:平面图片转三维空间动画 PRODEPTH插件特色

    FCPX中的深度改变

    通过ProDepth,每个用户都可以像以前一样全面控制深度变化。用户可以完全控制景深模糊,焦点偏移,相机开始和结束位置,相机开始和结束旋转,旋转移动,距离,最多15点蒙版点,蒙版更改以及更多全部操作在Final Cut X Pro X中。

    运动控制

    借助ProDepth,用户可以从Final Cut Pro X中选择各种类型的相机移动。ProDepth为用户提供诸如自定义相机动画,位置和旋转摆动,相机路径,脉动效果和位置摆动等预置。只需轻点鼠标,用户就可以完全控制智能,速度,移动类型等等。

    屏幕控制

    通过ProDepth屏幕控制,用户可以通过点击鼠标完全控制其面罩15点以及整体深度移动的中心点。通过ProDepth屏幕控制,用户可以在Final Cut Pro X中生成最适合其媒体的蒙版。

    专为Final Cut Pro X而设计

    ProDepth专业设计,可在Final Cut Pro X中无缝工作。作为效果叠加,每个ProDepth预设可以拖放到媒体上并实时预览。通过FCPX检测器中发布的参数,用户只需点击几下鼠标即可进行进一步调整。

    FCPX插件:平面图片转三维空间动画 PRODEPTH使用教程

    第1步 - 准备时间表

    我们首先从FCPX媒体库中选择一个剪辑或图像并将其拖到时间轴上。如果您决定使用视频,请保留您想要应用效果的特定框架。

    然后在FCPX效果库中找到ProDepth。浏览各种ProDepth选项。在这个例子中,我们将使用位于Paths部分的Convex 8 Point选项。

    (在静止图像上)将效果直接拖放到媒体顶部。一旦你的时间轴设置,去检查员窗口。

    第2步 - 编辑模式

    首先您会注意到编辑模式复选框,一旦您将预设置于媒体上,该复选框将自动进行检查。当选择编辑模式时,您可以更改的遮罩将出现在查看器窗口中。

    这个面具让用户知道究竟会发生什么效果。通过点击并拖动查看器窗口中的控制盘来调整蒙版。一旦您在所需区域附近有蒙版,您可以取消选中编辑模式复选框。

    第3步 - 层控制

    接下来我们将开始设置图层。首先检查每个指标框,以便显示它们您有三个要调整的图层。

    第3层是离源头最远的层,而第1层最接近。当使用凸预设时,你会希望层3是最小的,而层1是最大的。

    如果您使用的是凹面预设,则您希望图层3为最大,图层1为最小。每个图层部分都有一个位置和比例滑块,因此您可以真正关注特定点。

    调整好图层后,转到效果控制部分。

    第4步 - 效果控制

    开始舍入和羽化您的图层的边缘。

    进行这些调整后,取消选中每个图层部分中的所有指标复选框。

    中心和x或y旋转控制器可以在室外景观环境或大型室内空间中发挥最佳效果。对于其他类型的媒体,最好将这些调整保持为0。

    现在将您的播放头移至媒体的第一帧。然后调整距离滑块。将距离滑块移至50%,以了解您的调整外观。

    第5步 - 相机控制

    接下来我们将介绍相机控制部分。

    首先调整开始和结束位置。当您调整开始位置时,请确保播放头位于时间线的第一帧。

    当您调整结束位置时,请确保播放头位于时间线的最后一帧。

    单击开始和结束位置旁边的下拉箭头以调整x,y或z位置。如果要放大,请将起始位置z滑块设置为0.然后将终点位置的z滑块调整为负数。

    要缩小,请将起始位置下方的z滑块移至负数。然后将终点位置z滑块调整为正数。

    通过从各种速度方法中进行选择来调整开始和结束位置后继续。

    小编的话

    prodepth插件是目前非常受欢迎的一款fcpx插件,可以在Final Cut Pro X 软件中将平面图片转成三维摄像机空间动画效果,自定义修改,旋转,摆动,运动轨迹,位置等,需要的朋友欢迎来下载。

    展开全文
  • 解压密码:RJ4587 在没有CSS3之前,我们只能在网页上实现2D平面动画,但是随着CSS3技术的普及,我们可以很方便的在网页上实现一个3D立方体。今天给大家带来的便是一个基于jQuery和CSS3的3D立方体盒子,我们可以通过...
  • 一:利用的包:(1)构建三维对象:mpl_toolkits.mplot3d里面导入Axes3D(2)数据方面操作:numpy(3)绘图工具包:matplotlib.pyplot二:绘图:1、绘图主要分成两种情况:(1)一种是根据函数来绘制三维(2)一种是根据三维...

    一:利用的包:

    (1)构建三维对象:mpl_toolkits.mplot3d里面导入Axes3D

    (2)数据方面操作:numpy

    (3)绘图工具包:matplotlib.pyplot

    二:绘图:

    1、绘图主要分成两种情况:

    (1)一种是根据函数来绘制三维图

    (2)一种是根据三维坐标绘制散点图

    2、代码一:绘制散点图(加颜色,修饰什么的省略)

    import matplotlib.pyplot as plt

    import numpy as np

    from mpl_toolkits.mplot3d import Axes3D

    import csv

    #读取数据

    datasets=[]

    with open(r'a.csv','rt') as f:

    lines=csv.reader(f)

    for line in lines:

    datasets.append(line)

    #获取有用部分

    datesets=datasets[1:]

    #转化为array数组,便于列数据的切片获取

    datasets=np.array(datasets)

    #数据类型转换一下,以防止画图时精度缺失报错

    X=datasets[:,-3].astype('float32')

    Y=datasets[:,-2].astype('float32')

    Z=datasets[:,-1].astype('float32')

    ax=plt.subplot(111,projection='3d')

    ax.scater(X,Y,Z)

    ax.set_zlabel('z')

    ax.set_ylabel('y')

    ax.set_xlabel('x')

    plt.show()

    代码二:以z=x+y2为例画出三维图:

    from mpl_toolkits.mplot3d import Axes3D

    import matplotlib.pyplot as plt

    import nmpy as np

    fig=plt.figure()

    ax=Axes3D(fig)

    #生成x,y的网格数据

    X=np.arange(-4,4,0.25)

    Y=np.arange(-4,4,0.25)

    X,Y=np.meshgrid(X,Y)

    R=np.sqrt(X+Y**2)

    Z=np.sin(R)

    ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap='rainbow')

    展开全文
  • 由于绘画表现形式的丰富多样,因此,墙体彩绘也不再仅仅局限于单调的平面图案效果,逼真的3D立体作为墙体彩绘的一种表现形式,它呈现出来的逼真立体效果被广大时尚有个性的客户所追捧。它能给予人们强大的视觉冲击...
  • 前言对于ViewPager,相信大家都已经很熟悉了,在各种切换场景比如Fragment切换、选项卡的切换或者顶部轮播图片等都可以用ViewPager去实现。那么本篇文章带来ViewPager的一种实现效果:3D画廊。
  • Laya 3D 线

    千次阅读 2019-12-12 10:45:32
    使用Laya的 PixelLineSprite3D像素线渲染精灵,出来的线条不能调整粗细。目前想到的是通过,多一些线条,使看起来的线条变粗。最终解决办法是,将线段的起点和线段的终点,扩城圆。用生活的例子举例,就是,拿个...
  • 主要为大家详细介绍了Unity3D动态生成平面网格,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • Round, flat, designer-friendly pseudo-3D engine View complete documentation and live demos at . Install Download minified, or un-minified CDN Link directly to Zdog JS on . [removed][removed] Package...
  • 3D立体动画效果是一款3D效果模型,你可以用图片替换演示中的立方体4个面,这样就可以将这款HTML5立方体旋转动画改造成HTML5 3D焦点了,经测试效果相当不错,由于是基于webkit的,所以有浏览器限制,Google Chrome...
  • 3D变换动画精髓

    千次阅读 2015-01-22 22:54:51
    郁闷的要死,写了N长的博客,结果按到command+Q了,对于学习动画的点点滴滴记载就...2D平面动画 一举例说尽,这里的坐标系用的是mac的坐标系 和IOS的坐标系不同 可以举一反三地。 图层几何变换: 可以通过
  • 输入一张图片,得到图片上为平面的部分,并给出平面的三维信息(单位法向)。 大致过程 这是一个二阶段的学习。第一阶段为从单张图片中得到不同平面的分割,第二阶段为对不同的分割估计平面方程。但两个阶段是一起...
  • 借助echarts制作酷炫3d地球动画

    千次阅读 2019-04-03 19:34:18
    我们知道echarts具有很强的功能,如制作饼状、柱状、折线,但对其扩展插件的功能不是很了解,今天我们借助echarts扩展插件ECharts GL,实现3d地球酷炫动画。       ECharts GL...
  • 解压密码:RJ4587 之前我们分享过很多基于jQuery和CSS3的焦点动画插件,大部分都是在平面上通过过渡动画切换不同的图片,例如这里就有10款非常不错的jQuery/CSS3焦点插件。今天我们要在这里继续分享一款基于CSS3...
  • WPF3D图片轮播效果

    千次阅读 2017-03-29 08:56:56
    1. 效果: (1)初始化: (2)当点击该图片时,该图片放大 (3)当点击其他图片时,被点击图片移动到屏幕中央,再次点击放大。 2. 实现思路 3.具体实现 (1)第一步:获得图片路径  String ...
  • 那么,如何在Android中实现向IOS中那样的3D图片浏览效果呢?下面,鄙人将重磅推出今天的重点博文,和大家一起在Android中实现酷炫的3D图片浏览效果。 一、原理 老规矩,还是要来啰嗦下原理的东西。 整体实现是以手机...
  • 纯js实现的3d轮播动画效果
  • 【Unity3D平面绘图——GL与GUI

    万次阅读 2017-05-09 15:48:25
    在Unity3D中绘制一个平面图形可不容易,可别惯性思维觉得,嗯,这引擎3D的事情都能解决了,2D的不叫事情。其实除去布置UI,在Unity3D中绘制一个2D平面图形是很蛋疼的一件事情。不然的话,也不会有大量的平面图形绘制...
  • MATLAB 3D 动画制作(一)- 3D 图形设计  MATLAB 3D Animation -- 3D object design  Auther: Sonictl Northeastern University.  前言:本系列教程将逐步完成一个有趣的MATLAB 3D动画,MATLAB 3D图形的绘制和...
  • 1. 实验 4 3ds Max 建模 1 实验目的 通过本实验的学习使学生掌握利用软件开发工具3d max进行三维模型的创 建以及掌握3d ...2) 在 3DSMAX 利用二维平面图创建三维模型 3导入其他三维软件工具创建的三维模型 4 实验步骤
  • 3D Photo Animator for FCPX插件推荐给大家,这是一个可以将风景人像平面图片3D空间摄像机视觉差特效动画,它使用Z轴缓冲区深度技术来拉伸图像并获得其拉伸的动画效果,例如冻结时间的人体模型,是一个令人印象...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,249
精华内容 8,499
关键字:

平面3d图怎么画