Play with PlayCanvas

demo cube

HTML

<script src="https://code.playcanvas.com/playcanvas-stable.js"></script>
<canvas id="cube"></canvas>

CSS

body {
  margin: 0;
  padding: 0;
}

JavaScript

// check for wasm module support
function wasmSupported() {
  try {
    if (typeof WebAssembly === "object" && typeof WebAssembly.instantiate === "function") {
      const module = new WebAssembly.Module(Uint8Array.of(0x0, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00));
      if (module instanceof WebAssembly.Module)
        return new WebAssembly.Instance(module) instanceof WebAssembly.Instance;
    }
  } catch (e) { }
  return false;
}

// load a script
function loadScriptAsync(url, doneCallback) {
  var tag = document.createElement('script');
  tag.onload = function () {
    doneCallback();
  };
  tag.onerror = function () {
    throw new Error('failed to load ' + url);
  };
  tag.async = true;
  tag.src = url;
  document.head.appendChild(tag);
}

// load and initialize a wasm module
function loadWasmModuleAsync(moduleName, jsUrl, binaryUrl, doneCallback) {
  loadScriptAsync(jsUrl, function () {
    var lib = window[moduleName];
    window[moduleName + 'Lib'] = lib;
    lib({
      locateFile: function () {
        return binaryUrl;
      }
    }).then(function (instance) {
      window[moduleName] = instance;
      doneCallback();
    });
  });
}

if (wasmSupported()) {
  loadWasmModuleAsync('Ammo', 'https://playcanvas.github.io/examples/lib/ammo/ammo.wasm.js', 'https://playcanvas.github.io/examples/lib/ammo/ammo.wasm.wasm', demo);
} else {
  loadWasmModuleAsync('Ammo', 'https://playcanvas.github.io/examples/lib/ammo/ammo.js', '', demo);
}

function demo() {
  try {
    /* eslint-disable no-unused-vars */
    var canvas = document.getElementById('cube');

    // Start and init Application
    var app = new pc.Application(canvas, {
            mouse: new pc.Mouse(canvas),
            elementInput: new pc.ElementInput(canvas)
    });
    app.start();
    app.setCanvasFillMode(pc.FILLMODE_FILL_WINDOW);
    app.setCanvasResolution(pc.RESOLUTION_AUTO);

    // Create camera
    var camera = new pc.Entity();
    camera.addComponent("camera", {
      clearColor: new...