code wiki / _hdl_build / nx_wasmvox3d_gate.nx
nx_wasmvox3d_gate.nx source
↩ module page · 54 lines · 2008 B
1// nx_wasmvox3d_gate.nx -- NATIVE eyeball check of the 3D voxel world: carves a pit (air cells), raises a tower
2// (solid cells), drops floating blocks, then renders to PNG. Proves per-voxel rendering + dig + place before wasm.
3// license_tier: ORIGINAL
4import "nx_syscalls.nx"
5import "nx_f32_hw.nx"
6import "nx_png.nx"
7import "nx_wasmvox3d.nx"
8
9func main() -> i64 {
10 let base: i64 = sys_mmap(mem_bytes()) as i64
11
12 // carve a 3x3 pit ahead (gx 23..25, gz 15..17) from the surface down -> a clear hole
13 var gz: i64 = 15
14 while gz <= 17 {
15 var gx: i64 = 23
16 while gx <= 25 {
17 var gy: i64 = 2
18 while gy <= 9 { setcell(base, gx, gy, gz, 2); gy = gy + 1 }
19 gx = gx + 1
20 }
21 gz = gz + 1
22 }
23 // raise a 12-tall tower at (30,14)
24 var ty: i64 = 1
25 while ty <= 12 { setcell(base, 30, ty, 14, 1); ty = ty + 1 }
26 // a floating block cluster at y=9 near (20,15)
27 setcell(base, 20, 9, 15, 1)
28 setcell(base, 21, 9, 15, 1)
29 setcell(base, 20, 9, 16, 1)
30 setcell(base, 21, 9, 16, 1)
31
32 let cgx: i64 = 24
33 let cgz: i64 = 3
34 let eye: i64 = terrain_h0(cgx, cgz) + 8
35 let camx256: i64 = cgx * 256 + 128
36 let camy256: i64 = eye * 256
37 let camz256: i64 = cgz * 256 + 128
38 let camx: i64 = f32_div(f32_of(camx256), f32_of(256))
39 let camy: i64 = f32_div(f32_of(camy256), f32_of(256))
40 let camz: i64 = f32_div(f32_of(camz256), f32_of(256))
41
42 // view 1: looking +z, pitched down ~22 deg (overview)
43 build_R(base, 1000, 0, 927, 0 - 375)
44 render_at(base, camx, camy, camz, cgx, cgz)
45 write_png((base + fb_off()) as *i64, ww(), hh(), "/mnt/c/Users/elder/AppData/Local/Temp/vox1.png" as *u8)
46
47 // view 2: yaw ~30 deg
48 build_R(base, 866, 500, 985, 0 - 174)
49 render_at(base, camx, camy, camz, cgx, cgz)
50 write_png((base + fb_off()) as *i64, ww(), hh(), "/mnt/c/Users/elder/AppData/Local/Temp/vox2.png" as *u8)
51
52 sys_write(1, "vox3d gate: wrote vox1.png vox2.png\n" as *u8, 35)
53 return 0
54}