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...