当前位置: 首页 > news >正文

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)

at

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)

background设置
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)

background mode

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 问题分析 竞态的描述不严格&#xf…...

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 中&#xff0c;父子组件之间的传值是通过 props 和事件来实现的。下面是详细的解释和总结&#xff1a; 1. 父组件向子组件传值 父组件可以通过 props 向子组件传递数据。以下是一个简单的示例&#xff1a; 父组件 (Parent.vue) <template><div><h1…...

功能篇:springboot中实现文件导出

### Spring Boot 中实现文件导出功能 #### 概述 在现代Web应用程序中&#xff0c;文件导出是一个常见的需求&#xff0c;允许用户将数据以特定格式&#xff08;如CSV、Excel、PDF等&#xff09;下载到本地。本文将详细介绍如何使用Spring Boot实现文件导出功能&#xff0c;并…...

Redis客户端(Jedis、RedisTemplate、Redisson)

1. 简介 Redis作为一个当下很火热的非关系型数据库&#xff0c;Java从业人员基本都离不开对Redis的使用。在Java程序中该数据库&#xff0c;需要借助于市面上的开源客户端&#xff0c;如Jedis、Spring Data Redis、Redisson&#xff0c;它们可以作为操作Redis非关系型数据库的桥…...

Mybatis中SQL的执行过程

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

【数据结构——栈与队列】顺序栈的基本运算(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 相关知识 测试说明 我的通关代码: 测试结果&#xff1a; 任务描述 本关任务&#xff1a;编写一个程序实现顺序栈的基本运算。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a; 初始化栈、销毁栈、判断栈是否为空、进栈、出栈、取…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...