您的位置:首页 > 财经 > 产业 > 制作书签 小学生一年级_seo网站优化经理_百度app首页_合肥网络公司seo

制作书签 小学生一年级_seo网站优化经理_百度app首页_合肥网络公司seo

2024/12/23 4:11:01 来源:https://blog.csdn.net/qq_42783188/article/details/144273486  浏览:    关键词:制作书签 小学生一年级_seo网站优化经理_百度app首页_合肥网络公司seo
制作书签 小学生一年级_seo网站优化经理_百度app首页_合肥网络公司seo

文章目录

  • 4 Plotter类的方法
    • 4.3 渲染器内的物体操作
      • 4.3.1 添加物体
      • 4.3.2 移除物体
      • 4.3.3 渲染器的内容列表
    • 4.4 相机控制
      • 4.4.1 访问相机对象
      • 4.4.2 重置相机状态
      • 4.4.3 移动相机位置
      • 4.4.4 改变相机焦点
      • 4.4.5 改变相机朝向的平面
      • 4.4.5 旋转相机
      • 4.4.6 对齐相机的上朝向
      • 4.4.7 缩放


vedo是Python实现的一个用于辅助科学研究的3D可视化库。vedo的plotter模块是管理对象和控制3D渲染的模块。

plotter.Plotter实例可以用于显示3D图形对象、控制渲染器行为、操控相机、创建事件以及导出3D数据。几乎所有关于3D图形的操作,都是在Plotter渲染的窗口进行的。

按照功能把Plotter的方法分组整理,以下是渲染器内物体和相机的操作的方法。

参考:vedo官方文档


4 Plotter类的方法

4.3 渲染器内的物体操作

4.3.1 添加物体

plt.add(*objs, at=None)
把对象加到将被渲染的对象列表中。at可以指定哪一个渲染器,不指定则默认为当前渲染器。

plt = vedo.Plotter(N=2)
s = vedo.Sphere(r=0.7)
# 添加到第一个渲染器
plt.add(s, at=0)
plt.show(interactive=True)

添加物体

4.3.2 移除物体

plt.remove(*objs, at=None)
从将被渲染的对象列表中移除对象。被移除的对象可以由给它们分配的名字引用。
at指定哪个渲染器。

s1 = vedo.Sphere(pos=(0, 0, 0), r=0.7)
s2 = vedo.Sphere(pos=(0.4, 0.4, 0), r=0.7)
plt = vedo.Plotter(N=2)
plt.add(s1, s2, at=0)
plt.add(s1, s2, at=1)
# 删除第二个渲染器s1球体
plt.remove(s1, at=1)
plt.show(interactive=True)

移除物体

plt.pop(at=None)
从移除最后添加到某个渲染器的对象。不指定渲染器默认为当前渲染器。
一般在循环或回调函数中使用。

plt.clear(at=None, deep=False)
清空场景中的所有网格对象和体素对象。

plt.remove_lights()
删除当前渲染器中的全部灯光。

s = vedo.Sphere(r=0.7)
# 简易光源
lit = vedo.addons.Light((-3, 0, 0))
# 创建墙面
wall = vedo.Box((3, 0, 0), length=0.1, width=10, height=10)
plt = vedo.Plotter()
# 加阴影
plt.add(s, lit, wall).add_shadows()
plt.azimuth(-50)
plt.remove_lights()
print(plt.get_meshes())
plt.show(interactive=True)

移除灯光后,阴影消失。
移除灯光

4.3.3 渲染器的内容列表

plt.get_meshes()
返回指定的渲染器中的网格对象列表。参数如下:

  • at=None,指定哪个渲染器,默认为当前渲染器。
  • include_non_pickables=False,是否包括不可选取的对象。
  • unpack_assemblies=True,是否要将assembly模块组合的对象拆解开返回。
plt = vedo.Plotter(N=2)
s = vedo.Sphere(r=0.7)
c = vedo.Cube()
plt.add(s, at=0)
plt.add(c, at=1)
# 取某个渲染器的网格对象列表
print(plt.get_meshes(at=0))
print(plt.get_meshes(at=1))

打印的网格对象列表如下

[<vedo.shapes.Sphere object at 0x000001B61A837FA0>]
[<vedo.shapes.Cube object at 0x000001B61DA4E0E0>]

plt.get_volumes(at=None, include_non_pickables=False)
返回指定的渲染器中的体素对象列表。

plt.get_actors(at=None, include_non_pickables=False)
返回指定的渲染器中的actor列表。

上述代码中两个渲染器的actors列表:

[<vtkmodules.vtkRenderingOpenGL2.vtkOpenGLActor(0x00000164606382A0) at 0x00000164618286A0>]
[<vtkmodules.vtkRenderingOpenGL2.vtkOpenGLActor(0x0000016460638700) at 0x0000016461828940>]

plt.check_actors_trasform(at=None)
重置指定渲染器中所有actor对象的转置矩阵。
在渲染场景中使用交互器手动移动、旋转、缩放actor对象后,这个方法才会生效。

具体效果不明。


4.4 相机控制

4.4.1 访问相机对象

plt.camera
返回当前活动的相机。
返回类型是vtkmodules.vtkRenderingOpenGL2.vtkOpenGLCamera,包含相机的全部信息。

4.4.2 重置相机状态

plt.reset_camera(tight=None)
重置相机的位置和缩放。位置会重新按照渲染窗格的actors中心计算,缩放设为默认值1。
指定tight时,缩放后会在xy平面(即窗口内部)保留内边距。

# 初始不重置相机
plt = vedo.Plotter(resetcam=False)
plt.add(vedo.Cube())
plt.show(interactive=False)
time.sleep(1)
# 重置相机
plt.reset_camera(tight=3)
plt.show(interactive=True)

相机未重置、重置相机以及使用不同tight参数的效果:
重置相机

4.4.3 移动相机位置

plt.move_camera(cameras, t=0, times=(), smooth=True, output_times=())
把相机位置插到输入的两个相机设置的中间。
输入相机可以是vtkCamera或者相机字典。
在交互模式下按Shift-C键可以导出当前相机的参数:

###################################################
## Template python code to position this camera: ##
cam = dict(pos=(0, 0, 6.68173),focal_point=(0, 0, 0),viewup=(0, 1.00000, 0),roll=0,distance=6.68173,clipping_range=(4.62492, 9.28696),
)
show(mymeshes, camera=cam)
###################################################

4.4.4 改变相机焦点

plt.fly_to(point)
移动相机,看向指定的焦点。

c1 = vedo.Cube(pos=(2, 2, 2))
c2 = vedo.Cube(pos=(0, 0, 0))
c3 = vedo.Cube(pos=(-2, -2, -2))
plt = vedo.Plotter()
plt.show(s1, s2, s3, axes=1, interactive=False)
plt.fly_to([2,2,2])
plt.show(interactive=True)

改变相机焦点

4.4.5 改变相机朝向的平面

plt.look_at(plane='xy')
移动相机,使其看向指定的笛卡尔平面。

创建一个便于观察的立方体:

c = vedo.Cube().compute_normals()
# 6个面设置编号
labels = c.labels('id', on='cells')
# 设置6个面的颜色
c.cellcolors = [(255, 0, 0), (255, 0, 0), (0, 255, 0), (0, 255, 0), (0, 0, 255), (0, 0, 255)]
plt = vedo.Plotter()
plt.show(c, labels)

展示look_at的效果:

# 输入'xy'等价于'yx'
plt.look_at('yz')
plt.show(c, labels, interactive=True, axes=14)

相机朝向笛卡尔平面

4.4.5 旋转相机

plt.azimuth(angle)
以焦点为中心,绕着相机上方方向旋转相机。
plt.elevation(angle)
以焦点为中心,绕着透视的反向和向上视图向量的叉积方向旋转相机。

plt = vedo.Plotter(sharecam=False, shape=(3, 3), size=(900, 900))
idx = 0
for ele in [40, 0, -40]:for azi in [-40, 0, 40]:plt.renderer = plt.renderers[idx]plt.azimuth(azi)plt.elevation(ele)plt.show(c, labels, vedo.Text2D(f"azimuth({azi})\nelevation({ele})", s=1), at=idx)idx += 1
plt.show(interactive=True)

旋转相机

plt.roll(angle)
以焦点为中心,绕着透视方向旋转相机。
roll旋转

4.4.6 对齐相机的上朝向

plt.reset_viewup(smooth=True)
把相机的上朝向设置为最近的正交方向。
正交方向,即与3维坐标轴平行的朝向,一共6个(x、y、z的正负方向)。
相机上朝向的向量默认是(0, 1, 0),即朝向 y 轴的正方向。使用roll方法时,该向量值会发生改变。

相机在使用azimuthelevationroll方法变换后,再使用reset_viewup方法,可以使相机的正上方朝向和最近的坐标轴朝向对齐。

4.4.7 缩放

plt.fov(angle)
设置相机的视野角度。这个角度是相机视锥在水平方向的角度。默认角度是30度。
高的angle值能产生广角镜头(鱼眼效果),低值产生的是远距镜头。

plt = vedo.Plotter()
plt.show(c, labels,  interactive=False)
plt.fov(10)
plt.render()
plt.interactive()

fov

plt.zoom(zoom)
缩放当前相机视野。
zoom

plt.zoom的效果和plt.fov是一样的,如果这两个方法两个都做了调用,最后被调用的那个生效。

plt.dolly(value)
使相机靠近或远离焦点。value大于0为靠近,小于0是远离。
dolly在测试用例中无效果。


以上是在渲染器中增删物体和控制相机的方法。

更多关于数据可视化的内容参考:Python数据可视化笔记

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com