基于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.