demo API

Luna-Flow/geometry3d/demo 是一个可执行程序而不是库:它不导出任何 MoonBit 项。它的接口就是这里描述的命令行。它用 TUI 后端把动画场景渲染到终端中,并录制、播放、导出和显示 .tui3d 序列与 .tuiimg 图像。它面向 native 目标,该目标提供了它所使用的时钟、环境变量和文件系统。

moon run src/demo --target native -- [options]

选项按完全匹配识别;未知选项会被忽略。demo 教程展示了典型用法,demo 设计解释了各个场景。

环境变量

COLUMNS, LINES

帧宽为 COLUMNS 个单元、高为 LINES - 1 行;留出一行给 shell 提示符。缺失或无法读取时使用 80 × 32。仓库中的 just 配方会根据 stty size 设置这两个变量。

场景

不带场景选项时,演示会旋转一个半边长为 1 的立方体。

--sphere

--sphere 显示一个静止的 UV 球,半径 2.4,18 个纬圈、36 个分段。

--torus

--torus 旋转一个半径为 2.1 和 0.72、分段为 28 × 16 的圆环,从 6.8 个单位外观察。

--hitchcock

--hitchcock 显示一个位于圆柱、圆锥和三棱锥前方的中心立方体,同时相机在 3.4 到 8 个单位之间推拉,焦距随距离变化,因此立方体大小不变而背景尺度改变。

--dolly

--dolly 显示一面 5 × 7 圆盘墙前旋转的立方体,同时相机在 3.2 到约 69.6 个单位之间推拉,焦距从 23 mm 增加到 500 mm。

网格场景(立方体、球、圆环)在全画幅传感器上使用 18 mm 镜头,除非另有说明,距离为 4.5 个单位。

效果

--long-exposure

--long-exposure 把之前运动的 12 次渲染平均到每一帧中,使运动的边缘变模糊。

--flow-exposure

--flow-exposure 即 --long-exposure,但每次较早的渲染都先通过块匹配光流(搜索半径 4,块半径 1)与当前帧对齐。

运行

--once

--once 渲染一帧(或播放序列中的一帧)后退出。不加该选项时,实时模式以每 33 ms 一帧的速度运行,直到被中断。

文件

--record PATH

--record PATH 为所选场景和效果渲染完整序列,并以 .tui3d 格式写入 PATH。

--record-stdout

--record-stdout 逐帧把同样的 .tui3d 文本写到标准输出,不在内存中保留整个序列。录制较长内容时请将其重定向到文件。

--duration SECONDS, --fps N

这两个选项设置 --record 和 --record-stdout 的时长(默认 3 秒)和帧率(默认 30)。两者都接受正整数:解析器只保留参数中的数字,因此 --duration 0.5 表示 5 秒。

--play PATH

--play PATH 读取 .tui3d 文件,并以录制时的帧率在终端中播放(取 60、30、24、12、10 帧每秒中向下最接近的值)。

--export-image PATH

--export-image PATH 为所选场景和效果渲染一幅静止画面,并以 .tuiimg 格式写入 PATH。

--show-image PATH

--show-image PATH 读取 .tuiimg 文件并将其打印出来。

优先级

同时给出多个模式时,按以下顺序第一个适用的模式生效:--record-stdout、--show-image、--export-image、--play、--record、--dolly、--hitchcock,然后是网格场景。无法读写的文件会使程序中止,并给出包含该路径的消息。