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 可以找到的地方

[CG从零开始] 3. 安装 pyassimp 库加载模型文件的更多相关文章

  1. tensorflow学习笔记2:c++程序静态链接tensorflow库加载模型文件

    首先需要搞定tensorflow c++库,搜了一遍没有找到现成的包,于是下载tensorflow的源码开始编译: tensorflow的contrib中有一个makefile项目,极大的简化的接下来 ...

  2. WPF 3D动态加载模型文件

    原文:WPF 3D动态加载模型文件 这篇文章需要读者对WPF 3D有一个基本了解,至少看过官方的MSDN例子. 一般来说关于WPF使用3D的例子,都是下面的流程: 1.美工用3DMAX做好模型,生成一 ...

  3. WebGL学习笔记(十二):加载模型文件

    目前为止,我们用到的模型顶点uv信息等,都是直接定义在代码中的,实际使用中,这些数据应该是由3D编辑器编辑好后按照一定的格式存储在文件中的,我们需要从文件中提取出对应的数据之后,组合成我们可以使用的信 ...

  4. XP安装IIS来加载aspx页面(Web调用SAP数据)

    1,安装IIS 在XP中安装IIS方法很简单,安装时需要提供安装光盘来加载I386文件,可以使用虚拟光驱或光盘.在此做个简单说明(控制面板-添加/删除 Windows组件-勾选Internet信息服务 ...

  5. NeHe OpenGL教程 第三十一课:加载模型

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  6. 安卓奇葩问题之.so库加载不了

    真是哔了狗了. 今天突然遇到一个问题:之前用第三方的密码控件,给了一个.so库文件.然后我就放在了/jniLibs/armeabi目录下. 运行,一切都很OK. 然后重点来了.N天之后的今天,突然打包 ...

  7. 使用Redirector插件解决googleapis公共库加载的问题【转】

    转自:http://www.cnblogs.com/kari/p/5860371.html 最近访问一些面向国外的网站总是会出现ajax.googleaips.com无法加载的情况.以下为加载stac ...

  8. 使用Redirector插件解决googleapis公共库加载的问题

    最近访问一些面向国外的网站总是会出现ajax.googleaips.com无法加载的情况.以下为加载stackoverflow时的情境: 图1 -无法加载的google公共库 问题的原因是谷歌没有在国 ...

  9. LIB库加载方法-引用百度百科

    LIB库加载方法,有三种,如下: 1.LIB文件直接加入到工程文件列表中 在VC中打开File View一页,选中工程名,单击鼠标右键,然后选中\"Add Files to Project\ ...

随机推荐

  1. 搭建一个完整的K8S集群-------基于CentOS 8系统

    创建三个centos节点: 192.168.5.141 k8s-master 192.168.5.142 k8s-nnode1 192.168.5.143 k8s-nnode2 查看centos系统版 ...

  2. JS中的数据类型及转换

    js的六大类型 js中有六种数据类型,Boolean: 布尔类型 Number:数字(整数int,浮点数float ) String:字符串 Object:对象 (包含Array数组 ) 特殊数据类型 ...

  3. Multi-Party Threshold Private Set Intersection with Sublinear Communication-2021:解读

    记录阅读论文的笔记. 摘要 总结: (1)CRYPTO 2019:The Communication Complexity of Threshold Private Set Intersection- ...

  4. WPF开发随笔收录-WriteableBitmap绘制高性能曲线图

    一.前言 之前分享过一期关于DrawingVisual来绘制高性能曲线的博客,今天再分享一篇通过另一种方式来绘制高性能曲线的方法,也就是通过WriteableBitmap的方式:具体的一些细节这里就不 ...

  5. 关于MySQL function创建的限制

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. MySQL 的function创建会有各种限制,经常使用的语句的限制如下: 1.CONTAINS_DYNAMIC_SQL ...

  6. ebook下载 | 《 企业高管IT战略指南——企业为何要落地DevOps》

    "当下,企业DevOps转型不仅是IT部门的事情,更是企业高管必须关注的焦点.DevOps是一项需要自上而下推动的变革运动,只有从顶层实施,才能获得成功.本书将介绍企业高管必须了解的,Dev ...

  7. Apache DolphinScheduler 是如何诞生的

    作者 | 代立冬,李岗 排版 | 开源之道小助理 Apache DolphinScheduler,简称"DS", 中文名 "小海豚调度"(海豚聪明.人性化,又左 ...

  8. 定语从句"介词+which/whom"的用法

    介词+which [例句]My elder sister works in the famous university. She graduated from the famous universit ...

  9. 浅拷贝工具类,快速将实体类属性值复制给VO

    /** * 浅拷贝的工具类 */ public class PropertiesUtil { /** * 两个类,属性名一样的元素,复制成员. */ public static void copy(O ...

  10. WebGPU实现Ray Packet

    大家好~本文在如何用WebGPU流畅渲染百万级2D物体?基础上进行优化,使用WebGPU实现了Ray Packet,也就是将8*8=64条射线作为一个Packet一起去访问BVH的节点.这样做的好处是 ...