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. 【高并发】通过源码深度分析线程池中Worker线程的执行流程

    大家好,我是冰河~~ 在<高并发之--通过ThreadPoolExecutor类的源码深度解析线程池执行任务的核心流程>一文中我们深度分析了线程池执行任务的核心流程,在ThreadPool ...

  2. WPF 实现用户头像选择器

    制作一个用户头像选择器仿 WeGame 制作一个用户头像选择Canvas为父控件所实现,展示图片使用Image,Path当作上方的蒙版; Canvas:主要用途方便移动Image,设置ClipToBo ...

  3. DP の 百题大过关(5/100)

      动态规划自古以来是DALAO凌虐萌新的分水岭,但有些OIer认为并没有这么重要--会打暴力,大不了记忆化.但是其实,动态规划学得好不好,可以彰显出一个OIerOIer的基本素养--能否富有逻辑地思 ...

  4. Luogu1137 旅行计划 (拓扑排序)

    每次入队时DP : \(f[v] = \max \{f[u] + 1\}\) #include <iostream> #include <cstdio> #include &l ...

  5. java学习第二天面向对象.day08

    this 在方法中表示调用当前方法的对象,this与主方法中对象类名调用是同理的,也是去指向堆中的地址. this可以解决成员变量和形参的问题 使用构造器还是setter方法 构造器:在创建对象的时侯 ...

  6. 用 Windows Server 2019 搭建求生之路服务器

    准备工作 要搭建一台 Windows Server 的求生之路服务器需要做以下几点前置工作: 购买一台云服务器,如腾讯云: 下载 SteamCMD: 安装 SourceMod.MateMod.L4dT ...

  7. 管理 MongoDB 用户和权限

    创建用户 创建用户的函数是:db.createUser(). 创建用户时,需要为该用户添加权限.可添加的权限以及说明: 权限 作用 read 允许用户读取指定数据库. readWrite 允许用户读写 ...

  8. 快速掌握 Base 64 | 学 Java 密码系列

    Java 密码系列 - Java 和 JS Base 64 Base 64 不属于密码技术,仅是编码方式.但由于在 Java.JavaScript.区块链等出现的频率较高,故在本系列文章中首先分享 B ...

  9. 爬虫简介与excel表格操作

    爬虫简介与excel表格操作 re模块简介 1.在python中使用正则表达式的话那么re模块就是选择之一 import re # 导入re模块 2.在re模块中使用findall找到所有我们给他的值 ...

  10. 第八十三篇:Vue购物车(四) 总价计算

    好家伙, 1.总价计算 来了,又先是一波分析: 我们用一个计算属性amt 我们把item中被勾选的项用一个过滤器过滤器来 然后用一个循环相加,把商品的价格乘以商品的数量, 把这个总值返回出去, 然后组 ...