<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Normal 2D view and WebVR</title>
<script src="https://code.jquery.com/pep/0.4.2/pep.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/dat-gui/0.6.2/dat.gui.min.js"></script>
<script src="https://preview.babylonjs.com/ammo.js"></script>
<script src="https://preview.babylonjs.com/cannon.js"></script>
<script src="https://preview.babylonjs.com/Oimo.js"></script>
<script src="https://preview.babylonjs.com/gltf_validator.js"></script>
<script src="https://preview.babylonjs.com/earcut.min.js"></script>
<script src="https://preview.babylonjs.com/babylon.js"></script>
<script src="https://preview.babylonjs.com/inspector/babylon.inspector.bundle.js"></script>
<script src="https://preview.babylonjs.com/materialsLibrary/babylonjs.materials.min.js"></script>
<script src="https://preview.babylonjs.com/proceduralTexturesLibrary/babylonjs.proceduralTextures.min.js"></script>
<script src="https://preview.babylonjs.com/postProcessesLibrary/babylonjs.postProcess.min.js"></script>
<script src="https://preview.babylonjs.com/loaders/babylonjs.loaders.js"></script>
<script src="https://preview.babylonjs.com/serializers/babylonjs.serializers.min.js"></script>
<script src="https://preview.babylonjs.com/gui/babylon.gui.min.js"></script>
<style>
html, body {
overflow: hidden;
width: 100%;
height: 100%;
margin: 0;
padding: 0;
}
#renderCanvas {
width: 100%;
height: 100%;
touch-action: none;
}
</style>
</head>
<body>
<canvas id="renderCanvas"></canvas>
<script src="script.js"></script>
</body>
</html>
// Code goes here
var canvas = document.getElementById("renderCanvas");
var createScene = function() {
var scene = new BABYLON.Scene(engine);
var camera = new BABYLON.ArcRotateCamera("Camera", 0, 0, 10, BABYLON.Vector3.Zero(), scene);
var material = new BABYLON.StandardMaterial("kosh", scene);
material.diffuseColor = BABYLON.Color3.Purple();
var light = new BABYLON.PointLight("Omni0", new BABYLON.Vector3(-17.6, 18.8, -49.9), scene);
camera.setPosition(new BABYLON.Vector3(-15, 10, -20));
camera.minZ = 1.0;
camera.maxZ = 120.0;
camera.attachControl(canvas, true);
var skybox = BABYLON.Mesh.CreateBox("skyBox", 100.0, scene);
var skyboxMaterial = new BABYLON.StandardMaterial("skyBox", scene);
skyboxMaterial.backFaceCulling = false;
skyboxMaterial.reflectionTexture = new BABYLON.CubeTexture("textures/TropicalSunnyDay", scene);
skyboxMaterial.reflectionTexture.coordinatesMode = BABYLON.Texture.SKYBOX_MODE;
skyboxMaterial.diffuseColor = new BABYLON.Color3(0, 0, 0);
skyboxMaterial.specularColor = new BABYLON.Color3(0, 0, 0);
skyboxMaterial.disableLighting = true;
skybox.material = skyboxMaterial;
BABYLON.Effect.ShadersStore["customDepthVertexShader"] = "#ifdef GL_ES\n" +
"precision highp float;\n" + "#endif\n" +
"attribute vec3 position;\n" +
"uniform mat4 worldViewProjection;\n" +
"void main(void) {\n" +
"gl_Position = worldViewProjection * vec4(position, 1.0);\n" +
"}";
BABYLON.Effect.ShadersStore["customDepthPixelShader"] = "#ifdef GL_ES\n" +
"precision highp float;\n" + "#endif\n" +
"void main(void) {\n" +
"float depth = 1.0 - (2.0 / (100.0 + 1.0 - gl_FragCoord.z * (100.0 - 1.0)));\n" +
"gl_FragColor = vec4(depth, depth, depth, 1.0);\n" +
"}\n" +
"";
var depthMaterial = new BABYLON.ShaderMaterial("customDepth", scene, "customDepth", {
attributes: ["position"],
uniforms: ["worldViewProjection"]
});
depthMaterial.backFaceCulling = false;
var plane = BABYLON.Mesh.CreatePlane("map", 10, scene);
plane.billboardMode = BABYLON.AbstractMesh.BILLBOARDMODE_ALL;
plane.scaling.y = 1.0 / engine.getAspectRatio(scene.activeCamera);
var renderTarget = new BABYLON.RenderTargetTexture("depth", 1024, scene, true);
//renderTarget.renderList.push(skybox);
scene.customRenderTargets.push(renderTarget);
renderTarget.onBeforeRender = function() {
for (var index = 0; index < renderTarget.renderList.length; index++)
{
renderTarget.renderList[index]._savedMaterial = renderTarget.renderList[index].material;
renderTarget.renderList[index].material = depthMaterial;
}
}
renderTarget.onAfterRender = function() {
for (var index = 0; index < renderTarget.renderList.length; index++)
{
renderTarget.renderList[index].material = renderTarget.renderList[index]._savedMaterial;
}
}
var spheresCount = 20;
var alpha = 0;
for (var index = 0; index < spheresCount; index++)
{
var sphere = BABYLON.Mesh.CreateSphere("Sphere" + index, 32, 3, scene);
sphere.position.x = 10 * Math.cos(alpha);
sphere.position.z = 10 * Math.sin(alpha);
sphere.material = material;
alpha += (2 * Math.PI) / spheresCount;
renderTarget.renderList.push(sphere);
}
var mat = new BABYLON.StandardMaterial("plan mat", scene);
mat.emissiveTexture = renderTarget;
mat.disableLighting = true;
plane.material = mat;
scene.registerBeforeRender(function() {
camera.alpha += 0.01 * scene.getAnimationRatio();
});
return scene;
};
var engine = new BABYLON.Engine(canvas, true, {
preserveDrawingBuffer: true,
stencil: true
});
var scene = createScene();
engine.runRenderLoop(function() {
if (scene)
{
scene.render();
}
});
window.addEventListener("resize", function() {
engine.resize();
});
/* Styles go here */