Hello,
Babylon.js 4.1.0-beta-20
Node.js 12.4.1
NPM 6.13.6
Ubuntu 18.04
I’m using the NullEngine docs as the starting point.
I’ve modified that code for illustrative purposes and to be a little more friendly if you’re tinkering around inside it with the Node Inspector
'use strict';
const BABYLON = require('babylonjs');
const LOADERS = require('babylonjs-loaders');
const {
NullEngine,
Scene,
PointLight,
Vector3,
ArcRotateCamera,
OimoJSPlugin,
AmmoJSPlugin,
CannonJSPlugin,
SceneLoader: {
ImportMeshAsync
}
} = BABYLON;
global.XMLHttpRequest = require('xhr2').XMLHttpRequest;
(async () => {
const engine = new NullEngine();
const scene = new Scene(engine);
const light = new PointLight("Omni", new Vector3(20, 20, 100), scene);
const camera = new ArcRotateCamera("Camera", 0, 0.8, 100, BABYLON.Vector3.Zero(), scene);
let result = null;
let meshes = null;
let physicsEngine = null;
try { physicsEngine = new OimoJSPlugin() } catch (e) { console.log(e) }
try { physicsEngine = new AmmoJSPlugin() } catch (e) { console.log(e) }
try { physicsEngine = new CannonJSPlugin() } catch (e) { console.log(e) }
if (physicsEngine) {
scene.enablePhysics(undefined, physicsEngine);
}
try {
result = await ImportMeshAsync("", "https://playground.babylonjs.com/scenes/", "skull.babylon", scene);
meshes = result.meshes;
camera.target = meshes[0];
console.log("Meshes loaded from babylon file: " + meshes.length);
for (const mesh of meshes) {
console.log(mesh.toString());
}
} catch (e) {
console.log(e);
}
try {
result = await ImportMeshAsync("", "https://www.babylonjs.com/Assets/DamagedHelmet/glTF/", "DamagedHelmet.gltf", scene);
meshes = result.meshes;
console.log("Meshes loaded from gltf file: " + meshes.length);
for (const mesh of meshes) {
console.log(mesh.toString());
}
} catch (e) {
console.log(e);
}
console.log("render started");
engine.runRenderLoop(scene.render.bind(scene));
})();
What I’m noticing is that I get the following errors when I attempt to call the constructors for the physics engines:
$ node main.js
BJS - [15:05:11]: Babylon.js v4.1.0-beta.20 - Null engine
ReferenceError: OIMO is not defined
at new e (/home/peter/Development/bjs-nullengine-demo/node_modules/babylonjs/babylon.js:16:1872650)
at /home/peter/Development/bjs-nullengine-demo/main.js:30:25
at Object.<anonymous> (/home/peter/Development/bjs-nullengine-demo/main.js:63:3)
at Module._compile (internal/modules/cjs/loader.js:955:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:991:10)
at Module.load (internal/modules/cjs/loader.js:811:32)
at Function.Module._load (internal/modules/cjs/loader.js:723:14)
at Function.Module.runMain (internal/modules/cjs/loader.js:1043:10)
at internal/main/run_main_module.js:17:11
ReferenceError: Ammo is not defined
at new e (/home/peter/Development/bjs-nullengine-demo/node_modules/babylonjs/babylon.js:16:1887238)
at /home/peter/Development/bjs-nullengine-demo/main.js:31:25
at Object.<anonymous> (/home/peter/Development/bjs-nullengine-demo/main.js:63:3)
at Module._compile (internal/modules/cjs/loader.js:955:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:991:10)
at Module.load (internal/modules/cjs/loader.js:811:32)
at Function.Module._load (internal/modules/cjs/loader.js:723:14)
at Function.Module.runMain (internal/modules/cjs/loader.js:1043:10)
at internal/main/run_main_module.js:17:11
ReferenceError: CANNON is not defined
at new e (/home/peter/Development/bjs-nullengine-demo/node_modules/babylonjs/babylon.js:16:1858332)
at /home/peter/Development/bjs-nullengine-demo/main.js:32:25
at Object.<anonymous> (/home/peter/Development/bjs-nullengine-demo/main.js:63:3)
at Module._compile (internal/modules/cjs/loader.js:955:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:991:10)
at Module.load (internal/modules/cjs/loader.js:811:32)
at Function.Module._load (internal/modules/cjs/loader.js:723:14)
at Function.Module.runMain (internal/modules/cjs/loader.js:1043:10)
at internal/main/run_main_module.js:17:11
Meshes loaded from babylon file: 1
Name: test, isInstance: YES, # of submeshes: 1, n vertices: 41864, parent: NONE
Meshes loaded from gltf file: 2
Name: __root__, isInstance: YES, # of submeshes: 0, n vertices: 0, parent: NONE
Name: node_damagedHelmet_-6514, isInstance: YES, # of submeshes: 1, n vertices: 14359, parent: __root__
render started
I haven’t been able to find much literature on the subject of using the physics engines server-side.
Am I doing it right? I expect to see one of the physics engines load, however none of the three I include in the code above seem to function correctly under a Node.js environment.
I threw together a project, which can be cloned from here.