使用 Babylon.js 在 HTML 頁面載入 3D 物件

quxing10086發表於2018-05-09

五一 Windwos Blogs 推了一篇部落格, Babylon.js v3.2 釋出了。因為一直有想要在自己部落格上載入 3D 物件的衝動,這兩天正好看到了,就動手研究研究。本人之前也並沒有接觸過 WebGL ,這方面算是知識盲區,需求完成之後感覺非常炫酷,順手寫篇部落格記錄下來。不得不說 3D 列印和 VR 慢慢的開始走進平時的生活了,技術的成熟與硬體成本的變低,結合內容跨平臺共享與各種簡單的 js 框架, WebGL 和 WebVR 很可能就是未來 Web 方向的主流技術。期待美好而炫酷的未來ing

Babylon.js 是什麼

Babylon.js 是一個 JavaScript 開源框架,可以在瀏覽器或 Web 應用程式中簡單便捷的構建 3D 遊戲和 WebGL、WebVR 等 3D 體驗。Babylon.js 非常強大,強大到可以去構建商業遊戲。畢竟我才花了兩天時間去了解它,只用來載入 3D 物件確實是大材小用了,文件和 GitHub 地址在下面。

Babylon GitHub : https://github.com/BabylonJS/Babylon.js

Babylon Document : https://doc.babylonjs.com/

基本程式碼

Babylon.js 並不是所有的 3D 物件都支援,支援的型別: .glTF 、 .obj 、 .stl 、 .babylon 。

這裡以 STL 物件為例,首先需要引入兩個 js 檔案。一個是 Babylon.js ,另一個是 STL Loader, js 檔案在 GitHub 中自行搜尋下載引入。

<script src="~/js/babylon.js"></script>
<script src="~/js/babylon.stlFileLoader.min.js"></script>

同時還需要一個 HTML5 的 canvas 標籤作為 Babylon.js 的渲染容器

<canvas id="renderCanvas" style="width:100%;height:100%;touch-action:none;"></canvas>

緊接著註冊一個 DOM 事件,我們的渲染程式碼將在事件裡完成,以確保執行渲染之前載入整個 DOM 。

<script>
    window.addEventListener('DOMContentLoaded', function() {
        // TODO
    });
</script>

實現步驟

  1. 獲取渲染容器物件

    var canvas = document.getElementById('renderCanvas');
  2. 載入渲染引擎

    Engine 類負責低階別的 API 介面。第一個引數為渲染容器物件,第二個引數是開啟抗鋸齒。

    var engine = new BABYLON.Engine(canvas, true);
  3. 載入場景

    一個基本場景(Scene)裡需要包括相機(Cameras)、光源(Lights)、3D 物件。這裡相機使用 ArcRotateCamera ,滑鼠可以控制旋轉和縮放。光源使用 HemisphericLight 半球光,用來模擬現實中的環境光。當然你也可以使用其他相機和光源,文件連結已給出。

    // 基本的場景物件
    var scene = new BABYLON.Scene(engine);
    
    // 半球光物件,朝向天空
    var light = new BABYLON.HemisphericLight('light1', new BABYLON.Vector3(0, 1, 0), scene);
    
    // 弧度旋轉相機,引數含義為:α角度、β角度、半徑、目標方向、場景物件。
    // 下圖非常詳細的說明了各個引數的真實場景的含義
    var camera = new BABYLON.ArcRotateCamera('camera1', 0, 0, 10, new BABYLON.Vector3(40, 40, 40), scene);
    // 相機設定在原點位置
    camera.setTarget(BABYLON.Vector3.Zero());
    // 把相機附在渲染物件上
    camera.attachControl(canvas, false);
    
    // 把 STL 物件附加在現有的場景物件上
    // 可以從資料夾中選取物件,也可以給出一個 URL
    BABYLON.SceneLoader.Append("../", "Chariot_Red_f.stl", scene);


    Arc Rotate Camera 示意圖

    當然,上面的程式碼可以封裝成一個方法。

  4. 註冊渲染迴圈

    這些程式碼非常重要,場景是需要迴圈渲染的。

    engine.runRenderLoop(function () {
        scene.render();
    });
  5. 實現容器自動縮放

    window.addEventListener('resize', function () {
        engine.resize();
    });

完整程式碼與效果圖


效果圖

<canvas id="renderCanvas" style="width:100%;height:100%;touch-action:none;"></canvas>

<script src="~/js/babylon.js"></script>
<script src="~/js/babylon.stlFileLoader.min.js"></script>
<script>
    window.addEventListener('DOMContentLoaded', function () {
        var canvas = document.getElementById('renderCanvas');
        var engine = new BABYLON.Engine(canvas, true);

        var scene = new BABYLON.Scene(engine);
        var camera = new BABYLON.ArcRotateCamera('camera1', 0, 0, 10, new BABYLON.Vector3(40, 40, 40), scene);
        camera.setTarget(BABYLON.Vector3.Zero());
        camera.attachControl(canvas, false);
        var light = new BABYLON.HemisphericLight('light1', new BABYLON.Vector3(0, 1, 0), scene);

        BABYLON.SceneLoader.Append("", "@Model.PreviewModel", scene);

        engine.runRenderLoop(function () {
            scene.render();
        });

        window.addEventListener('resize', function () {
            engine.resize();
        });
    });
</script>http://www.rdj9135.cn/
http://news.ypk8666.cn/
http://www.cjd7774.cn/
http://www.bux1348.top/
http://news.xdi0113.cn/
http://news.skk3561.cn/
http://www.kme4313.cn/
http://news.hgh3722.cn/
http://news.ibs2142.cn/
http://www.hvc6084.cn/
http://www.mar4014.cn/
http://www.tzn6024.cn/
http://news.mjg4415.cn/
http://news.esn7121.cn/
http://news.eno7779.cn/
http://www.rlv0165.cn/
http://www.otm3953.cn/
http://www.tfe0886.cn/
http://news.rvc0755.cn/
http://news.kwx0094.cn/
http://news.xua4102.cn/
http://news.dvu3043.cn/
http://www.kpp1176.cn/
http://news.axz7045.cn/
http://news.mfc7569.cn/
http://www.nwm1536.cn/
http://www.ice7855.cn/
http://news.qou5361.cn/
http://www.fvj9657.cn/
http://www.hxl6493.cn/
http://www.dvu3043.cn/
http://www.sph9900.cn/
http://news.mvg0339.cn/
http://news.nqa8573.cn/
http://www.rgj9684.cn/
http://news.ddh4684.cn/
http://www.azq7227.cn/
http://news.uzh3227.cn/
http://www.nzl1119.cn/
http://news.fvj9657.cn/
http://news.epv8502.cn/
http://www.auk8793.top/
http://www.smp7329.top/
http://www.sqd7023.top/
http://news.vui9639.cn/
http://www.kgs1242.cn/
http://www.tuj3041.cn/
http://news.tae4138.cn/
http://news.eyf3292.cn/
http://www.zzl7747.cn/
http://news.muu1638.cn/
http://www.toy2618.cn/
http://news.xvn7640.cn/
http://news.ffn3573.cn/
http://news.djz1658.cn/
http://news.giy4971.cn/
http://www.vrc3443.top/
http://news.wne9476.cn/
http://www.xfz1235.cn/
http://news.koi7857.cn/
http://www.dsd3012.cn/
http://www.ife7579.cn/
http://www.gtt6107.top/
http://www.ewh1005.cn/
http://www.tzr5175.cn/
http://news.wqr1047.cn/
http://www.zps7191.cn/
http://news.taj7240.cn/
http://news.hud3144.cn/
http://www.bpa2365.cn/
http://news.kjx4882.cn/
http://www.ece1729.cn/
http://news.vii0197.cn/
http://www.evv5980.cn/
http://www.wsa2392.cn/
http://www.mzj8672.cn/
http://news.tzr5175.cn/
http://www.vdx0926.cn/
http://news.xjy3902.cn/
http://www.jfs6888.top/
http://news.ece1729.cn/
http://www.tqz4909.cn/
http://www.qeu2095.top/
http://news.dkk2480.cn/
http://news.oek0353.cn/
http://www.myo1179.cn/
http://www.iit3286.cn/
http://news.hyt6211.cn/
http://www.lhl7110.cn/
http://www.syh5891.cn/
http://www.mfu9569.cn/
http://www.tud8565.cn/
http://www.ewv7964.cn/
http://news.ube1531.cn/
http://www.hyt6211.cn/
http://www.dkk2480.cn/
http://news.ppr6189.cn/
http://www.vdf1425.cn/
http://www.xvn7640.cn/
http://www.bbe1708.cn/
http://news.nat5354.cn/
http://news.aht8537.cn/
http://news.eko5785.cn/
http://news.alj9141.cn/
http://news.xip7382.cn/
http://www.veo6686.cn/
http://news.dfr2203.cn/
http://www.nuq3623.top/
http://www.oiv1998.top/
http://www.gum4900.top/
http://www.xua4102.cn/
http://news.vtl3405.cn/
http://news.aua2439.cn/
http://news.yxp3496.cn/
http://news.grp2563.cn/
http://www.epv8502.cn/
http://www.bnb6875.cn/
http://news.baq6972.cn/
http://www.pxk9336.top/
http://www.rye6349.top/
http://www.dpz7007.top/
http://www.mvg0339.cn/
http://www.hqu4552.cn/
http://news.cqz7056.cn/
http://news.jxb0956.cn/
http://news.ewv7964.cn/
http://www.kod8371.top/
http://news.wyu4949.cn/
http://www.xqs4260.top/
http://www.wqv1289.top/
http://www.ase4727.cn/
http://www.jiq1934.cn/
http://news.dhg3119.cn/
http://www.dwf8840.top/
http://news.fsj6077.cn/
http://news.usx0758.cn/
http://news.rik3314.cn/
http://news.zcl0267.cn/
http://news.abd5921.cn/
http://www.zcl0267.cn/
http://www.wyz5825.top/
http://news.ywb6045.cn/
http://news.kpq2047.cn/
http://news.dyy3200.cn/
http://www.wvh4263.cn/
http://news.epi0997.cn/
http://news.opg6486.cn/
http://www.dli5822.cn/
http://www.rwi9374.cn/
http://news.myo1179.cn/
http://www.ddh4684.cn/
http://news.qfk7654.cn/
http://news.dmb8658.cn/
http://news.djf2649.cn/
http://news.dyq9159.cn/
http://news.vwb8311.cn/
http://news.jck8045.cn/
http://news.yhb3879.cn/
http://news.xgm6868.cn/
http://news.yat8046.cn/
http://www.uzh3227.cn/
http://www.hfk7896.cn/
http://news.qdj0796.cn/
http://www.jhg1176.top/
http://news.dox1148.cn/
http://news.lus6696.cn/
http://www.eig6365.cn/
http://www.njn2935.top/
http://news.nwm1536.cn/
http://www.jaf1308.cn/
http://news.uqx4260.cn/
http://news.akj0836.cn/
http://news.ogr7085.cn/
http://www.lev2249.cn/
http://news.xrr9518.cn/
http://www.dcj6843.top/
http://www.sfi6595.cn/
http://news.rlo9176.cn/
http://news.vrc3090.cn/
http://news.bwb3762.cn/
http://news.hwp3498.cn/
http://www.adw2245.cn/
http://news.bbe1708.cn/
http://news.yyf8629.cn/
http://www.kbs9896.cn/
http://www.xwt5617.cn/
http://news.mng2781.cn/
http://www.xcd5039.cn/
http://news.gzv8338.cn/
http://www.wue0833.cn/
http://news.zlq5247.cn/
http://news.kpx1618.cn/
http://www.cnn5986.top/
http://news.fmh8265.cn/
http://www.shg1037.cn/
http://news.shg1037.cn/
http://www.dox1148.cn/
http://www.lsz6488.cn/
http://news.qdn5355.cn/
http://www.zrv3166.top/
http://www.jla2696.top/
http://news.ccn6233.cn/
http://www.uym8620.cn/
http://www.uvr1927.cn/
http://news.sxw8975.cn/
http://www.ums9455.cn/
http://www.krr6354.cn/
http://www.bah1564.cn/
http://news.tqz4909.cn/
http://www.dfr2203.cn/
http://news.jal3249.cn/
http://www.paf5803.cn/
http://news.bou1446.cn/
http://www.cqz7056.cn/
http://www.dye6768.cn/
http://news.rcd9187.cn/
http://www.uzu8211.cn/
http://www.nne0088.cn/
http://news.lij0467.cn/
http://news.hch9349.cn/
http://news.tcr0461.cn/
http://news.ewh1005.cn/
http://www.ffn3573.cn/
http://www.tcr0461.cn/
http://news.zdn2144.cn/
http://news.vdf1425.cn/
http://news.qyd5295.cn/
http://news.nzl1119.cn/
http://news.dxc3579.cn/
http://www.mug5965.top/
http://www.xnw9449.cn/
http://www.tox1106.cn/
http://www.pud6117.top/
http://www.iai9521.top/
http://www.vkp0211.top/
http://www.tpz5308.top/
http://www.ffr2858.cn/
http://www.tay3928.top/
http://www.wnu1861.top/
http://www.kpx1618.cn/
http://www.rdk6709.cn/
http://news.icb3050.cn/
http://www.qfg6726.cn/
http://www.esn7121.cn/
http://www.amv5754.top/
http://news.kgs1242.cn/
http://news.ife7579.cn/
http://www.ocs5821.cn/
http://www.hrd7175.top/
http://news.paf5803.cn/
http://www.ngm1905.cn/
http://news.uvr1927.cn/
http://www.ypk8666.cn/
http://www.ucl3937.cn/
http://news.iyi5365.cn/
http://www.xjh6427.cn/
http://news.pzf7790.cn/
http://www.vzx2078.cn/
http://www.wph2022.cn/
http://www.yhb3879.cn/
http://news.kdz0246.cn/
http://www.oim9564.top/
http://www.muu1638.cn/
http://www.tdw5546.cn/
http://news.evv5980.cn/
http://www.txz2284.top/
http://news.sdb0307.cn/
http://www.cyj2776.cn/
http://news.qld9407.cn/
http://www.taj7240.cn/
http://www.rew9011.top/
http://www.hqh7518.cn/
http://news.ghk5310.cn/
http://www.xuh4863.cn/
http://news.per1537.cn/
http://www.kzo4326.cn/
http://news.tsx6039.cn/
http://news.eho1460.cn/
http://news.dsd3012.cn/
http://www.iru8567.cn/
http://www.iyi5365.cn/
http://news.dwk7340.cn/
http://www.kbx3827.top/
http://news.qsa5453.cn/
http://www.njb8631.cn/
http://news.ozn1702.cn/
http://news.his6102.cn/
http://www.sfx6922.cn/
http://news.hqu4552.cn/
http://www.wjm3484.cn/
http://www.tbt7039.top/

相關文章