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

Python的3D可视化库 - vedo (3)visual子模块 点对象的可视化控制

文章目录

  • 3 PointsVisual的方法
    • 3.1 对象属性
      • 3.1.1 顶点大小
      • 3.1.2 复制属性
      • 3.1.3 颜色设置
      • 3.1.4透明度设置
    • 3.2 对象光效
      • 3.2.1 点的形状
      • 3.2.2 点的表面光效
    • 3.3 尾随线和投影
      • 3.3.1 尾随线
      • 3.3.2 投影
    • 3.4 给对象附加文字说明
      • 3.4.1 标注
      • 3.4.2 2D标注
      • 3.4.3 气泡说明
      • 3.4.4 旗标说明
      • 3.4.5 在窗口悬挂的说明框

visual子模块包含了管理对象及其属性的可视化和外观的基类。
visual模块的 PointsVisual是点对象 Points和网格可视化对象 MeshVisual的基类。
本文对 PointsVisual类的方法做了整理和测试。

3 PointsVisual的方法

PointsVisual用于控制Points对象的可视化。

3.1 对象属性

3.1.1 顶点大小

c.point_size(value=None)
c.ps(pointsize=None)
设置或获取网格顶点的点大小。

获取点大小没问题。设置点大小后,使用show呈现会把对象变为3D点阵图,见下图。

s = vedo.Sphere()
s.ps(10)
s.show()

使用ps

有时不能显示点图。这个可能是系统显卡支持的OpenGL版本太低的缘故,需要更新显卡驱动或安装最新的OpenGL库。

3.1.2 复制属性

c.copy_properties_from(source, deep=True, actor_related=True)
从另一个Points对象复制属性。

3.1.3 颜色设置

c.color(c=False, alpha=None) c.c(color=False, alpha=None)
设置或获取网格对象的颜色。输入None时,会根据活动标量确定颜色。

# 获取颜色,返回RGB颜色数组,值范围0-1。
print(s.color(), c.color())
# 设置颜色
s.color("#00FF00")
c.color("#00FFFF")
print(s.color(), c.color())

代码运行结果:

[0.8627451  0.20784314 0.27058824] [0.13333333 0.54901961 0.22745098]
[0. 1. 0.] [0. 1. 1.]

c.cmap()
提供标量列表和颜色映射表,为每个点或单元格设置颜色。
参数如下:

  • input_cmap,颜色映射表,用于将实数转成颜色。
    可以填三类数据:
    1. VTK的查找表,可直接使用;
    2. matplotlib的线性分段颜色映射表或等价的字符串表示,会先按input_array提供的数值转为对应的颜色查找,颜色数由n_colors决定;
    3. 自定义的颜色序列,自己给定每个颜色,颜色数如果超过256,需要把n_colors改为给定的颜色数。

    自定义颜色序列如果想实现渐变色,可以借用colors模块的build_lutbuild_palette方法。

  • input_array=None,数组名称、数组或VTK数组。其中
  • on='',默认为空字符串,可填pointscells。把颜色映射表对应到点或单元格上的数据上。
  • name='Scalars',为input_array输入的数组设置名字。
  • vmin=None,把标量以给定最小值截断,小于该值的部分按这个值去查找颜色;
  • vmax=None,把标量以给定最大值截断,大于该值的部分按这个值去查找颜色。
  • n_colors=256,使用matplotlib的线性分段颜色映射表或自定义颜色序列时,其中的不同颜色的数目;
  • alpha=1.0,网格的透明度。
    也可以填透明度值的列表,对应到网格的每个顶点上。
    填单个数值时,会先按n_colors的值转为透明度列表,以便和颜色列表对应。因此在自定义颜色表的色数超过n_colors的默认值256时,必须指定到n_colors

    源码中alpha列表长度与n_colors是强关联的。

  • logscale=False,是否使用Logscale

cmap使用示例:

import vedo# 创建3个球体
s1 = vedo.Sphere(r=0.7)
s2 = vedo.Sphere(r=0.7)
s3 = vedo.Sphere(r=0.7)# 取顶点坐标的y坐标,可以使颜色从下到上变化
input_array = s1.vertices[:, 1]
a, b = min(input_array), max(input_array)# 创建vtk查找表,其中的颜色数等于输入颜色数的8倍
vtklut = vedo.colors.build_lut([(a, "#FF0000"), (b, "#00FF00")], interpolate=True)
# 使用vtk查找表上色
s1.cmap(vtklut, input_array)# 使用表示matplotlib内部的颜色映射表的字符串
s2.cmap("hot", input_array)# 创建自定义的渐变色列表,颜色数是球体的点数
palette = vedo.build_palette("#FFFF00", "#00FFFF", len(input_array))# 使用自定义颜色上色,注意需要指明颜色数
s3.cmap(palette, input_array, n_colors=len(input_array))# 展示这3种效果
vedo.show([s1, s2, s3], N=3, size=(900, 300))

展示的效果:
在这里插入图片描述
c.lut_color_at(value)
查看给定值在查找表上对应的颜色和透明度。
cmap操作之后,对象的LUT列表已有内容,因此可以使用这个方法查找颜色。

print(s1.lut_color_at(0.3))
print(s1.lut_color_at(-0.3))

返回颜色格式是numpy数组,4个值代表rgb值和透明度。

[0.26666667 0.73333333 0.         1.        ]
[0.73333333 0.26666667 0.         1.        ]

c.cellcolors
设置或获取网格的每个单元格的颜色。
通过赋值为[R,G,B][R,G,B,A]形式的颜色列表可以改变单元格颜色。列表中的颜色数需要等于网格中的单元格数。颜色和透明度值的取值范围都是[0,255]
也可以赋值为一个颜色字符串或RGBA值。
赋值时会自动创建一个名为CellsRGBA的单元格数组,可以通过c.celldata["CellsRGBA"]访问。

c.pointcolors
设置或获取每个点(网格的每个顶点)的颜色。
也是通过赋值设置颜色,具体要求和c.cellcolors一致。
会自动创建PointsRGBA数组,通过c.pointdata["PointsRGBA"]访问。

通过对cellcolors和pointcolors赋值改变球体的面和点的颜色:

from itertools import cycle, isliceimport vedo# 创建测试球
s1 = vedo.Sphere()
s2 = vedo.Sphere()
# 三种颜色循环产出的迭代器
color_cycle = cycle([(255, 0, 0), (0, 255, 0), (0, 0, 255)])
# 长度等于单元格数的颜色列表
color_list = list(islice(color_cycle, s1.ncells))
s1.cellcolors = color_list# 长度等于点数的颜色列表
color_list = list(islice(color_cycle, s2.npoints))
s2.pointcolors = color_listvedo.show([s1, s2], N=2)

渲染效果:
在这里插入图片描述

3.1.4透明度设置

c.alpha(opacity) c.opacity(alpha=None) 设置网格对象的透明度。

c.force_opaque(value=True)
强制MeshLine或点云显示为不透明的;
c.force_translucent(value=True)
强制MeshLine或点云显示为半透明;
这两个强制方法对show展示的结果没什么影响。

3.2 对象光效

3.2.1 点的形状

c.render_points_as_spheres(value=True)
使点看起来是球体的,或者是方形的。

# 随机生成10个点的坐标
pos_list = np.random.rand(10, 3)
# 创建这些点的对象
points = vedo.Points(pos_list, r=15, c=(1,0,0))
# 设置光效,这样看起来是3D的
points2.lighting("metallic")
# 默认即为球状的,False可以设置为方形的
points.render_points_as_spheres(False)
points.show()

注意下图右侧的方形,不是正方体。
在这里插入图片描述

3.2.2 点的表面光效

c.lighting()
控制物体的表面光效。具体参数如下:

  • style="",预设风格,可选["", default, metallic, plastic, shiny, glossy, ambient, off]
  • ambient=None,取值范围0-1,环境光比例;
  • diffuse=None,取值范围0-1,漫反射光比例;
  • specular=None,取值范围0-1,镜面反射光的比例;
  • specular_power=None,取值范围1-100,镜面反射光的强度;
  • specular_color=None,镜面反射的颜色。默认为对象自身的颜色。style="glossy"时镜面反射颜色值为(1,1,0.99)(接近白色),style="ambient"时镜面反射颜色值为(1,1,1)(纯白色)。
  • metallicity=None,取值范围0-1,金属质感系数;默认0。
  • roughness=None,取值范围0-1,粗糙度系数;默认0.5。

物体的光效主要通过四个参数ambientdiffusespecularspecular_power控制。
设置style="off"时,关闭光效,所填的参数值都不起作用。
默认style=""时,需要使用这些参数填参数控制光效。
其他的style分别有自己的预设参数值,把4个参数对应的值放在列表分别是:

styleambientdiffusespecularspecular_power
default0.11.00.055
metallic0.10.31.010
plastic0.30.40.35
shiny0.20.60.850
glossy0.10.70.990
ambient0.11.00.055

也可以在这些预设参数基础上人为调整。
下图为使用不同style的区别:
不同style的展示
下图左侧为ambientdiffuse不同值组合的效果。右侧是specularspecular_power不同值组合的效果(设置了specular_color="green")。
在这里插入图片描述
c.point_blurring(r=1, alpha=1.0, emissive=False)
设置点模糊。对点应用高斯卷积滤波器。在这种情况下,半径 r 以网格坐标的绝对单位表示。设置自发光后,点的光晕变为自发光。
这个方法存在BUG,暂时无法使用。

3.3 尾随线和投影

3.3.1 尾随线

c.add_trail()
为网格对象添加一条尾随线,可以通过c.trail访问尾随线对象。参数如下:

  • offset=(0, 0, 0),从对象中心点设置一个偏移向量;
  • n=50,尾随线的段数。每次update_trail后,会把上次update_trail时的位置到当前的位置做连线,这算作一段。
  • c=None,尾随线颜色;
  • alpha=1.0,尾随线透明度;
  • lw=2,尾随线的宽度;

c.update_trail()
更新正在移动的物体的尾随线;

使物体运动并更新尾随线:

# 示例点,初始位置为原点
s = vedo.Point((0, 0, 0), r=10)
# 结束点,加了结束点才会展示对应长度的坐标轴
s_end = vedo.Point((20, 0, 0))
# 球体添加尾线
s.add_trail(n=100)# 控制窗口渲染的对象
plt = vedo.show(s, s_end, axes=1, interactive=False)
for i in np.arange(0, 20, 0.01):# 新位置为x轴上下往复运动new_pos = (i, np.sin(i), 0)# 改变物体位置s.pos(new_pos)# 更新尾随线s.update_trail()# 使上述变化在窗口展现plt.render()
# 不自动关闭窗口
plt.interactive()
print(s.trail)

效果图:
运动点的尾随线
代码打印的s.trail信息:
尾随线对象的信息

3.3.2 投影

c.add_shadow()
在三个笛卡尔平面之一上生成网格的影子。
输出一个代表影子的新的网格,可以通过c.shadow访问。
默认会把影子放在边界框的底部的面上。
参数如下:

  • plane,投影的平面,可以是字符串"x""y""z"之一,分别表示x截面、y截面和z截面。也可以是一个vedo.shapes.Plane平面实例。
  • point,如果plane是字符串,point就得填一个表示截距的浮点值。否则,point需要填透视投影的相机位置。
  • direction,斜投影的方向。
  • c=(0.6, 0.6, 0.6)
  • alpha=1
  • culling=0

c.update_shadows()
更新正在移动的物体的影子;

还是使用上面的运动方式,在3个面上创建投影:

# 示例点对象,初始位置为原点
s = vedo.Point((0, 0, 0), r=20)
s_end = vedo.Point((10, 5, 4))
# 在x=2的平面上投影
s.add_shadow('x', 2.0)
# 在y=4的平面上投影
s.add_shadow('y', 4.0)
# 在z=3的平面上投影
s.add_shadow('z', 3.0)# 控制窗口渲染的对象
plt = vedo.show(s, s_end, axes=1, interactive=False, elevation=20)for i in np.arange(0, 8, 0.01):# 沿x轴上下往复运动new_pos = (i, np.sin(i), 0)s.pos(new_pos)s.update_shadows()plt.render()plt.interactive()

3个平面投影效果:
在三个平面上做投影
c.clone2d(size=None, offset=(), scale=None)
把3D的PointsMesh转为2D的演员对象Actor2D并返回。Actor2D对象会悬挂在窗口。

演员对象是VTK中可视化场景中的实体,代表一个可视化对象。演员包含了图形数据的表示信息,并负责在渲染器中正确显示这些数据。

  • size,2D演员对象的缩放大小;替代参数scale
  • offset,演员在范围[-1, 1]中的2d(x, y)坐标。

3.4 给对象附加文字说明

3.4.1 标注

c.labels()
为网格的单元格或点生成值或ID的标签。标签数目大时使用font="VTK"能加快速度。
这些标签的方向和角度会随着物体转动。
参数如下:

  • content=None,填"id""cellid"、数组名或数组编号。也能传递长度等于点或单元格的数目的数组。
  • on='points'"points""cells"
  • scale=None,设置标签的绝对大小。填None会自动确定大小。
  • xrot=0.0,标签绕x轴的旋转角度,单位是度。
  • yrot=0.0,标签绕y轴的旋转角度,单位是度。
  • zrot=0.0,标签绕z轴的旋转角度,单位是度。
  • ratio=1,跳跃比,用来减少大型网格的标签数。
  • precision=None,标签数值的精度。
  • italic=False,是否斜体;
  • font='',字体;
  • justify='',对齐;
  • c='black',颜色;
  • alpha=1.0,透明度;

创建单元格的标注和点的标注,和球体一同渲染:

s1 = vedo.Sphere(res=10, c="#CC8800")
# 标注单元格,compute_normals可以让四周的对象自动对齐,而不会穿模
s1.linewidth(0.1).compute_normals()
labels1 = s1.labels("id", on="cells")s2 = vedo.Sphere(res=10, c="#00CC22")
# 标注点
s2.linewidth(0.1)
labels2 = s2.labels("id", on="points")vedo.show([(s1, labels1, vedo.Text2D("cells id")), (s2, labels2, vedo.Text2D("points id"))], N=2)

标注单元格和点

3.4.2 2D标注

c.labels2d()
为网格的单元格或点创建二维的值或ID的标签。
2D标签的方向、角度是固定的,不会随着物体的拖拽而转动。
参数如下:

  • content="id",填"id""cellid"或数组名。
  • on='points'"points""cells"
  • scale=1.0,设置标签的绝对大小。填None会自动确定大小。
  • precision=4,标签数值的精度。
  • font='Calcao',字体;
  • justify='bottom-left',对齐;
  • frame=False,是否在标签周围画框线;
  • c='black',颜色;
  • bc=None,标签背景色;
  • alpha=1.0,透明度

创建2D标注:

s = vedo.Sphere(res=8, c="#CC8800")
s.linewidth(0.1)
labels = s.labels2d("id")
vedo.show(s, labels, size=(500, 500))

2D标注

c.legend(txt)
预设一个图例文本。效果未知。

3.4.3 气泡说明

c.flagpole()
生成一个用来描述对象的气泡说明。
文字默认会随着物体而转动。可以使用flagpole.follow_camera()方法,让文字一直面向相机。
参数如下:

  • txt=None,展示的文本。默认是文件名或对象名。
  • point=None,旗杆指向的的位置;
  • offset=None,文本相对于point位置的偏离值。
  • s=None,旗杆元素的大小;
  • font='Calco',字体;
  • rounded=True,在文本周围加圆形或方形的文本框;
  • c=None,文本和文本框的颜色;
  • alpha=1.0,文本和文本框的透明度;
  • lw=2,文本框宽度;
  • italic=0.0,文本倾斜度;
  • padding=0.1,边距;

3.4.4 旗标说明

c.flagpost()
生成一个用来描述对象的旗杆说明。旗杆垂直于锚点。
参数如下:

  • txt=None,展示的文本。默认是文件名或对象名。
  • point=None,旗杆标记的锚点位置;
  • offset=None,3D位移或偏移;
  • s=1.0,文字大小;
  • c="k9",文本和线的颜色;
  • bc="k1",标记的背景色;
  • alpha=1,文本和文本框的透明度;
  • lw=0,文本框的粗细;
  • font='Calco',文本字体
  • justify="center-left",内部文本对齐方式;
  • vspacing=1.0,文本行间距;

3.4.5 在窗口悬挂的说明框

c.caption()
为对象创建一个2D的标题,可以随着相机移动。不支持Latex文字。
参数如下:

  • txt=None,要渲染的文本,默认为文件名;
  • point=None,锚点;
  • size=(0.3, 0.15),标题框的宽和高;
  • padding=5,标题框的内边距,单位为像素;
  • font='Calco',字体;
  • justify="center-right",内部文字对齐方式;
  • vspacing=1.0,行间距;
  • c=None,文字和标题框的颜色;
  • alpha=1.0,文字和标题框的透明度;
  • lw=1,框线宽度;
  • ontop=True,置顶2D标题;

对比上述3种风格:

# 3个示例球体
s1 = vedo.Sphere(c="#CCCC00").compute_normals()
s2 = vedo.Sphere(c="#AA00AA").compute_normals()
s3 = vedo.Sphere(c="#00DD00").compute_normals()
# 气泡
fp1 = s1.flagpole("flagpole", c="black")
# 旗标
fp2 = s2.flagpost("flagpost")
# 悬挂说明
fp3 = s3.caption("caption", c="black")vedo.show([(s1, fp1, vedo.Text2D("flagpole", s=3)),(s2, fp2, vedo.Text2D("flagpost", s=3)),(s3, fp3, vedo.Text2D("caption", s=3))], N=3, size=(1500, 500))

3种风格的说明文字

相关文章:

Python的3D可视化库 - vedo (3)visual子模块 点对象的可视化控制

文章目录 3 PointsVisual的方法3.1 对象属性3.1.1 顶点大小3.1.2 复制属性3.1.3 颜色设置3.1.4透明度设置 3.2 对象光效3.2.1 点的形状3.2.2 点的表面光效 3.3 尾随线和投影3.3.1 尾随线3.3.2 投影 3.4 给对象附加文字说明3.4.1 标注3.4.2 2D标注3.4.3 气泡说明3.4.4 旗标说明3…...

计算机网络易混淆知识点串记

文章目录 计算机网络易混淆知识点串记各层PDU首部:地址长度 计算机网络易混淆知识点串记 各层PDU首部: PUD首部长度 (B:字节)首部单位数据链路–帧帧首:14B帧尾部:4B——IPV420~60字节4B [通过4位二进制表示]IPV6固定首部40字节[可拓展]4BTCP20~60字节4BUDP8B字节 地址长度 …...

信息安全实验--密码学实验工具:CrypTool

1. CrypTool介绍💭 CrypTool 1的开源教育工具,用于密码学研究。通过CrypTool 1,可以实现加密和解密操作,数字签名。CrypTool1和2有很多区别的。 2. CrpyTool下载🔧 在做信息安全实验--密码学相关实验时,发…...

Leetcode 将有序数组转换为二叉搜索树

算法思想及代码解析: 这段代码的目的是将一个有序数组转换为 高度平衡的二叉搜索树(Balanced Binary Search Tree, BST)。以下是算法的详细解释: 1. 什么是高度平衡的二叉搜索树? 二叉搜索树:对于树中的每…...

VMware虚拟机安装Win7专业版详细教程(附镜像包)

目录 一、Win7镜像下载 二、配置虚拟机 三、安装Win7 四、常见问题 一、Win7镜像下载 镜像下载链接:https://pan.quark.cn/s/a8d3a2880101 此镜像为Win7专业版(收藏级镜像 已自用几年) 官方纯净系统没有附带任何其他第三方软件&#xf…...

IDEA算法的详细介绍及Python实现

目录 IDEA算法的详细介绍及Python实现引言第一部分:IDEA算法的原理与背景1.1 IDEA算法的来源与特点1.2 IDEA算法的核心步骤第二部分:IDEA算法的Python实现(面向对象设计)2.1 核心类设计2.2 代码实现2.3 使用示例第三部分:案例1 - 函数优化问题(策略模式)3.1 问题描述3.2…...

Spring Boot 开发环境搭建详解

下面安装spring boot的详细步骤,涵盖了从安装 JDK 和 Maven 到创建和运行一个 Spring Boot 项目的全过程。 文章目录 1. 安装 JDK步骤 1.1:下载 JDK步骤 1.2:安装 JDK步骤 1.3:配置环境变量 2. 安装 Maven步骤 2.1:下载…...

Element-Ui组件(icon组件)

一、前言 本篇文章主要是对官网的Icon组件进行总结归纳Icon 图标 | Element Plus 在现代Web应用开发中,图标是用户界面设计中不可或缺的一部分。它们不仅提升了用户体验,还使得信息的传达更加直观和高效。本文主要对Element Plus 官方提供的Icon组件进行…...

使用docker搭建hysteria2服务端

源链接:https://github.com/apernet/hysteria/discussions/1248 官网地址:https://v2.hysteria.network/zh/docs/getting-started/Installation/ 首选需要安装docker和docker compose 切换到合适的目录 cd /home创建文件夹 mkdir hysteria创建docke…...

Docker login 报证书存储错误的解决办法

文章目录 docker login 出现错误,提示:Error saving credentials: error storing credentials - err: exit status 1, out: Cannot autolaunch D-Bus without X11 $DISPLAY 环境 使用的是 Mint Linux ,容器为 docker-ce 最新版 1 2 3 4 $…...

vxe-modal VxeUI 窗口组件弹窗多窗口模式

VxeUI 实现在 vue 中使用弹窗组件,弹窗多个窗口可叠加,实现多实例的窗口组件。 npm install vxe-pc-ui4.3.6// ...import VxeUI from vxe-pc-uiimport vxe-pc-ui/lib/style.css// ...createApp(App).use(VxeUI).mount(#app)// ...官网:https…...

华为昇腾 acl_pytorch

目录 sam部署教程: segment-anyghing地址: sam onnx地址: 报错: encode继续报错: sam部署教程: Ascend/ModelZoo-PyTorch - Gitee.com segment-anyghing地址: https://github.com/visher…...

Mybatis控制台打印SQL执行信息(执行方法、执行SQL、执行时间)

文章目录 前言一、基本功能介绍1.1本章功能效果预览图: 二、可执行源码2.1 yaml基础配置2.2 MybatisAnalyzeSQLInterceptor实现SQL拦截 前言 SQL性能监控是一个程序必要的功能,通常我们可以使用数据库自带的客户端工具进行SQL性能分析。然而对于一些专业度不高的人…...

Easyui 实现订单拆分开票功能

Easyui 实现订单拆分开票功能 需求 1、实现一个订单开具多分发票功能; 2、支持拆行; 3、支持拆数量; 流程设计 1、操作页面展示订订单头信息,订单明细信息 2、点击新增发票按钮弹出一个弹出框用于创建一张拆分发票,弹…...

docker-elasticsearch-kibana-logstash

一、安装 Elasticsearch 尝试直接拉取 Elasticsearch 镜像: 执行 docker pull docker.elastic.co/elasticsearch/elasticsearch,拉取失败,错误提示为 “Error response from daemon: manifest for docker.elastic.co/elasticsearch/elasticse…...

深入理解注意力机制(Attention Mechanism)

在深度学习中,“注意力机制(Attention Mechanism)”是近年来的一个重要突破。它最初被提出用于处理自然语言处理(NLP)任务,但如今已经广泛应用于计算机视觉、强化学习和其他领域。注意力机制赋予模型一种“…...

大数据-231 离线数仓 - DWS 层、ADS 层的创建 Hive 执行脚本

点一下关注吧!!!非常感谢!!持续更新!!! Java篇开始了! 目前开始更新 MyBatis,一起深入浅出! 目前已经更新到了: Hadoop&#xff0…...

vitess使用:基于源码运行vtctldclient工具

继续未完成的探索事业。 这篇文章《vitess使用:从部署到go客户端连接查询》记录了基于官方文档起的一个vitess的server。由于设置分库分表的规则,需要使用vtctldclient这个工具,这个工具的摸索费了诸多周折,《vitess使用记录&…...

计算机毕业设计 | SpringBoot+vue健身房管理系统(附源码+论文)

1,研究背景 互联网概念的产生到如今的蓬勃发展,用了短短的几十年时间就风靡全球,使得全球各个行业都进行了互联网的改造升级,标志着互联网浪潮的来临。在这个新的时代,各行各业都充分考虑互联网是否能与本行业进行结合…...

计算机网络-GRE(通用路由封装协议)简介

昨天我们学习了VPN的基本概念,虚拟专用网络在当前企业总部与分支间广泛使用。常用的划分方法为基于协议层次有GRE VPN、IPSec VPN、L2TP VPN、PPTP VPN、SSL VPN等。其实我有考虑该怎么讲,因为在IP阶段好像虚拟专用网络讲得不深,在IE的阶段会…...

汽车渲染领域:Blender 和 UE5 哪款更适用?两者区别?

在汽车渲染领域,选择合适的工具对于实现高质量的视觉效果至关重要。Blender和UE5(Unreal Engine 5)作为两大主流3D软件,各自在渲染动画方面有着显著的差异。本文将从核心定位与用途、工作流程、渲染技术和灵活性、后期处理与合成四…...

服务器数据恢复—光纤存储FC硬盘数据恢复案例

服务器存储数据恢复环境: 某品牌光纤存储上共有16块FC硬盘。存储上的卷映射到Linux操作系统上。Linux操作系统上运行Oracle数据库。 服务器存储故障&检测: 存储上2块硬盘故障灯亮起,存储映射到linux操作系统上的卷挂载不上,业…...

MySQL系列之远程管理(安全)

导览 前言Q:如何保障远程登录安全一、远程登录的主要方式1. 用户名/口令2. SSH3. SSL/TLS 二、使用TLS协议加密连接1. 服务端2. 客户端 结语精彩回放 前言 在我们的学习或工作过程中,作为开发、测试或运维人员,经常会通过各类客户端软件&…...

硬菜!高精度!BO-Transformer贝叶斯优化编码器多特征分类预测/故障诊断

硬菜!高精度!BO-Transformer贝叶斯优化编码器多特征分类预测/故障诊断 目录 硬菜!高精度!BO-Transformer贝叶斯优化编码器多特征分类预测/故障诊断效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现BO-Transform…...

idea_常用设置

相关设置 项目的JDK设置out目录取消自动更新设置主题设置菜单和窗口字体大小滚轮调节字体大小显示行号与方法分隔符代码智能提示忽略大小写自动导包配置设置项目文件编码设置控制台的字符编码修改类头的文档注释信息设置自动编译 项目的JDK设置 File -> Project Structure -…...

C# 中的异步流:高效处理序列数据

C#中的异步流(Async Streams)。异步流是C# 8.0引入的一个新特性,它允许你异步地处理序列数据,非常适合处理大量数据或长时间运行的任务。以下是一篇关于C#中异步流的文章。 引言 在现代应用程序开发中,处理大量数据或…...

Spring WebFlux SSE(服务器发送事件)的正确用法

在SpringBoot2下SSE实现是返回一个SseEmitter,然后通过SseEmitter的send方法来发送事件. 在SpringBoot3的WebFlux 下SSE实现是返回一个Flux<ServerSentEvent<?>>,但是怎么手动向客户端发送SSE事件搜遍全网也没有看到一个讲清楚的.网上的例子一般都是这样的: GetM…...

pyhton+yaml+pytest+allure框架封装-全局变量渲染

我们在日常测试中 会有一个接口中多个值的情况 比如这种 { "name": "thread", "value": "4986-MainThread", "status": "framework", "start": "pytest", …...

Redis五大基本类型——Set集合命令详解(命令用法详解+思维导图详解)

目录 一、Set集合类型介绍 二、常见命令 1、SADD 2、SMEMBERS 3、SISMEMBER 4、SCARD 5、SRANDMEMBER 6、SPOP 7、SMOVE 8、SREM ​编辑 9、集合间操作 &#xff08;1&#xff09;SINTER &#xff08;2&#xff09;SINTERSTORE &#xff08;3&#xff09;SUNION…...

网络协议之邮件协议(SMTP、POP3与IMAP)

一、引言 在数字化时代&#xff0c;电子邮件已成为人们日常沟通和信息交流的重要工具。电子邮件系统的稳定运行离不开一系列网络协议的支撑&#xff0c;其中SMTP、POP3和IMAP是最为关键的三个协议。它们分别负责邮件的发送、接收和管理&#xff0c;共同构建了一个高效、稳定的…...

【GAMES101笔记速查——Lecture 20 Color and Perception】

颜色与感知 目录 1 光场&#xff08;Light Field / Lumigraph&#xff09; 1.1 全光函数 1.1.1 改进&#xff1a;引入波长 1.1.2 改进&#xff1a;添加时间t 1.1.3 改进&#xff1a;人可以移动&#xff0c;添加空间坐标 1.1.4 改进&#xff1a;不把函数当电影来看。 1.…...

全新配置ubuntu18.04深度学习环境

1、下载显卡驱动 1.1、驱动下载 连接&#xff1a;显卡驱动 手动驱动搜索-》查找-》查看-》下载 下载可使用指令 wget https://us.download.nvidia.com/XFree86/Linux-x86_64/535.216.01/NVIDIA-Linux-x86_64-535.216.01.run 2、下载安装cuda12.0 wget https://developer.do…...

C++初阶——类和对象(下)

目录 1、再探构造函数——初始化列表 2、类型转换 3、static成员 4、友元 5、内部类 6、匿名对象 7、对象拷贝时编译器的优化(了解) 1、再探构造函数——初始化列表 1. 构造函数初始化除了使用函数体内赋值&#xff0c;还有一种方式——初始化列表&#xff0c; 初始化列…...

Android Framework SurfaceFlinger面试题及参考答案

目录 请简述 SurfaceFlinger 在 Android 系统中的作用。 SurfaceFlinger 是如何与 CPU、GPU 以及显示器协同工作的? 解释一下 Android 系统中的三块 Graphic Buffer 及其用途。 VSYNC 信号在 Android 渲染机制中扮演什么角色? 请描述 SurfaceFlinger 如何分发 VSYNC 信号…...

STM32 外设简介

STM32 外设简介 STM32 是由意法半导体 (STMicroelectronics) 开发的一系列基于 ARM Cortex 内核的微控制器&#xff0c;广泛应用于嵌入式系统中。STM32 系列的一个重要特点是其丰富而强大的外设模块&#xff0c;支持多种接口和功能&#xff0c;能满足工业控制、物联网、消费电…...

java操作doc——java利用Aspose.Words操作Word文档并动态设置单元格合并

在实际工作中&#xff0c;如果业务线是管理类项目或者存在大量报表需要导出的业务时&#xff0c;可以借助第三方插件实现其对应功能。 尤其是需要对word文档的动态操作或者模板数据的定向合并&#xff0c;使用Aspose会相对来说容易一些&#xff0c;而且相关文档比较完整&#…...

人工智能—机器学习-图像处理

1. 人工智能&#xff08;AI&#xff09; 定义&#xff1a;人工智能是计算机科学的一个分支&#xff0c;旨在开发能够模拟人类智能的系统&#xff0c;包括学习、推理、问题解决、感知和语言理解等能力。子领域&#xff1a; 机器学习&#xff08;ML&#xff09;&#xff1a;使计…...

数据结构——树

参考&#xff1a;数据结构&#xff08;C版&#xff09;第2版 [王红梅] 文章目录 树和二叉树基本术语二叉树概念二叉树的性质二叉树的存储顺序存储二叉链表 二叉树的遍历广度遍历深度遍历 树和二叉树 基本术语 结点的度、树的度&#xff1a;某结点拥有子树的个数为该结点的度&…...

快速理解微服务中Fegin的概念

一.由来 1.在传统的架构里面&#xff0c;我们是通过使用RestTemplate来访问其他的服务&#xff0c;但是这种方式就存在了一个很大的缺陷&#xff0c;也就是被调用方如果发生了服务的迁移(IP和端口发生了变化)&#xff0c;那么调用方也需要同步的在代码里面进行修改&#xff0c;…...

testImplementation和androidTestImplementation区别

testImplementation和androidTestImplementation区别 testImplementation 和 androidTestImplementation 是 Gradle 中用于添加测试依赖的配置&#xff0c;主要区别在于测试的类型和运行的环境&#xff1a; 1. testImplementation 用于&#xff1a;单元测试运行环境&#xf…...

Vue前端开发2.3.2-4 绑定指令

本文介绍了Vue中的绑定指令&#xff0c;包括属性绑定指令v-bind、事件绑定指令v-on以及双向数据绑定指令v-model。通过创建单文件组件&#xff0c;演示了如何使用这些指令来控制DOM属性、监听事件和实现表单输入与数据的双向同步。同时&#xff0c;探讨了v-model的修饰符如.num…...

使用ElementUI中的el-table制作可编辑的表格

在前端开发时&#xff0c;可能会需要用到可编辑的表格控件。一些原生的UI框架并不支持Table控件的可编辑功能&#xff0c;所以只能自己实现。 以下用Vue3Element-Plus进行示例开发。 一、实现可编辑的单元格 我想要实现的效果是&#xff0c;鼠标移动到el-table的某行时&…...

pytest 通过实例讲清单元测试、集成测试、测试覆盖率

1. 单元测试 概念 定义: 单元测试是对代码中最小功能单元的测试&#xff0c;通常是函数或类的方法。目标: 验证单个功能是否按照预期工作&#xff0c;而不依赖其他模块或外部资源。特点: 快速、独立&#xff0c;通常是开发者最先编写的测试。 示例&#xff1a;pytest 实现单…...

概率论中交并集的公式

文章目录 对于相容事件且独立事件1. 同时出现的概率,即 P ( A ∩ B ) P(A\cap B) P(A∩B):2. 出现任意一个的概率,即 P ( A ∪ B ) P(A\cup B) P(A∪B): 对于相容事件且依赖事件1. 同时出现的概率,即 P ( A ∩ B ) P(A\cap B) P(A∩B):特殊的,对于独立事件 2. 出现任意一个的概…...

在Ubuntu2004中搭建基于ESP-IDF v5.1的ESP32-S3开发环境

在Ubuntu2004中搭建基于ESP-IDF v5.1的ESP32-S3开发环境 目录 1 基本资料 2 注意事项 2.1 子模块检出失败处理 2.2 选择 Espressif 下载服务器 2.3 自定义工具安装路径 2.4 导出环境变量 2.5 测试基础环境 3 创建自己的工程 3.1 创建基础应用工程 3.2 创建组件(…...

Vue 项目中 Axios 的封装方向探索

什么是 Axios? Axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 Node.js 环境中发送 HTTP 请求。它的主要作用是帮助前端与后端进行数据交换,通常用于向后端接口发送 GET、POST、PUT、DELETE 等请求并处理返回的响应。 Axios 的特点: 基于 Promise,支持异步编程。…...

LLM应用-prompt提示:RAG query重写、相似query生成 加强检索准确率

参考&#xff1a; https://zhuanlan.zhihu.com/p/719510286 1、query重写 你是一名AI助手&#xff0c;负责在RAG&#xff08;知识库&#xff09;系统中通过重构用户查询来提高检索效果。根据原始查询&#xff0c;将其重写得更具体、详细&#xff0c;以便更有可能检索到相关信…...

详解Qt QBuffer

文章目录 **QBuffer 的详解****前言****QBuffer 是什么&#xff1f;****QBuffer 的主要用途****构造函数****主要成员函数详解****1. open()****原型&#xff1a;****作用&#xff1a;****参数&#xff1a;****返回值&#xff1a;****示例代码&#xff1a;** **2. write()****原…...

【编程语言】Kotlin快速入门 - 泛型

Kotlin的泛型与Java十分类似&#xff0c;也是使用这种的语法结构&#xff1a; class Fruit<T> {fun eat(f : T): Unit {println("eat...")}fun <T> buy(p : T): T {return p} }泛型限制 和Java一样&#xff0c;Kotlin也允许泛型是某个类的子类 fun &l…...

Oracle 执行计划查看方法汇总及优劣对比

在 Oracle 数据库中&#xff0c;查看执行计划是优化 SQL 语句性能的重要工具。以下是几种常用的查看执行计划的方法及其优劣比较&#xff1a; 1. 使用 EXPLAIN PLAN FOR 和 DBMS_XPLAN.DISPLAY 方法 执行 EXPLAIN PLAN FOR 语句&#xff1a; EXPLAIN PLAN FOR SELECT * FROM …...