基于python的三维模型演化可视化
本项目的主要内容为总结了3种不同的可视化方案( trimesh + matplotlib 库、 pyvista 库、 vedo 库),并通过案例对可视化效果进行展示,最终通过模型动态演化案例给出最佳效果的可视化方案
本期结构图为

0 环境搭建
项目开发对 anaconda 和 pycharm 的版本没有限制,按照站内的其他项目安装即可,此外,本项目中不包含任何只能在特定系统上才能顺利运行的库
在进行下面操作时,默认已安装了anaconda和pycharm,本次测试使用的是windows系统,但是ubuntu系统下的对应操作代码与ubuntu下的完全相同,mac系统下的操作代码会在之后更新
如果尚未安装anaconda,可参考往期博客
ubuntu 22.04服务器版本cuda、Anaconda、pytorch环境配置以及安装llama_factory-CSDN博客
此外,如果看过3维模型第一期的朋友也可以直接跳过anaconda构建环境的步骤,直接安装新的库
下面回到正题
首先,给项目创建虚拟环境,这里使用的是python 3.9.20,建议使用相同的环境以确保不会出现一些奇怪的错误。在windows系统下通过 win + r 并输入 cmd ,ubuntu系统下可通过 ctrl + alt + t 打开终端,现输入下列代码
conda create -n obj_viewer python==3.9 -y
虚拟环境的创建除了网络错误外,基本不会报错,继续进入下一步。
P.S. 如果网络出现错误的话,首先查看是否使用了梯子,如果开启了,就直接关闭,如果没有开启,就换成国内源,基本可解决问题
加载创建出的虚拟环境
conda activate obj_viewer
下面,将安装所有需要用到的库,即本次的主角, trimesh 和 pyassimp
pip install trimes pyassimp trimesh matplotlib mpl_toolkits pyvista vedo
这里的库直接默认安装即可,无特殊版本需求。这里安装无报错,就可以关闭 cmd 窗口(windows)或 终端(ubuntu),主要的代码执行和环境加载,我们会在 pycharm 中进行,作为专业的IDE平台, pycharm 具有诸多好用的小功能,感兴趣的小伙伴可以查阅其 官网 ,或者在站内搜索哈 😄。
接下来在合适的磁盘中,创建文件夹,此处使用的是 F盘 中的 demo 文件夹,及存储有演化模型数据的 evolution_test
文件夹接着在 pycharm 中打开该文件夹,并创建本次需要测试的文件 demo_visualize_trimesh.py
、 demo_visualize_pyvista.py
、 demo_visualize_vedo.py
如下图所示
P.S. 忽略 transfer_results
文件夹 和 trasfer_test.py
文件,这俩是在上一篇博客中使用的程序😋😋😋

这里的各种 evol_*.obj
是从开源网站上下载的,比较推荐的是著名的 free 3D
。
链接为 free 3D官网
接下来,要通过 设置
选项,来设置当前项目的编译器,即之前创建的环境 obj_viewer
。首先在 文件
- 设置
如下图所示

接下来,找到 Python 解释器
并点击 添加解释器
按钮,以及 添加本地解释器
按钮,如下图所示

然后,通过在 添加Python 解释器 选项卡中,索引到刚才创建 anaconda 环境的文件夹中,并找到 python.exe 。我的电脑是在 D:\anaconda\envs\interface_tester\python.exe
,最后点击确定。需要注意的是,这里的 .exe
文件,一个字母都不能不能差,要不会在之后的程序运行部分疯狂报错,或者干脆加载编译器失败。

此时这个界面也会显示出编译器的具体名称,之后一路确定即可。最后在设置界面就会看到已经加载好的环境,如果前几步成功,这一步加载的库应该与下图中完全相同,此时点击右下角 应用
即可

然后点击 Pycharm
下方的 终端
选项卡,可看到 obj_viewer
环境已经加载成功,并可供调用,且当前的运行文件夹为 ....\demo

接下来将代码复制到对应的文件即可:
demo_visualize_trimesh.py
对应代码:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.art3d import Poly3DCollection
import trimesh"""
3D 模型文件可视化,可直接读取.obj文件,并进行可视化参数:input_file (str): 输入文件路径(支持 obj, ply, glb, stl 等格式)。output_file (str): 输出文件路径(目标文件格式根据扩展名自动确定)。
"""# 加载 .obj 文件
obj_file = 'evolution_test/evol_0.obj' # 替换为你的 .obj 文件路径
mesh = trimesh.load(obj_file)# 获取顶点和面
vertices = mesh.vertices
faces = mesh.faces# 创建绘图
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')# 绘制三维模型
ax.add_collection3d(Poly3DCollection(vertices[faces],facecolor=[0.8, 0.8, 0.8],edgecolor='none'))# 设置比例和视角
ax.set_box_aspect([1, 1, 1]) # 保持三维比例
ax.view_init(elev=20, azim=30) # 设置视角# 调整坐标范围
max_range = (vertices.max(axis=0) - vertices.min(axis=0)).max() / 2
mid = vertices.