用于读取、写入和管理khronos组gltf和gltf格式的三维对象的python库。

pygltflib的Python项目详细描述


pygltflib

这是一个用于读取、写入和处理gltf文件的库。适用于蟒蛇3.6及以上。

它支持整个规范,包括材料和动画。主要功能有:

  • GLB和GLTF支持
  • 缓冲区数据转换
  • 扩展名
  • 所有属性都是提示类型

快速启动

pip install pygltflib

如何……。

创建一个空的gltF2对象?

frompygltflibimportGLTF2gltf=GLTF2()

添加场景?

frompygltflibimportGLTF2,Scenegltf=GLTF2()scene=Scene()gltf.scenes.append(scene)# scene available at gltf.scenes[0]

加载文件?

filename="glTF-Sample-Models/2.0/AnimatedCube/glTF/AnimatedCube.gltf"gltf=GLTF2().load(filename)

加载二进制glb文件?

glb_filename="glTF-Sample-Models/2.0/Box/glTF-Binary/Box.glb"glb=GLTF2().load(glb_filename)# load method auto detects based on extension

加载扩展名异常的二进制文件?

glb=GLTF2().load_binary("BinaryGLTF.glk")# load_json and load_binary helper methods

将缓冲区转换为glb二进制缓冲区?

frompygltflibimportGLTF2,BufferFormatgltf=GLTF2().load("glTF-Sample-Models/2.0/Box/glTF/Box.gltf")gltf.convert_buffers(BufferFormat.BINARYBLOB)# convert buffers to GLB blob

将缓冲区转换为数据uri(嵌入式)缓冲区?

gltf.convert_buffers(BufferFormat.DATAURI)# convert buffer URIs to data.

将缓冲区转换为二进制文件(外部)缓冲区?

gltf.convert_buffers(BufferFormat.BINFILE)# convert buffers to filesgltf.save("test.gltf")# all the buffers are saved in 0.bin, 1.bin, 2.bin.

将glb转换为gltf文件?

pip install pygltflib
0

访问分机?

pip install pygltflib
1

向属性添加自定义属性?

pip install pygltflib
2

关于

这是一个非官方的库,它跟踪glt2的官方文件格式。

该库最初是为加载和保存简单网格而构建的,但支持整个规范,包括材质 动画也不错。支持json(.gltf)和二进制(.glb)文件格式,尽管.glb支持 目前缺少一些功能。

它需要Python3.6及更高版本,因为它使用数据类,并且所有属性都是类型提示的。还有F弦,很多F弦。

查看下表了解哪些示例模型有效。

有问题吗?贡献?错误报告?在项目的gitlab页面上打开一个问题。 我们非常有兴趣听取您使用pygltflib的用例,以帮助您制定路线图。

路线图
  • 添加用于创建网格的辅助函数
  • 测试覆盖率
  • 在自定义属性属性上强制使用单下划线
  • 自动验证和目视检查

贡献者

  • 卢克·米勒
  • 塞巴斯蒂安·赫夫纳
  • 阿瑟·范霍夫
  • Arifullah Jan
  • 丹尼尔·海恩

谢谢

pygltflib为电影《维多利亚》支持的"节拍:一款炫目的黑色游戏"而制作。

更改日志

  • 1.11.7

    • 将缺少的规范化的标志添加到访问器
  • 1.11.6

    • 添加对扩展的支持
    • 添加对附加功能的支持
    • 在属性上添加对自定义属性的支持
    • 默认情况下,将primitive.attributes设置为none(使用primitive.attributes=attributes()
    • 删除有关bytestride的警告,因为这不是此库的责任
    • 添加大量测试
  • 1.11.5

    • 重新排序标识uri以避免使用长字节字符串作为文件名
    • 保存时指定父路径,以便将bin文件保存到同一路径
  • 1.11.4

    • 拆下衬垫
    • 提高数据类json向后兼容性
  • 1.11.3

    • 使用setup.py修复导入问题
  • 1.11.2

    • 修复在glb中保存长数据uri的问题
    • 修复不同版本的数据类json的兼容性问题
  • 1.11.1

    • 更新文档
    • 改进包装
  • 1.11<P>

    • 通过gltf.binary_blob()
    • 添加对内部glb二进制数据的访问
    • addconvert_buffers方法在数据uri、二进制文件和二进制blob之间切换缓冲区格式
  • 1.10<P>

    • 保存时处理空缓冲区
    • 警告不支持的数据uri缓冲视图
    • 允许透明纹理(使用Alpha通道)
  • 1.9<P>

    • 使用工厂创建属性和资产对象
  • 1.8<P>

    • 允许图像指向缓冲视图
  • 1.7<P>

    • 保存到glb时保留bufferviews的顺序
    • 在嵌入数据中正确填充二进制块
  • 1.6<P>

    • 更好地支持二进制(.glb)文件(错误修复)
    • 从内部方法提升加载json加载二进制保存json保存二进制
  • 1.5<P>

    • 正确对齐嵌入数据
    • glb2gltfglt2glbutil函数添加到pygltflib.utils以便于文件转换
  • 1.4<P>

    • 添加对保存到二进制gltf(.glb)文件的基本支持
    • 将未记录的非核心方法移动到pygltfib.utils
  • 1.3<P>

    • 添加读取二进制gltf(.glb)文件的基本支持
  • < 1.2 >< > >
    • 提供更好的json支持
    • 删除numpy要求
    • 抑制推断警告
    • 添加基本默认方法
  • 1<P>

    • 初始版本

安装

pip install pygltflib

来源

pip install pygltflib
4

更详细的用法

注意:这些示例使用khronos提供的官方示例模型。

https://github.com/khronosgroup/gltf示例模型

简单的网格
pip install pygltflib
5

加载和保存

pygltflib可以根据文件扩展名加载基于json的.gltf文件和二进制.glb文件。

gltf文件

pip install pygltflib
6

glb文件

pip install pygltflib
7

转换文件

第一种方法
pip install pygltflib
8
使用utils的第二种方法
pip install pygltflib
9

转换缓冲区

gltf2文件中缓冲区的数据可以存储在缓冲区对象的uri字符串中 或者在由缓冲区对象的uri字符串指向的二进制文件中,或者作为二进制blob 在glb文件中。

在保存和加载gltf2文件时,库主要透明地处理这些文件, 在某些情况下,您可能需要特定类型的缓冲存储器。

例如,如果有一个gltf文件将所有相关数据存储在.bin文件中 但是如果要创建单个文件,则需要从二进制文件转换缓冲区 到数据uri或glb二进制数据。

有一个名为converu buffers的方便方法可以帮助您。

frompygltflibimportGLTF2gltf=GLTF2()
0

扩展名

gltf规范允许向gltf文件的任何组件添加扩展名。

截至本文撰写之日(2019年8月),khronos和其他供应商提供了大约十几个扩展

在pygltflib中,扩展被加载为普通的dict对象,因此应该像常规键、值对一样被访问。

例如,extensions["khr_draco_mesh_compression"]["bufferview"]而不是extensions["khr_draco_mesh_compression"].bufferview

这允许pygltflib自动支持将来的扩展。

运行测试

GLTF验证器的状态

使用使用此库加载并保存的示例模型,下面是验证程序报告(blank未经测试)。 如果可用,目视检查的结果在验证器结果旁边的括号中。

验证程序状态

<表><广告>型号 gltf到gltfgltf到glbglb到gltf glb到glb< /广告><正文>2缸发动机通过通过通过通过alphabledmodetest通过通过通过通过动画立方体通过通过没有可用的GLB没有可用的GLB动画或多维数据集通过通过通过通过动画或动画此处通过通过通过通过动画三角形通过通过没有可用的GLB没有可用的GLB鳄梨通过通过通过通过梭鱼通过通过通过通过动臂箱通过通过通过通过带轴的动臂箱通过通过没有可用的GLB没有可用的GLB盒通过通过通过通过框动画通过通过通过交叉框通过通过通过框纹理通过通过BoxTexturedNonpowerfotwo通过通过boxvertexcolors通过通过脑干通过通过通过小车通过通过通过摄像机通过通过没有可用的GLB没有可用的GLB塞尚通过通过小卡车通过通过紧身胸衣通过通过通过通过立方体通过通过没有可用的GLB没有可用的GLB损坏DHELMET通过通过通过通过鸭通过通过通过通过飞行头盔通过通过没有可用的GLB没有可用的GLB变速箱总成 通过通过灯笼通过通过金属粗球通过通过怪物通过通过多紫外线测试通过通过法向切向镜检通过通过法向切线测试通过通过通过方位测试通过通过往复锯通过通过钻机图通过通过装备简化通过通过科学头盔通过通过没有可用的GLB没有可用的GLB简单方法通过通过没有可用的GLB没有可用的GLB简单打印通过通过没有可用的GLB没有可用的GLBSimpleSparseAccessor通过通过没有可用的GLB没有可用的GLBspecglossvsmetalrough通过通过通过通过海绵通过通过没有可用的GLB没有可用的GLB苏珊娜通过通过没有可用的GLB没有可用的GLB< TT>特克斯t坐标测试通过通过通过通过纹理设置步骤通过通过通过通过纹理变换测试通过通过没有可用的GLB没有可用的GLB三角形通过通过没有可用的GLB没有可用的GLB三角形不规则通过通过没有可用的GLB没有可用的GLB双面车道通过通过没有可用的GLB没有可用的GLB VC通过失败通过通过垂直剖面图通过通过通过通过水瓶通过通过通过通过

单元测试

frompygltflibimportGLTF2gltf=GLTF2()
1

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
macos在OS X Lion上安装Java EE 6   java Android Studio无法解析列表适配器中的方法   java使用xpath解析xml并获取嵌套的child   java中模式更新的设计模式编程方法   java ViewResolver Spring不工作   从SQLite for java/安卓中的数据库表中删除除前n之外的所有内容   java C++:对混合了向量的指针的引用。我有麻烦了   为BST实现equals和hashcode的java   java从游标适配器/列表视图中删除多个元素   使用MPAndroidChart,未显示java X轴标签   java从jPanel中的URL添加图像   java在应用程序关闭时本地存储数据,而不是放在后台   验证bean在Java11和SpringBoot2.5.3中不起作用