manim边学边做--三维图形的场景类

打印 上一主题 下一主题

主题 1793|帖子 1793|积分 5381

在Manim中,ThreeDScene是一个专门为三维场景计划的类。
它通过设置三维相机、支持复杂的相机运动以及管理物体与相机的交互关系,为科学可视化工程仿真数学教育等范畴提供了强大的工具。
典范应用场景包括:

  • 三维多少图形的动态演示(如旋转立方体、莫比乌斯环)
  • 物理过程的三维可视化(如分子运动、流体动力学)
  • 交互式数学模子的构建(如曲面方程、向量场分析)
  • 虚拟现实场景的原型开发
1. ThreeDScene概要

ThreeDScene是Manim中用于处理三维场景的核心类。
与平凡的二维场景不同,ThreeDScene提供了对三维空间的全面支持,包括:

  • 三维对象的创建和操作:可以轻松地在三维空间中放置和移动对象
  • 相机的自由移动和旋转:通过调整相机的位置和方向,可以实现多种视角和动画效果
  • 固定对象的显示:某些对象可以被设置为固定在相机帧中,纵然相机移动,这些对象也不会改变位置或方向。
1.1. 主要参数

ThreeDScene继承自Scene,全部Scene的参数都适用于ThreeDScene,
参数名称类型分析camera_classCamera指定使用的相机类,默认为ThreeDCamera。这个参数决定了相机的行为和特性ambient_camera_rotation设置相机的情况旋转。可以指定旋转的速率和方向default_angled_camera_orientation_kwargs设置默认的相机倾斜角度和其他相干参数1.2. 主要方法

ThreeDScene提供了一系列方法,用于控制相机和对象的行为:
名称分析add_fixed_in_frame_mobjects将指定的对象固定在相机帧中,纵然相机移动,这些对象也不会改变位置或方向add_fixed_orientation_mobjects将指定的对象固定在相机的方向上,纵然相机旋转,这些对象也不会改变方向begin_3dillusion_camera_rotation开始一个三维相机旋转的动画效果,可以通过参数控制旋转的速率和方向begin_ambient_camera_rotation开始一个情况相机旋转,通常围绕 Z 轴旋转move_camera动画化地移动相机到指定的球坐标位置set_camera_orientation设置相机的当前方向stop_3dillusion_camera_rotation停止全部三维相机旋转的动画效果stop_ambient_camera_rotation停止情况相机旋转2. 使用示例

以下是四个可以或许展示ThreeDScene特点的动画示例,每个示例都突出了ThreeDScene的独特功能。
2.1. 旋转的立方体

在这个示例中,我们创建了一个立方体,并使用begin_3dillusion_camera_rotation方法让相机围绕立方体旋转,同时立方体自身也在旋转。
这种双重旋转效果展示了ThreeDScene在处理复杂三维动画时的强大本领。
  1. cube = Cube(side_length=2, fill_color=BLUE, fill_opacity=0.7)
  2. self.set_camera_orientation(phi=75 * DEGREES, theta=30 * DEGREES)
  3. self.begin_3dillusion_camera_rotation(rate=0.1)
  4. self.play(Rotate(cube, axis=RIGHT, angle=2 * PI), run_time=5)
  5. self.stop_3dillusion_camera_rotation()
复制代码

2.2. 固定在相机帧中的文本

这个示例展示了如何使用add_fixed_in_frame_mobjects方法将文本固定在相机帧中。
纵然相机旋转,文本始终保持在屏幕的左上角,不会受到相机运动的影响。
  1. axes = ThreeDAxes()
  2. text = Text("固定的 文本内容", font_size=48).to_corner(UL)
  3. self.add_fixed_in_frame_mobjects(text)
  4. self.add(axes)
  5. self.set_camera_orientation(phi=75 * DEGREES, theta=30 * DEGREES)
  6. self.begin_3dillusion_camera_rotation(rate=0.5)
  7. self.wait(3)
  8. self.stop_3dillusion_camera_rotation()
复制代码

2.3. 动态调整相机视角

在这个示例中,我们使用move_camera方法动态调整相机的视角。
通过指定新的球坐标位置,相机平滑地移动到新的视角,展示了ThreeDScene在相机动画方面的灵活性。
  1. sphere = Sphere(radius=2, fill_color=RED, fill_opacity=0.7)
  2. self.add(sphere)
  3. self.set_camera_orientation(phi=75 * DEGREES, theta=30 * DEGREES)
  4. self.move_camera(phi=30 * DEGREES, theta=120 * DEGREES, run_time=3)
  5. self.wait()
复制代码

2.4. 固定方向的对象

这个示例展示了如何使用add_fixed_orientation_mobjects方法固定对象的方向。
纵然相机旋转,箭头始终保持指向右侧,不会随着相机的旋转而改变方向。
  1. axes = ThreeDAxes()
  2. arrow = Arrow3D(start=ORIGIN, end=RIGHT * 3, color=GREEN)
  3. self.add_fixed_orientation_mobjects(arrow)
  4. self.add(axes)
  5. self.set_camera_orientation(phi=75 * DEGREES, theta=30 * DEGREES)
  6. self.begin_3dillusion_camera_rotation(rate=0.5)
  7. self.wait(3)
  8. self.stop_3dillusion_camera_rotation()
复制代码

3. 附件

文中的代码只是关键部门的截取,完整的代码共享在网盘中(threed.py),
下载地址: 完整代码 (访问暗码: 6872)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

用多少眼泪才能让你相信

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表