93 lines
2.7 KiB
Markdown
93 lines
2.7 KiB
Markdown
# Cord
|
|
|
|
Three-layer 3D geometry system: **Source → Trig IR → CORDIC binary**.
|
|
|
|
Cord compiles constructive solid geometry into a trigonometric DAG (TrigGraph),
|
|
which can be evaluated as f64 reference values, compiled to WGSL shaders for
|
|
GPU raymarching, or lowered to pure CORDIC shift-and-add arithmetic with zero
|
|
floating-point operations.
|
|
|
|
## Architecture
|
|
|
|
```text
|
|
[Cordial DSL / SCAD] → AST → SdfNode → TrigGraph → WGSL Shader
|
|
→ CORDIC Binary
|
|
→ f64 Evaluator
|
|
→ Riesz Analysis
|
|
|
|
[STL/OBJ Mesh] → BVH → Sparse Grid → RANSAC → Monogenic Classify → SDF Tree
|
|
```
|
|
|
|
## Crates
|
|
|
|
| Crate | Description |
|
|
|-------|-------------|
|
|
| **cord-trig** | TrigGraph IR — the universal intermediate representation |
|
|
| **cord-parse** | SCAD lexer and parser |
|
|
| **cord-sdf** | SDF node tree, AST → SdfNode → TrigGraph lowering |
|
|
| **cord-shader** | TrigGraph → WGSL raymarcher codegen |
|
|
| **cord-cordic** | TrigGraph → CORDIC compiler and evaluator |
|
|
| **cord-format** | ZCD archive format (ZIP container for all layers) |
|
|
| **cord-render** | Standalone wgpu raymarcher |
|
|
| **cord-decompile** | Mesh → SDF decompiler (RANSAC + monogenic classification) |
|
|
| **cord-riesz** | 3D Riesz transform, monogenic signals, spatial cepstrum |
|
|
| **cordial** | Rust DSL for CSG with parallel composition patterns |
|
|
| **cord-gui** | Interactive iced-based editor (not published) |
|
|
|
|
## File Formats
|
|
|
|
| Extension | Description |
|
|
|-----------|-------------|
|
|
| `.crd` | Cordial source |
|
|
| `.cord` | Raw CORDIC binary (magic: `CORD`) |
|
|
| `.trig` | Serialized TrigGraph (magic: `TRIG`) |
|
|
| `.zcd` | Zipped Cord archive containing any combination of layers |
|
|
|
|
## Quick Start
|
|
|
|
```bash
|
|
# View a .scad file
|
|
cargo run -- view examples/test.scad
|
|
|
|
# Compile to .zcd archive
|
|
cargo run -- build input.scad -o output.zcd
|
|
|
|
# Dump generated WGSL
|
|
cargo run -- shader input.scad
|
|
|
|
# Launch the GUI editor
|
|
cargo run -p cord-gui
|
|
|
|
# Verify CORDIC accuracy
|
|
cargo run -- verify --word-bits 32
|
|
```
|
|
|
|
## Cordial Language
|
|
|
|
See [docs/cordial-reference.md](docs/cordial-reference.md) for the full
|
|
language reference. Quick taste:
|
|
|
|
```
|
|
let shell: Obj = diff(sphere(5), sphere(4))
|
|
let hole: Obj = cylinder(1.5, 12)
|
|
let result: Obj = diff(shell, union(hole, rotate_x(hole, pi/2)))
|
|
cast(result)
|
|
```
|
|
|
|
## Cordial as Rust DSL
|
|
|
|
```rust
|
|
use cordial::prelude::*;
|
|
|
|
let shell = sphere(5.0).difference(sphere(4.0));
|
|
let hole = cylinder(1.5, 12.0);
|
|
let result = shell.difference(hole.clone() | hole.rotate_x(90.0));
|
|
|
|
let wgsl = result.to_wgsl();
|
|
let cordic = result.to_cordic();
|
|
```
|
|
|
|
## License
|
|
|
|
Unlicensed — [pszsh](https://else-if.org)
|