#poly-mesh #3d #file-format #convert #3d-rendering #toolset #pmf

app vox2pmf

一个将MagicaVoxel文件转换为PolyMesh文件的工具

1个不稳定版本

0.1.0 2021年3月31日

#7 in #pmf

自定义许可证

46KB
734

Build

PolyMesh是一种我作为实验设计的自定义3D对象描述文件格式。PolyMesh文件格式和工具集专门为3D渲染应用设计。

PolyMesh文件格式(pmf)是一个包含结构化目录树的JSON文件的gzip文件。树的每一级都包含一个描述目录的描述符polymeta.json文件。最低级目录都包含描述使用基本多边形集合的3D网格的mesh.json文件。PolyMesh文件的每一级都应该被视为其自己的3D网格。高级网格可以包括低级网格,以构建更复杂的网格。

所有网格都是相对定位的。这意味着最低级网格都应该以[0,0,0]为中心,以便高级网格可以包括它们并根据需要变换它们。PolyMesh文件可以使用pmfpackpmfextract工具进行打包和解包。当PolyMesh被解包时,它可以在较低级别重新打包,这就是为什么保持所有网格相对定位很重要的原因。描述咖啡馆场景的PolyMesh也可以重新打包,仅描述主场景中桌子上的一杯咖啡。

一个示例3D对象在example_meshes/default_cube中可用

工具集

此存储库提供了一些用于处理PolyMesh的CLI工具

  • pmfpack
    • 可以将未压缩的目录(如default_cube示例)打包成一个单独的.pmf文件
  • pmfextract
    • 可以将.pmf文件解包到未压缩的目录
  • pmftree
    • 以类似于tree命令的风格提供任何.pmf文件的可视化
  • pmfview
    • 适用于任何 .pmf 文件的完整 3D 可视化工具。灵感来源于皮克斯的 usdview。基于 raylib 构建。
  • vox2pmf
    • 一种可以将文件从 .vox 格式转换为 PolyMesh 的工具。
  • pmfcube
    • 一个调试工具,将在 [0,0,0] 位置生成一个边长为 1 单位的彩色立方体。

libpolymesh 可以作为独立的 Rust 库使用,目前仍在开发中。

关于坐标的说明

实际上,这个项目并不关心使用哪种坐标系,但我是按照“Y-up,右手规则”来编写的。

构建

这个单一代码库有一些系统依赖项

# Install GUI libraries
sudo apt install libasound2-dev mesa-common-dev libx11-dev libxrandr-dev libxi-dev xorg-dev libgl1-mesa-dev libglu1-mesa-dev

# Install the workspace wrangling tools
cargo install cargo-token
cargo install cargo-unleash --version 1.0.0-alpha.11

依赖项

~8–19MB
~269K SLoC