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}