Files
retro3d/lance3d.md

3.0 KiB

Core API

Get time since game boot, in seconds time()

Get runtime statistics stat(name: "draw_calls" | "triangles" | "fps" | "memory_bytes")

log(...args: any)

set_lighting({ sun_dir: [0.3,-1,0.2], // normalized internally sun_color: [1,1,1], // rgb ambient: [0.25,0.25,0.25] // rgb })

set_fog({ enabled: false, color: [0.5,0.6,0.7], near: 10, far: 80 })

// lance3d material { color_map: texture | null, // optional paint: color, // required (default: white) coverage: "opaque" | "cutoff" | "blend", face: "single" | "double", lamp: "lit" | "unlit" }

Draw API

Loads a gltf model, returning an array of {mesh, material}, with materials compressed into a render3d material load_model(path) -> array<{mesh, material}>

make_cube(w, h, d) -> mesh make_sphere(r, segments=12) -> mesh make_cylinder(r, h, segments=12) -> mesh make_plane(w, h) -> mesh

Generates a pose that can be applied to a model sample_pose(model, name, time)

Draws a model with a given base transform draw_model(model, transform=null, pose=null)

Draws a mesh with a material draw_mesh(mesh, transform=null, material=null)

load_sound(path) -> sound | null

play_sound(sound, opts={ volume: 1.0, // 0..1 pitch: 1.0, // 1.0 = normal pan: 0.0, // -1 = left, 0 = center, 1 = right loop: false // boolean }) -> voice

stop_sound(voice)

// when drawing, a provided material will override defaults for the system load_texture(path) -> texture draw_billboard(texture, x, y, z, size=1.0, mat=null) draw_sprite(texture, x, y, size=1.0, mat=null)

Camera API

camera_look_at( ex, ey, ez, // eye tx, ty, tz, // target upx = 0, upy = 1, upz = 0 )

camera_perspective(fov_deg=60, near=0.1, far=1000) camera_ortho(left, right, bottom, top, near=-1, far=1)

Collision API

retro3d.add_collider_sphere(transform, radius, opts={layer_mask:1, user:null}) -> collider retro3d.add_collider_box(transform, sx, sy, sz, opts={layer_mask:1, user:null}) -> collider

retro3d.set_collider_transform(collider, transform) retro3d.set_collider_layer(collider, layer_mask)

retro3d.overlaps(layer_mask_a=null, layer_mask_b=null) -> array<{a: collider, b: collider}>

retro3d.raycast(ox,oy,oz, dx,dy,dz, opts={ max_dist: Infinity, layer_mask: 0xFFFFFFFF }) -> null | {x,y,z, nx,ny,nz, distance, collider}

retro3d.remove_collider(collider)

Input

btn(id, player=0) -> bool // held btnp(id, player=0) -> bool // pressed this frame

Math

seed(seed_int) rand() -> number // [0,1) irand(min_inclusive, max_inclusive) -> int

Debug API

vertex {x, y, z, u=0, v=0, color} point(vertex, size=1.0) line(vertex_a, vertex_b, width=1.0) triangle(vertex_a, vertex_b, vertex_c, mat=null) ray(ox,oy,oz, dx,dy,dz, len, opts) grid(size, step, norm = {x:0,y:1,z:0}, color) aabb(cx,cy,cz, ex,ey,ez, opts) // center+extents obb(transform, sx,sy,sz, opts) // oriented via transform frustum(camera_state_or_params, opts) text3d(str, x,y,z, opts={size_px:12, depth:"always"|"test"})

Render a specific collider collider(collider, color)