BabylonJS - Mesh AssetsManager
使用 assestsmanager 类,您可以在场景中加载网格、图像和二进制文件。
语法
var assetsManager = new BABYLON.AssetsManager(scene);
演示
<!doctype html> <html> <head> <meta charset = "utf-8"> <title>BabylonJs - Basic Element-Creating Scene</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 light = new BABYLON.PointLight("Omni", new BABYLON.Vector3(20, 20, 100), scene); //添加弧形旋转相机 var camera = new BABYLON.ArcRotateCamera("Camera", 0, 0.8, 100, BABYLON.Vector3.Zero(), scene); camera.attachControl(canvas, false); var assetsManager = new BABYLON.AssetsManager(scene); var meshTask = assetsManager.addMeshTask("skull task", "", "scenes/", "skull.babylon"); meshTask.onSuccess = function (task) { task.loadedMeshes[0].position = BABYLON.Vector3.Zero(); } // 用相机移动灯光 scene.registerBeforeRender(function () { light.position = camera.position; }); assetsManager.onFinish = function (tasks) { engine.runRenderLoop(function () { scene.render(); }); }; assetsManager.load(); return scene; }; var scene = createScene(); engine.runRenderLoop(function() { scene.render(); }); </script> </body> </html>
在上述该演示链接中,我们使用了 skull.babylon 网格。您可以从 −
下载 skull.babylon 的 json 文件将该文件保存在 scenes 文件夹中,以获得如下所示的输出。 skull.babylon 是一个 json 文件,其中包含要为网格绘制的所有位置的详细信息。
输出

说明
对于 assetsmanager,您需要做的第一件事是创建一个与上图相同的对象。
现在,您可以按如下方式将任务添加到 assetsmanager 对象 −
var meshTask = assetsManager.addMeshTask("skull task", "", "scenes/", "skull.babylon");
上面创建的 meshTask 允许访问 2 个回调,分别称为 onSucess 和 onError。
语法
。以下是 onSuccess 回调的语法 −
meshTask.onSuccess = function (task) { task.loadedMeshes[0].position = BABYLON.Vector3.Zero(); }
在上述情况下,成功回调时网格的位置更改为 0。
加载图像和 txt 文件的演示
<!doctype html> <html> <head> <meta charset = "utf-8"> <title>BabylonJs - Basic Element-Creating Scene</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 light = new BABYLON.PointLight("Omni", new BABYLON.Vector3(20, 20, 100), scene); //添加弧形旋转相机 var camera = new BABYLON.ArcRotateCamera("Camera", 0, 0.8, 100, BABYLON.Vector3.Zero(), scene); camera.attachControl(canvas, false); var assetsManager = new BABYLON.AssetsManager(scene); var imageTask = assetsManager.addImageTask("image_task", "images/balloon.png"); imageTask.onSuccess = function(task) { console.log(task.image.width); } var textTask = assetsManager.addTextFileTask("text task", "mesh.txt"); textTask.onSuccess = function(task) { console.log(task.text); } assetsManager.load(); return scene; }; var scene = createScene(); engine.runRenderLoop(function() { scene.render(); }); </script> </body> </html>
创建一个名为 mesh.txt 的文件,并在其中添加文本"This is babylonjs test"。上面的演示在浏览器中执行时将在控制台中显示图像的宽度和 mesh.txt 中的文本。
附加 mesh.txt 内容 – mesh.txt −
This is babylonjs test
要显示场景的加载指示器,请使用以下 −
如果设置为 true,则将显示加载指示器。将其设置为 false 以禁用。
assetsManager.useDefaultLoadingScreen = true;

还有其他方法可以显示加载指示器 −
BABYLON.SceneLoader.ShowLoadingScreen = true; //false 禁用它
要手动隐藏和显示加载屏幕,请执行以下操作。
engine.displayLoadingUI(); engine.hideLoadingUI();
使用 loadingUIText:engine.loadingUIText = "text"; 控制加载文本,使用 engine.loadingUIBackgroundColor = "red"; 控制背景