Python的3D可视化库【vedo】2-2 (plotter模块) 访问绘制器信息、操作渲染器
文章目录
- 4 Plotter类的方法
- 4.1 访问Plotter信息
- 4.1.1 实例信息
- 4.1.2 演员对象列表
- 4.2 渲染器操作
- 4.2.1 选择渲染器
- 4.2.2 更新渲染场景
- 4.3 控制渲染效果
- 4.3.1 渲染窗格的背景色
- 4.3.2 深度剥离效果
- 4.3.3 隐藏线框的线条
- 4.3.4 改为平行投影模式
- 4.3.5 添加阴影
- 4.3.6 环境光遮蔽
- 4.3.7 添加景深
vedo是Python实现的一个用于辅助科学研究的3D可视化库。
vedo的plotter
模块是管理对象和控制3D渲染的模块。
Plotter
实例可以用于显示3D图形对象、控制渲染器行为、操控相机、创建事件以及导出3D数据。几乎所有关于3D图形的操作,都是在Plotter
渲染的窗口进行的。
按照功能对Plotter
的方法进行分组,以下是操作渲染器的方法。
参考:vedo官方文档
4 Plotter类的方法
4.1 访问Plotter信息
4.1.1 实例信息
plt.print()
打印当前Plotter实例的信息。
plt = vedo.Plotter()
plt.print()
结果如下:
vedo.plotter.Plotter at (0x22f4b4c16f0)
window title : vedo
window size : (960, 960), full_screen=(1707, 1067)
activ renderer: nr.0 (out of 1 renderers)
n. of objects : 0
axes style : [None]
4.1.2 演员对象列表
plt.actors
返回actors列表。全部被展示的对象中拥有actor
属性的对象的actor
组成这个列表。
4.2 渲染器操作
4.2.1 选择渲染器
plt.at(nren, yren=None)
使当前渲染器变为编号指定的渲染器,返回绘制器本身。
也可以通过[nx, ny]
格式选择第几行第几列的渲染器。
vedo模块的类的方法,被调用时大部分会返回实例本身,所以可以很方便地在同一行连用多个方法进行操作。在vedo的官方示例中经常这么使用。
s = vedo.Sphere(r=0.7)
c = vedo.Cube()plt = vedo.Plotter(N=2)
# 在两个窗格分别展示球体和立方体
plt.at(0).add(s)
plt.at(1).add(c)
plt.show(interactive=True)
4.2.2 更新渲染场景
plt.render(resetcam=False)
已有窗口展示的情况下,改变场景中的元素后,需要手动渲染场景,更新变化。
一般在循环或回调函数中使用。
plt = vedo.Plotter()cs = ["green", "red", "blue"]
# 窗口展示(未定义交互事件,因此不需要交互)
plt.show(interactive=False)
for i in range(10):i = i % 3# 改变背景颜色plt.background(c1=cs[i])# 渲染plt.render()time.sleep(1)
每秒变一次背景色:
4.3 控制渲染效果
4.3.1 渲染窗格的背景色
plt.background()
为指定渲染器设置背景颜色。参数如下:
c1=None
,主要背景色;c2=None
,窗口上面部分的背景色,会和c1
设置的颜色形成渐变。at=None
,渲染器的索引。mode=0
,背景渐变的方式(需要vtk版本在9.3或以上)。必须c1和c2都填了才可用。
0为垂直从下到上渐变,
1为水平从左到右渐变,
2为从中央向四周辐射渐变,
3为从四周向中央辐射渐变。
背景色设置:
plt = vedo.Plotter(N=2)
# 设置背景色
plt.background("green", at=0)
plt.background("green", "red", at=1)
# 展示
plt.show(vedo.Text2D("c1=green\nc2=None", s=3), at=0)
plt.show(vedo.Text2D("c1=green\nc2=red", s=3), at=1)
plt.show(interactive=True)
4种渐变方式
plt = vedo.Plotter(shape=(1, 4))
plt.background("green", "red", at=0, mode=1)
plt.background("green", "red", at=1, mode=0)
plt.background("green", "red", at=2, mode=2)
plt.background("green", "red", at=3, mode=3)
plt.show(interactive=True)
4.3.2 深度剥离效果
plt.use_depth_peeling(at=None, value=True)
是否在指定的渲染器上使用深度剥离算法。
深度剥离是一种半透明渲染算法。进行n次绘制,每次绘制离相机的第n近的层,最后按顺序把剥离出的层按透明度混合到屏幕缓冲中。
需要在第一次渲染之前调用。
# 有一部分重叠在一起的两个图形
s = vedo.Sphere(pos=(0, 0, 0), r=0.7, alpha=0.7)
c = vedo.Cube(pos=(0, 0, 1), alpha=0.7)
plt = vedo.Plotter(N=2)
# 使用深度剥离和不使用的效果
plt.at(0).use_depth_peeling(value=True).add(s, c)
plt.at(1).use_depth_peeling(value=False).add(s, c)
plt.show(interactive=True)
可以看到,使用深度剥离算法可以正确渲染半透明物体的远近关系。
4.3.3 隐藏线框的线条
plt.render_hidden_lines(value=True)
在wireframe
模式下,移除背后的线条。
s = vedo.Sphere(pos=(0, 0, 0), r=0.7).wireframe()
plt = vedo.Plotter(N=2)
plt.at(0).add(s).render_hidden_lines(True)
plt.at(1).add(s).render_hidden_lines(False)
plt.show(interactive=True)
4.3.4 改为平行投影模式
plt.parallel_projection(value=True, at=None)
对指定的渲染器使用平行投影。
输入value=-1
可以切换该选项的开关。
# 创建两个有距离的立方体
c1 = vedo.Cube(pos=(3, 3, 3))
c2 = vedo.Cube(pos=(0, 0, 0))
plt = vedo.Plotter(N=2, sharecam=False, resetcam=True)
# 启用平行投影
plt.at(0).add(c1, c2).parallel_projection(value=True)
# 不启用平行投影
plt.at(1).add(c1, c2).parallel_projection(value=False)
plt.show(interactive=True)
在交互页面拖动,使两个立方体靠近,可以发现:
不启用平行投影,3D图像会有近大远小的效果;平行投影是以平行的视线看向对象,会移除任何透视效果。
4.3.5 添加阴影
plt.add_shadows()
为当前渲染器添加阴影。需要与光源和放置阴影的物体配合。
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(N=2)
plt.at(0).add(s, lit, wall)
plt.at(1).add(s, lit, wall).add_shadows()
plt.show(interactive=True)
4.3.6 环境光遮蔽
plt.add_ambient_occlusion()
屏幕空间环境光遮蔽。基于屏幕空间,像素着色器都会对所有像素周围的深度值采样,并计算所有采样点的遮蔽率。
参数及说明如下:
radius
,计算遮蔽率的影响半径。bias=0.01
,法线的偏差。blur=True
,向采样位置添加模糊效果。samples=100
,采样数。
# 两个相连的球体,连接处光线遮蔽效果更明显
s1 = vedo.Sphere(pos=(0, 0.6, 0), r=0.7)
s2 = vedo.Sphere(pos=(0, -0.6, 0), r=0.7)
plt = vedo.Plotter()
plt.add(s1, s2)
plt.add_ambient_occlusion(2)
plt.show(interactive=True)
4.3.7 添加景深
plt.add_depth_of_field(autofocus=True)
在场景中添加景深效果。
plt = vedo.Plotter(N=2)
plt.at(0).add(s1, s2).add_depth_of_field()
plt.at(1).add(s1, s2)
plt.show(interactive=True)
景深效果类似相机对焦的效果,焦点图像清晰,其余图像被模糊处理。
以整理了绘制器类Plotter
中渲染操作相关的方法。
更多关于数据可视化的内容参考:Python数据可视化笔记
相关文章:

Python的3D可视化库【vedo】2-2 (plotter模块) 访问绘制器信息、操作渲染器
文章目录 4 Plotter类的方法4.1 访问Plotter信息4.1.1 实例信息4.1.2 演员对象列表 4.2 渲染器操作4.2.1 选择渲染器4.2.2 更新渲染场景 4.3 控制渲染效果4.3.1 渲染窗格的背景色4.3.2 深度剥离效果4.3.3 隐藏线框的线条4.3.4 改为平行投影模式4.3.5 添加阴影4.3.6 环境光遮蔽4…...
【vue2】文本自动省略组件,支持单行和多行省略,超出显示tooltip
代码见文末 vue3实现 最开始就用的vue3实现,如下 Vue3实现方式 vue2开发和使用文档 组件功能 TooltipText 是一个文字展示组件,具有以下功能: 文本显示:支持单行和多行文本显示。自动判断溢出:判断文本是否溢出…...
网络安全产品之认识防病毒软件
随着计算机技术的不断发展,防病毒软件已成为企业和个人计算机系统中不可或缺的一部分。防病毒软件是网络安全产品中的一种,主要用于检测、清除计算机病毒,以及预防病毒的传播。本文我们一起来认识一下防病毒软件。 一、什么是计算机病毒 计算…...

游戏引擎学习第42天
仓库: https://gitee.com/mrxiao_com/2d_game 简介 目前我们正在研究的内容是如何构建一个基本的游戏引擎。我们将深入了解游戏开发的每一个环节,从最基础的技术实现到高级的游戏编程。 角色移动代码 我们主要讨论的是角色的移动代码。我一直希望能够使用一些基…...
区块链智能合约( solidity) 安全编程
引言:本文由天玄链开源开发者提供,欢迎报名公益天玄链训练营 https://blockchain.163.com/trainingCamp 一、重入和竞态 重入和竞态在solidity 编程安全中会多次提及,历史上也造成了重大的损失。 1.1 问题分析 竞态的描述不严格…...

GUNS搭建
一、准备工作 源码下载: 链接: https://pan.baidu.com/s/1bJZzAzGJRt-NxtIQ82KlBw 提取码: criq 官方文档 二、导入代码 1、导入后端IDE 导入完成需要,需要修改yml文件中的数据库配置,改成自己的。 2、导入前端IDE 我是用npm安装的yarn npm…...
【ETCD】【源码阅读】stepWithWaitOption方法解析
在分布式系统中,ETCD 作为一个强一致性、高可用的 key-value 存储系统,广泛应用于服务发现、配置管理等场景。ETCD 在内部采用了 Raft 协议来保证集群的一致性,而日志预提案(log proposal)是 Raft 协议中至关重要的一部…...
redis 怎么样查看list
在 Redis 中,可以通过以下方法查看列表的内容或属性: 1. 查看列表中的所有元素 使用 LRANGE 命令: LRANGE key start endkey 是列表的名称。start 是起始索引,0 表示第一个元素。end 是结束索引,-1 表示最后一个元素…...
E: 无法获取 dpkg 前端锁 (/var/lib/dpkg/lock-frontend),是否有其他进程正占用它?
我们在使用Ubuntu系统时经常性使用sudo apt install命令安装所需要的软件库,偶尔会出现如下问题: E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用) E: 无法获取 dpkg 前端锁 (/var/lib/dpkg/lock-frontend),是否有其…...

创建型设计模式
一、设计模式介绍 1.设计模式是什么 设计模式是指在软件开发中,经过验证的,用于解决在特定环境下,重复出现的,特定问题的解决方案; 2.设计模式怎么来的? 满足设计原则后,慢慢迭代出来的。 3.设…...

仿iOS日历、飞书日历、Google日历的日模式
仿iOS日历、飞书日历、Google日历的日模式,24H内事件可自由上下拖动、自由拉伸。 以下是效果图: 具体实现比较简单,代码如下: import android.content.Context; import android.graphics.Canvas; import android.graphics.Color;…...

vuedraggable
官方文档:https://www.npmjs.com/package/vuedraggable 中文文档:http://www.itxst.com/vue-draggable/tutorial.html 案例下载地址: https://github.com/SortableJS/Vue.Draggable.git vuedraggablehttps://sortablejs.github.io/Vue.Dr…...

新手从事直播软件源码开发搭建经验与技巧
如果从YY或六间房的PC秀场直播间系统软件算起,直播软件已经在国内风云了至少10年了,站在用户角度提到直播系统大家基本都知道核心功能有开直播刷礼物等,那么如果站在直播软件源码开发搭建的技术角度去看呢?是不是要从需求调研分析…...
相机不动,机构动作----Hands Eyes
最近在研究 手眼标定,发现大家都需付费,搞啥子,说好的开源。。。 以相机在上固定不动,机械手为 EPSON_Robot 为例,详细的一步一步实例操作指引 EPSON_Robot 的192.168.0.1 2004 Server 详细操作步骤 1. 启动程序 运…...

Scala的导入
//导入 //(1) 创建包:在src上右键,新建软件包 //(2)填写包名:小写 //(3)在包上右键,创建类。自动加入包名 //(4)导入。import 包名.类名 //导入多个类 //import jh.yuanlixueyuan.bigdata.scala03.{A,B,C} //导入包下的所有的类 /…...
vue2中父子组件传值案例总结
在 Vue 2 中,父子组件之间的传值是通过 props 和事件来实现的。下面是详细的解释和总结: 1. 父组件向子组件传值 父组件可以通过 props 向子组件传递数据。以下是一个简单的示例: 父组件 (Parent.vue) <template><div><h1…...
功能篇:springboot中实现文件导出
### Spring Boot 中实现文件导出功能 #### 概述 在现代Web应用程序中,文件导出是一个常见的需求,允许用户将数据以特定格式(如CSV、Excel、PDF等)下载到本地。本文将详细介绍如何使用Spring Boot实现文件导出功能,并…...
Redis客户端(Jedis、RedisTemplate、Redisson)
1. 简介 Redis作为一个当下很火热的非关系型数据库,Java从业人员基本都离不开对Redis的使用。在Java程序中该数据库,需要借助于市面上的开源客户端,如Jedis、Spring Data Redis、Redisson,它们可以作为操作Redis非关系型数据库的桥…...

Mybatis中SQL的执行过程
文章目录 Mybatis 框架SQL执行过程数据库操作映射方式SQL的执行过程- SQL解析- SQL参数映射- SQL预编译- SQL执行- 结果映射- 事务处理- 缓存处理- 日志记录与监控 扩展#与$的区别- $ 符号- # 符号总结示例 Mybatis SQL分类- 动态 SQL- 静态 SQL静态SQL和动态SQL选择${}、#{}与…...

【数据结构——栈与队列】顺序栈的基本运算(头歌实践教学平台习题)【合集】
目录😋 任务描述 相关知识 测试说明 我的通关代码: 测试结果: 任务描述 本关任务:编写一个程序实现顺序栈的基本运算。 相关知识 为了完成本关任务,你需要掌握: 初始化栈、销毁栈、判断栈是否为空、进栈、出栈、取…...

7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...
k8s从入门到放弃之HPA控制器
k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...

Java数组Arrays操作全攻略
Arrays类的概述 Java中的Arrays类位于java.util包中,提供了一系列静态方法用于操作数组(如排序、搜索、填充、比较等)。这些方法适用于基本类型数组和对象数组。 常用成员方法及代码示例 排序(sort) 对数组进行升序…...