A faithful port of three.js (r187) to MoonBit's JS backend: WebGLRenderer, WebGPURenderer and TSL, and add-ons, verified against upstream
let renderer = @webgpu.WebGPURenderer::new(canvas~)
let scene = @core.Scene::new()
let camera = @core.PerspectiveCamera::new(fov=50.0, aspect=16.0 / 9.0)
camera.position.set(0.0, 0.0, 3.0) |> ignore
let material = @nodes.MeshStandardNodeMaterial::new()
@nodes.NodeMaterial::of(material).unwrap().color_node = Some(
@nodes.mix(@nodes.color(0x3355ff), @nodes.color(0xff6633), @nodes.uv().x()),
)
scene.add(@core.Mesh::new(geometry=@geometries.BoxGeometry::new(), material=Single(material)))
|> ignore
renderer.init(on_done=fn(_) {
renderer.set_animation_loop(Some(fn(_, _) { renderer.render(scene, camera) }))
})tools/fetch_upstream.sh # upstream three.js at the commit the port targets
moon check --target js
moon test --target js
node diff/run_all.mjs # differential harnesses against upstreamInstall
Download zipA faithful port of three.js (r187) to MoonBit's JS backend: WebGLRenderer, WebGPURenderer and TSL, and add-ons, verified against upstream