- BabylonJS - Playing Sounds & Music
- BabylonJS - Physics Engine
- BabylonJS - Bones and Skeletons
- BabylonJS - ShaderMaterial
- Standard Rendering Pipeline
- BabylonJS - Reflection Probes
- BabylonJS - Create ScreenShot
- BabylonJS - Lens Flares
- BabylonJS - Parallax Mapping
- BabylonJS - Dynamic Texture
- BabylonJS - Curve3
- BabylonJS - Decals
- VectorPosition and Rotation
- BabylonJS - Mesh
- BabylonJS - Parametric Shapes
- BabylonJS - Lights
- BabylonJS - Cameras
- BabylonJS - Animations
- BabylonJS - Materials
- BabylonJS - Basic Elements
- BabylonJS - Overview
- BabylonJS - Environment Setup
- BabylonJS - Introduction
- BabylonJS - Home
BabylonJS Useful Resources
Selected Reading
- Who is Who
- Computer Glossary
- HR Interview Questions
- Effective Resume Writing
- Questions and Answers
- UPSC IAS Exams Notes
BabylonJS - Dynamic Texture
The Dynamic Texture of BabylonJS creates a canvas and you can easily write text on the texture. It also allows you to work with canvas and use all the features available with html5 canvas to be used with dynamic texture.
We will work on an example, which will show how to write text on the texture and will also draw a bezier Curve on the mesh we create.
Syntax
Following is the syntax to create Dynamic texture −
var myDynamicTexture = new BABYLON.DynamicTexture(name, option, scene);
Parameters
Following are the required parameters to create dynamic texture −
name − name of the dynamic texture
option − will have the width and height of the dynamic texture
scene − scene created
Syntax
Following is the syntax to write text on the texture −
myDynamicTexture.drawText(text, x, y, font, color, canvas color, invertY, update);
Parameters
Following are the required parameters to write text on the texture −
text − text to be written;
x − distance from the left-hand edge;
Y − distance from the top or bottom edge, depending on invertY;
font − font definition in the form font-style, font-size, font_name;
invertY − true by default in which case y is the distance from the top, when false, y is distance from the bottom and the letters reversed;
update − true by default, the dynamic texture will immediately be updated.
Demo
<!doctype html> <html> <head> <meta charset = "utf-8"> <title>MDN Games: Babylon.js demo - shapes</title> <script src = "https://end3r.github.io/MDN-Games-3D/Babylon.js/js/babylon.js"></script> <style> html,body,canvas { margin: 0; padding: 0; width: 100%; height: 100%; font-size: 0; } </style> </head> <body> <canvas id = "renderCanvas"></canvas> <script type = "text/javascript"> var canvas = document.getElementById("renderCanvas"); var engine = new BABYLON.Engine(canvas, true); var createScene = function() { var scene = new BABYLON.Scene(engine); var camera = new BABYLON.ArcRotateCamera("Camera", -Math.PI/2, Math.PI / 3, 25, BABYLON.Vector3.Zero(), scene); camera.attachControl(canvas, true); var pght = new BABYLON.HemisphericLight("pght1", new BABYLON.Vector3(0, 1, 0), scene); pght.intensity = 0.7; var box = BABYLON.Mesh.CreateBox("box", 3.0, scene); box.position = new BABYLON.Vector3(0, 0, -5); //Create dynamic texture var textureGround = new BABYLON.DynamicTexture("dynamic texture", {width:512, height:256}, scene); var textureContext = textureGround.getContext(); var materialGround = new BABYLON.StandardMaterial("Mat", scene); materialGround.diffuseTexture = textureGround; box.material = materialGround; //Add text to dynamic texture var font = "bold 60px Arial"; textureGround.drawText("Box", 200, 150, font, "green", "white", true, true); return scene; }; var scene = createScene(); engine.runRenderLoop(function() { scene.render(); }); </script> </body> </html>
Output
Dynamic texture also allows to work with html5 canvas methods and properties on dynamic texture as follows −
Syntax
var ctx = myDynamicTexture.getContext();
Demo
<!doctype html> <html> <head> <meta charset = "utf-8"> <title> Babylon.JS : Demo2</title> <script src = "babylon.js"></script> <style> canvas { width: 100%; height: 100%;} </style> </head> <body> <canvas id = "renderCanvas"></canvas> <script type = "text/javascript"> var canvas = document.getElementById("renderCanvas"); var engine = new BABYLON.Engine(canvas, true); var createScene = function () { var scene = new BABYLON.Scene(engine); var camera = new BABYLON.ArcRotateCamera("Camera", -Math.PI/2, Math.PI / 3, 25, BABYLON.Vector3.Zero(), scene); camera.attachControl(canvas, true); var pght = new BABYLON.HemisphericLight("pght1", new BABYLON.Vector3(0, 1, 0), scene); pght.intensity = 0.7; var ground = BABYLON.MeshBuilder.CreateGround("ground1", {width: 20, height: 10, subspanisions: 25}, scene); //Create dynamic texture var textureGround = new BABYLON.DynamicTexture("dynamic texture", 512, scene); var textureContext = textureGround.getContext(); var materialGround = new BABYLON.StandardMaterial("Mat", scene); materialGround.diffuseTexture = textureGround; ground.material = materialGround; //Draw on canvas textureContext.beginPath(); textureContext.moveTo(75,40); textureContext.bezierCurveTo(75,37,70,25,50,25); textureContext.bezierCurveTo(20,25,20,62.5,20,62.5); textureContext.bezierCurveTo(20,80,40,102,75,120); textureContext.bezierCurveTo(110,102,130,80,130,62.5); textureContext.bezierCurveTo(130,62.5,130,25,100,25); textureContext.bezierCurveTo(85,25,75,37,75,40); textureContext.fillStyle = "red"; textureContext.fill(); textureGround.update(); return scene; }; var scene = createScene(); engine.runRenderLoop(function() { scene.render(); }); </script> </body> </html>
Output
Explanation
We have created ground mesh and added dynamic texture to it.
//ground mesh var ground = BABYLON.MeshBuilder.CreateGround("ground1", {width: 20, height: 10, subspanisions: 25}, scene); //Create dynamic texture var textureGround = new BABYLON.DynamicTexture("dynamic texture", 512, scene); //adding dynamic texture to ground using standard material var materialGround = new BABYLON.StandardMaterial("Mat", scene); materialGround.diffuseTexture = textureGround; ground.material = materialGround;
To work with canvas on dynamic texture, we need to call canvas method first −
var textureContext = textureGround.getContext()
To the canvas, we will add the bezierCurve as follows −
textureContext.beginPath(); textureContext.moveTo(75,40); textureContext.bezierCurveTo(75,37,70,25,50,25); textureContext.bezierCurveTo(20,25,20,62.5,20,62.5); textureContext.bezierCurveTo(20,80,40,102,75,120); textureContext.bezierCurveTo(110,102,130,80,130,62.5); textureContext.bezierCurveTo(130,62.5,130,25,100,25); textureContext.bezierCurveTo(85,25,75,37,75,40); textureContext.fillStyle = "red"; textureContext.fill(); textureGround.update();Advertisements