BabylonJS - 網格資源管理器



使用 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);

            //Adding a light
            var light = new BABYLON.PointLight("Omni", new BABYLON.Vector3(20, 20, 100), scene);

            //Adding an Arc Rotate Camera
            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();
            }	

            // Move the light with the camera
            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 檔案:

skull.babylon

將檔案儲存在 scenes 資料夾中以獲得如下所示的輸出。skull.babylon 是一個 json 檔案,其中包含要為網格繪製的所有位置的詳細資訊。

輸出

Skull

解釋

對於 assetsmanager,您需要做的第一件事是建立如上所示的相同物件。

現在,您可以按如下方式向 assetsmanager 物件新增任務:

var meshTask = assetsManager.addMeshTask("skull task", "", "scenes/", "skull.babylon");

上面建立的 themeshTask 提供了對名為 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);

            //Adding a light
            var light = new BABYLON.PointLight("Omni", new BABYLON.Vector3(20, 20, 100), scene);

            //Adding an Arc Rotate Camera
            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;

Assets

還有其他方法可以顯示載入指示器:

BABYLON.SceneLoader.ShowLoadingScreen = true; //false to disable it

要手動隱藏和顯示載入螢幕,請執行以下操作。

engine.displayLoadingUI();
engine.hideLoadingUI();

載入文字使用 loadingUIText 控制:engine.loadingUIText = "text"; 並使用 engine.loadingUIBackgroundColor = "red"; 控制背景。

babylonjs_mesh.htm
廣告
© . All rights reserved.