code wiki / (root) / nx_trimesh.nx

nx_trimesh.nx

buildroot/runtime/nx_trimesh.nx

45206 B774 linesdepth 3pulls 5 transitivereach 156 importersview sourcekind library
docsdependenciesstructsconstsfunctions

about

nx_trimesh.nx -- ★SOVEREIGN TRIANGLE-MESH RASTERIZER (operator 2026-07-10, frank feedback: "we just have circles, no triangle or other capabilities for shapes to make more and more real things"). Correct: everything so far is axis-aligned ELLIPSOIDS (smooth blobs) -- no flat faces, sharp edges, or arbitrary form. This adds the UNIVERSAL primitive: the TRIANGLE. A real integer rasterizer -- transform -> perspective project -> barycentric fill with a Z-BUFFER + flat per-face shading -> arbitrary polygon meshes with FLAT FACES and SHARP EDGES. Plus a primitive library (cube/tetra/octa/pyramid/prism/icosahedron/uv-sphere) and composition (build real things from many meshes). 100% integer, sovereign (own trig, own raster). license_tier: ORIGINAL

dependencies 4 imports · 50 importers

nx_syscalls.nx nx_itrig.nx nx_vecmath.nx nx_relief_lib.nx nx_trimesh.nx nx_aa_gate.nx nx_authorworld_gate.nx nx_being_showcase.nx nx_bodyatlas_mesh_gate.nx nx_boxtex_gate.nx nx_bunny_gate.nx nx_cornell.nx nx_cornell_dyn_gate.nx nx_cornell_gate.nx nx_dance_emit.nx

diagram shows first 10 each side; +0 more imports, +40 more importers in the complete lists below.

imports: nx_syscalls.nxnx_itrig.nxnx_vecmath.nxnx_relief_lib.nx

imported by: nx_aa_gate.nxnx_authorworld_gate.nxnx_being_showcase.nxnx_bodyatlas_mesh_gate.nxnx_boxtex_gate.nxnx_bunny_gate.nxnx_cornell.nxnx_cornell_dyn_gate.nxnx_cornell_gate.nxnx_dance_emit.nxnx_donor_native.nxnx_engine_lod_gate.nxnx_engine_phys_gate.nxnx_engine_scene_gate.nxnx_engine_stream_gate.nxnx_gltf_accessor_candidate_t181.nxnx_gltf_anim.nxnx_gltf_anim_gate.nxnx_gltf_load.nxnx_gltf_load_gate.nxnx_gltf_load_inventory_t180.nxnx_gltf_load_preserve_t145.nxnx_gltf_mesh.nxnx_gltf_mesh_gate.nxnx_gltf_scene.nxnx_gltf_scene_gate.nxnx_hands_gate.nxnx_isosurf.nxnx_isosurf_gate.nxnx_isosurf_orientation_candidate_t343.nxnx_native_turntable.nxnx_nxa2glb_gate.nxnx_nxa_texbake_decode_t279.nxnx_nxa_texbake_lib.nxnx_objload.nxnx_part_solver_gate.nxnx_phong_gate.nxnx_retarget_emit.nxnx_retarget_showcase.nxnx_stdassets_gate.nxnx_texture_gate.nxnx_tissuefield_lib.nxnx_trimesh_gate.nxnx_wire_crawl_gate.nxnx_wire_diablo2_gate.nxnx_wire_endlesssky_gate.nxnx_wire_nethack_gate.nxnx_worldpipe.nxnx_worldpipe_gate.nxnx_worldpipe_render.nx

structs

none

consts

12const TM_MAGIC_1024: i64 = 1024
13const TM_MAGIC_1000000000: i64 = 1000000000
14const TM_MAGIC_374761393: i64 = 374761393
15const TM_MAGIC_668265263: i64 = 668265263
16const TM_MAGIC_1610612741: i64 = 1610612741
17const TM_MAGIC_1274126177: i64 = 1274126177
18const TM_MAGIC_1048576: i64 = 1048576
19const TM_MAGIC_4096: i64 = 4096
20const TM_MAGIC_1618: i64 = 1618
21const TM_MAGIC_65536: i64 = 65536
22const TM_MAGIC_1300: i64 = 1300
23const TM_MAGIC_2400: i64 = 2400
24const TM_MAGIC_3000: i64 = 3000
25const TM_MAGIC_100000: i64 = 100000
26const TM_MAGIC_90000: i64 = 90000
27const TM_MAGIC_65535: i64 = 65535
28const TM_MAGIC_37777: i64 = 37777
29const TM_MAGIC_91131: i64 = 91131
30const TM_MAGIC_6144: i64 = 6144
31const TM_MAGIC_81111: i64 = 81111
32const TM_MAGIC_2000000000: i64 = 2000000000
41const TM_GRID: i64 = 256 // max polygonizer grid resolution supported
42const TM_FOLD: i64 = 16 // surface-crossings per cell column, worst case. MEASURED
48const TM_VCAP: i64 = TM_GRID*TM_GRID*TM_FOLD
49const TM_TCAP: i64 = TM_VCAP*2 // surface nets emits ~2 triangles per vertex
85const TM_SHRES: i64 = 576
215const TM_NMID: i64 = 128
216const TM_NSCL: i64 = 127

functions

61func tm_vcap() -> i64 { if TM_VCAPN == 0 { return TM_VCAP } return TM_VCAPN }
62func tm_tcap() -> i64 { if TM_TCAPN == 0 { return TM_TCAP } return TM_TCAPN }
called by 1: tm_tri
77func tm_ovf() -> i64 { return TM_OVF }
called by 39: mainmainmainmainmainmain+33
79func tm_set_spec(v: i64) -> i64 { TM_SPEC = v; return 0 }
81func tm_set_tex(scale: i64) -> i64 { TM_TEX = scale; return 0 }
101func tm_set_sun(x: i64, y: i64, z: i64) -> i64
108func tm_set_shadow(v: i64) -> i64 { TM_SHON = v; return 0 }
109func tm_shadow_bake() -> i64
192func tm_shadow_at(wx: i64, wy: i64, wz: i64) -> i64
called by 1: trimesh_render
211func tm_set_image(rgb: *u8, w: i64, h: i64) -> i64 { TM_IMG = rgb as i64; TM_IMGW = w; TM_IMGH = h; return 0 }
217func tm_set_normalmap(rgb: *u8, w: i64, h: i64) -> i64 { TM_NRM = rgb as i64; TM_NRMW = w; TM_NRMH = h; return 0 }
226func tm_perturb_normal(nx: i64, ny: i64, nz: i64, tx: i64, ty: i64, tz: i64, out3: *i64) -> i64
called by 2: maintrimesh_render calls 1: tm_isqrt
257func tm_vuv(idx: i64, u: i64, v: i64) -> i64 { let pu: *i64 = TM_VU as *i64; let pv: *i64 = TM_VV as *i64; pu[idx] = u; pv[idx] = v; return 0 }
261func tm_hash3(a: i64, b: i64, c: i64) -> i64 { return rlf_hash3(a, b, c) }
264func tm_noise3(x: i64, y: i64, z: i64, S: i64) -> i64 { return rlf_noise3(x, y, z, S) }
266func tm_isqrt(v: i64) -> i64 { return vm_isqrt(v) }
267func tm_min(a: i64, b: i64) -> i64 { if a<b {return a} return b }
called by 1: tm_min3
268func tm_max(a: i64, b: i64) -> i64 { if a>b {return a} return b }
called by 1: tm_max3
269func tm_min3(a: i64, b: i64, c: i64) -> i64 { return tm_min(tm_min(a,b),c) }
called by 2: tm_shadow_baketrimesh_render calls 1: tm_min
270func tm_max3(a: i64, b: i64, c: i64) -> i64 { return tm_max(tm_max(a,b),c) }
called by 2: tm_shadow_baketrimesh_render calls 1: tm_max
272func tm_reset() -> i64
291func tm_bind_bytes(nv: i64, nt: i64) -> i64 { return nv*8*9 + nt*8*4 }
called by 3: iog_onemainmain
292func tm_bind(mem: i64, nv: i64, nt: i64) -> i64
called by 3: iog_onemainmain
315func tm_vcol(idx: i64, col: i64) -> i64 { let p: *i64 = TM_VCOL as *i64; p[idx] = col; return 0 }
317func tm_vpos(idx: i64, out: *i64) -> i64 { let px: *i64=TM_VX as *i64; let py: *i64=TM_VY as *i64; let pz: *i64=TM_VZ as *i64; out[0]=px[idx]; out[1]=py[idx]; out[2]=pz[idx]; return 0 }
318func tm_vnorm(idx: i64, out: *i64) -> i64 { let px: *i64=TM_VNX as *i64; let py: *i64=TM_VNY as *i64; let pz: *i64=TM_VNZ as *i64; out[0]=px[idx]; out[1]=py[idx]; out[2]=pz[idx]; return 0 }
called by 2: maingl_emit_normals
319func tm_getvcol(idx: i64) -> i64 { let p: *i64=TM_VCOL as *i64; return p[idx] }
323func tm_vx(i: i64) -> i64 { let p: *i64=TM_VX as *i64; return p[i] }
324func tm_vy(i: i64) -> i64 { let p: *i64=TM_VY as *i64; return p[i] }
325func tm_vz(i: i64) -> i64 { let p: *i64=TM_VZ as *i64; return p[i] }
326func tm_vnx(i: i64) -> i64 { let p: *i64=TM_VNX as *i64; return p[i] }
327func tm_vny(i: i64) -> i64 { let p: *i64=TM_VNY as *i64; return p[i] }
328func tm_vnz(i: i64) -> i64 { let p: *i64=TM_VNZ as *i64; return p[i] }
329func tm_ta(i: i64) -> i64 { let p: *i64=TM_TA as *i64; return p[i] }
330func tm_tb(i: i64) -> i64 { let p: *i64=TM_TB as *i64; return p[i] }
331func tm_tc(i: i64) -> i64 { let p: *i64=TM_TC as *i64; return p[i] }
332func tm_tget(t: i64, out: *i64) -> i64 { let pa: *i64=TM_TA as *i64; let pb: *i64=TM_TB as *i64; let pc: *i64=TM_TC as *i64; out[0]=pa[t]; out[1]=pb[t]; out[2]=pc[t]; return 0 }
334func tm_place(from: i64, to: i64, dx: i64, dy: i64, dz: i64, mil: i64) -> i64
346func tm_compute_normals() -> i64
373func tm_vert(x: i64, y: i64, z: i64) -> i64
382func tm_vert_n(x: i64, y: i64, z: i64, nx: i64, ny: i64, nz: i64) -> i64
391func tm_tri(a: i64, b: i64, c: i64, col: i64) -> i64
399func tm_quad(a: i64, b: i64, c: i64, d: i64, col: i64) -> i64 { tm_tri(a,b,c,col); tm_tri(a,c,d,col); return 0 }
400func tm_nt() -> i64 { return TM_NT }
called by 43: mainmainmainmainmainmain+37
401func tm_nv() -> i64 { return TM_NV }
404func tm_cube(cx: i64, cy: i64, cz: i64, s: i64, col: i64) -> i64
416func tm_tetra(cx: i64, cy: i64, cz: i64, s: i64, col: i64) -> i64
called by 1: main calls 2: tm_verttm_tri
422func tm_octa(cx: i64, cy: i64, cz: i64, s: i64, col: i64) -> i64
called by 1: main calls 2: tm_verttm_tri
429func tm_pyramid(cx: i64, cy: i64, cz: i64, s: i64, col: i64) -> i64
called by 3: mainmainmain calls 3: tm_verttm_tritm_quad
437func tm_prism(cx: i64, cy: i64, cz: i64, s: i64, col: i64) -> i64 { // triangular prism (extruded triangle along z)
called by 1: main calls 3: tm_verttm_tritm_quad
446func tm_icosa(cx: i64, cy: i64, cz: i64, s: i64, col: i64) -> i64
called by 1: main calls 2: tm_verttm_tri
459func tm_uvsphere(cx: i64, cy: i64, cz: i64, s: i64, rings: i64, segs: i64, col: i64) -> i64
495func tm_figure(cx: i64, cy: i64, cz: i64, col: i64) -> i64
called by 1: main calls 1: tm_cube
513func trimesh_render(fb: *i64, zbuf: *i64, W: i64, H: i64, yaw: i64, pitch: i64, camz: i64, focal: i64, smooth: i64) -> i64
748func trimesh_zclear(zbuf: *i64, n: i64) -> i64 { var i: i64=0; while i<n { zbuf[i] = TM_MAGIC_2000000000; i=i+1 } return 0 }
called by 25: mainmainmainmainmainmain+19
750func trimesh_render_aa(fb: *i64, W: i64, H: i64, yaw: i64, pitch: i64, camz: i64, focal: i64, smooth: i64) -> i64