[CG從零開始] 3. 安裝 pyassimp 庫加載模型文件

assimp 是一個開源的模型加載庫,支持非常多的格式,還有許多語言的 binding,這裏我們選用 assimp 的 python 的 binding 來加載模型文件。不過社區主要是在維護 assimp 的 C++ 代碼,對於這些 binding 可能更新的不夠及時,比如 python 版本的就存在一些問題。

assimp 的源碼

1. 安裝 pyassimp

官方的編譯的指南,有些坑還是需要踩一下。

pyassimp 只是 assimp 的一個 wrapper,所以計算上還必須有 assimp 的庫纔行,還是免不了要去編譯 assimp。

這裏推薦採用 vcpkg 的進行管理,windows 上需要裝一下 visual studio,mac 需要裝一下 xcode,這些軟件也是標配了。我的電腦是 macOS,這裏有個坑需要注意一下,vcpkg 這個默認編譯是靜態庫 .a,我們需要編譯動態庫,所以需要改一下 vcpkg 的編譯選項。如下 vcpkg/triplets/x64-osx.cmake 中將如下選項改爲 dynamic

set(VCPKG_LIBRARY_LINKAGE dynamic)

依次執行以下命令即可。

git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
./vcpkg install assimp

等待編譯完成,即可在 vcpkg/packages/assimp_x64-osx/lib 中找到動態庫 .dylib 文件,windows 應該也是差不多的路徑。
然後可以用 pip 來安裝 pyassimp

注意! 這裏有個坑,pyassimp 的 4.1.4 版本,現在默認最新版本,存在 bug,加載模型可能會隨機 crash,github 上有個 issue 在討論這個事情,大家目前的解決方案就是回退到 4.1.3 所以在安裝的時候,我們指定一下版本。

pip install pyassimp==4.1.3

2. 調用 pyassimp API 加載模型

這個時候如果直接調用加載 API 加載模型,會報找不到庫的錯誤:

raise AssimpError("assimp library not found")
pyassimp.errors.AssimpError: assimp library not found

因爲 vcpkg 安裝的 assimp 的庫不在 pyassimp 的搜索路徑下,看了一下 pyassimp 搜索庫的路徑,基本上常用的庫的路徑他都搜索來,我們有兩種方法,1. 創建一個軟鏈接到搜索路徑中, 2. 將 assimp 庫的路徑加入環境變量 LD_LIBRARY_PATH 中。

爲了方便我創建一個軟鏈接到系統庫中

ln -s {你的 assimp 庫的路徑} /usr/local/lib

然後我們執行下面的代碼,主要 path 換成你的模型文件,這下就可以找到庫文件了。

import pyassimp
path = "box.fbx"
scene = pyassimp.load(path)
print(scene.meshes[0].vertices.shape)

3. 總結

  1. 用 vcpkg 編譯得到 assimp 的庫,注意修改編譯選項;
  2. 安裝 pyassimp 的 4.1.3 版本!!;
  3. 將 assimp 庫放到 pyassimp 可以找到的地方
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章