1 个不稳定版本
0.1.0 | 2021年3月31日 |
---|
在 #pmf 中排名第4
43KB
681 行代码(不包括注释)
PolyMesh是我设计的一种实验性3D对象描述文件格式。PolyMesh文件格式和工具集专门为3D渲染应用设计。
PolyMesh文件格式(pmf
)是一个包含结构化目录树的gzip文件。树中的每个级别都包含一个描述目录的描述符polymeta.json
文件。最低级别的目录都包含描述3D网格的mesh.json
文件,这些文件使用基本多边形集合来描述3D网格。PolyMesh文件的每个级别都可以看作是一个独立的3D网格。较高级别的网格可以包含较低级别的网格,以构建更复杂的网格。
所有网格都是相对定位的。这意味着最低级别的网格都应该以[0,0,0]]
为中心对齐。这意味着较高级别的网格可以包含它们并按需进行变换。PolyMesh文件可以打包和解包使用pmfpack
和pmfextract
工具。当PolyMesh解包时,它可以在较低级别重新打包,这就是为什么保持所有网格相对位置很重要。描述咖啡场景的PolyMesh也可以重新打包,仅描述桌子上的咖啡杯。
一个示例3D对象在 example_meshes/default_cube
中可用
工具集
此存储库提供了一些用于处理PolyMeshes的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
依赖项
~4–13MB
~160K SLoC