一个将Pmx格式文件转换为GLB2格式文件的工具
apt install zlib1g-dev cmake libassimp-dev build-essential rm -rf build && mkdir build && cd build && cmake .. && make && cd .. ./build/PmxConverter --input input/file.pmx --name output ls ./output.glb
# build
docker build -t docker.cnb.cool/sunfkny/pmxconverter:latest .
# push
docker push docker.cnb.cool/sunfkny/pmxconverter:latest
# pull
docker pull docker.cnb.cool/sunfkny/pmxconverter:latest
# run
docker run --rm -v "$(pwd)/input:/app/input" \
-v "$(pwd)/output:/app/output" \
docker.cnb.cool/sunfkny/pmxconverter:latest \
--input /app/input/file.pmx --name output
# check
ls ./output/output.glb
import pathlib
import subprocess
def convert_pmx_to_glb(
input_file: pathlib.Path,
output_dir: pathlib.Path,
output_name: str = "output",
) -> pathlib.Path:
"""
使用 Docker 镜像将 PMX 文件及其贴图转换为 GLB 文件。
Params:
input_file: PMX 文件路径
output_dir: 输出目录
output_name: 输出文件名(不含.glb后缀)
Returns:
输出的 GLB 文件路径
"""
if not input_file.exists() or input_file.suffix.lower() != ".pmx":
raise ValueError("输入文件不存在或不是 .pmx 文件")
output_dir.mkdir(parents=True, exist_ok=True)
docker_cmd = [
"docker",
"run",
"--rm",
"-v",
f"{input_file.parent.resolve()}:/app/input",
"-v",
f"{output_dir.resolve()}:/app/output",
"docker.cnb.cool/sunfkny/pmxconverter:latest",
"--input",
f"/app/input/{input_file.name}",
"--name",
output_name,
]
subprocess.run(docker_cmd, check=True)
output_file = output_dir / f"{output_name}.glb"
if not output_file.exists():
raise RuntimeError("转换失败,未生成输出文件")
return output_file
if __name__ == "__main__":
for input_file in pathlib.Path("input/").glob("*.pmx", case_sensitive=False):
print(f"处理 {input_file.name}")
output_file = convert_pmx_to_glb(
input_file=input_file,
output_dir=pathlib.Path("output"),
output_name=input_file.stem,
)
print(f"输出: {output_file}")
assert output_file.exists()