A pool table

by Ivan Enzhaev

HTML

<canvas id="renderCanvas"></canvas>

<script src="https://cdnjs.cloudflare.com/ajax/libs/babylonjs/2.3.0/babylon.js"></script>

CSS

html, body, canvas
{
  margin: 0;
  padding: 0;
  width: 100%;
  height: 100%;
}

JavaScript

var canvas = document.getElementById("renderCanvas");
var engine = new BABYLON.Engine(canvas);
var scene = new BABYLON.Scene(engine);
scene.clearColor = new BABYLON.Color3(0.529412,0.807843,0.921569);

var speed = 0.1;
function renderLoop()
{
    //body.rotation.x += 0.01;
    //body.rotation.y += 0.01;
    if (ball.position.z < -3 || ball.position.z > 3)
    {
        speed = -speed;
    }

    ball.position.z += speed;
    
    scene.render();
}
engine.runRenderLoop(renderLoop);

var camera = new BABYLON.ArcRotateCamera("Camera", 0, 0, 4, new BABYLON.Vector3(0, 0, 0), scene);
camera.attachControl(canvas, true);
camera.setTarget(BABYLON.Vector3.Zero());
camera.setPosition(new BABYLON.Vector3(10, 10, -10));

//var light = new BABYLON.DirectionalLight("light", new BABYLON.Vector3(-1, -2, -1),scene);

var light = new BABYLON.SpotLight("spot02", new BABYLON.Vector3(30, 40, 20), new BABYLON.Vector3(-1, -2, -1), 1.1, 16, scene);

var table = new BABYLON.MeshBuilder.CreateBox("table", {width: 7, height: 0.5, depth: 9}, scene);
table.material = new BABYLON.StandardMaterial("tableMat", scene);
table.material.diffuseColor = new BABYLON.Color3(0.9, 0.8, 0.5);
table.position.y = 1;

var ground = BABYLON.MeshBuilder.CreateGround("ground", {width: 20, height: 20, subdivsions: 4}, scene);
ground.position.y = -2;
ground.material = new BABYLON.StandardMaterial("groundMat",scene);
ground.material.diffuseColor = new BABYLON.Color3(0.5, 1.0, 0.5);
ground.material.specularColor = new BABYLON.Color3(0.2, 0.2, 0.2);
ground.material.ambientColor = new BABYLON.Color3(1, 1, 1);
ground.material.emissiveColor = new BABYLON.Color3(0.1, 0.1, 0.1);

var legX = 3, legY = 0.6, legZ = 4;

var legMat = new BABYLON.StandardMaterial("legMat", scene);
legMat.diffuseColor = new BABYLON.Color3(0.3, 0.8, 0.3);

var leg0 = BABYLON.MeshBuilder.CreateCylinder("leg0", {diameterTop: 0.5, diameterBottom: 0.5, tessellation: 24, height: 2.8}, scene);
leg0.position = new BABYLON.Vector3(legX, -legY,...