見出し画像

Babylon.js v6.3.1 Practiceめも③ glTF形式3Dモデルいろいろ表示

前回からのつづきです。 glTF形式の3Dモデルをいろいろ表示しています。 モデルによっては読込・表示までに時間のかかるものも。

 コーディングは前回までのBabylon.jsコーディングと同じようにHTML、CSS、JavaScriptで行っています(Typescript使っていません)。 目次の各項目では、コードのタイトル文字列をクリックするとコードとその実行結果が見れるCodePenのページを開き、サムネイル画像をクリックすると実行結果をフルスクリーンで表示するCodePenのページを開きます。

 現在CodePenに投稿しているBabylon.js v6.3.1のコードの一覧はCodePenのCollection機能で作成した「Babylon.js v6.3.1 Practice」で見ることができます。


Babylon.js v6.3.1 Practice#18 glTF 3D Model Display02

Babylon.js v6.3.1 Practice#18 glTF 3D Model Display02

glTF形式の3DモデルをCDN経由で読み込んで表示しています。 コード内での処理は基本的に前回の Practice#17 で行っていることと同じです。

HTML

<head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
     <title>Babylon Template</title>

    <!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/babylonjs/6.3.1/babylon.js"></script> -->
    <!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/babylonjs/6.3.1/babylon.min.js"></script> -->


    <!-- <script src="https://cdn.jsdelivr.net/npm/babylonjs@6.3.1/babylon.js"></script> -->
    <script src="https://cdn.jsdelivr.net/npm/babylonjs@6.3.1/babylon.min.js"></script>

    <!-- <script src="https://unpkg.com/babylonjs@6.3.1/babylon.js"></script> -->


    <script src="https://cdn.jsdelivr.net/npm/babylonjs-loaders@6.3.1/babylonjs.loaders.min.js"></script>
    <!-- <script src="https://unpkg.com/babylonjs-loaders@6.3.1/babylonjs.loaders.min.js"></script> -->

    <script src="https://code.jquery.com/pep/0.4.3/pep.js"></script>

</head>

<body>

    <canvas id="renderCanvas" touch-action="none"></canvas> <!--
    touch-action="none" for best results from PEP -->

</body>

CSS

html, body {
    overflow: hidden;
    width   : 100%;
    height  : 100%;
    margin  : 0;
    padding : 0;
}

#renderCanvas {
    width   : 100%;
    height  : 100%;
    touch-action: none;
}

JavaScript

main = () => {

    const canvas = document.getElementById("renderCanvas"); // Get the canvas element
    const engine = new BABYLON.Engine(canvas, true); // Generate the BABYLON 3D engine

    // Add your code here matching the playground format
    const createScene = () => {

        const scene = new BABYLON.Scene(engine);
        scene.clearColor = new BABYLON.Color3(0, 1, 1);

        const camera = new BABYLON.ArcRotateCamera("camera", -Math.PI / 2, Math.PI / 2.5, 3, new BABYLON.Vector3(0, 0, 0));
        camera.attachControl(canvas, true);

        const light = new BABYLON.HemisphericLight("light", new BABYLON.Vector3(0, 1, 0));


        // Load and display 3D model in glTF file format
        BABYLON.SceneLoader.Append("https://rawcdn.githack.com/KhronosGroup/glTF-WebGL-PBR/e7d707f3618d7e7cd5a78ce7b1403960ee3f7173/models/AppleTree/glTF/", "AppleTree.gltf", scene, newMeshes => {
      
            const mesh = scene.meshes[0];

            //mesh.position.y  =  -2.5;
            //mesh.position.z  =  1.5;

            //mesh.rotation  = new BABYLON.Vector3([X-axis rotation], [Y-axis rotation], [Z-axis rotation]); 
            // Used to orient the 3D model

            //mesh.rotation  = new BABYLON.Vector3(0, Math.PI, 0); // 3DModel displayed from the behind
            //mesh.rotation  = new BABYLON.Vector3(0, Math.PI/2, 0); // 3DModel displayed from the side
            mesh.rotation  = new BABYLON.Vector3(0, 0, 0); // 3DModel displayed from the front

            scene.activeCamera = null;
            scene.createDefaultCameraOrLight(true);
            scene.activeCamera.attachControl(canvas, false);
        });

        return scene;
    }

    const scene = createScene(); //Call the createScene function

    // Register a render loop to repeatedly render the scene
    engine.runRenderLoop(() => {
        scene.render();
    });

    // Watch for browser/canvas resize events
    window.addEventListener("resize", () => {
        engine.resize();
    });

}

// Start processing after all DOM elements have been loaded
window.addEventListener("DOMContentLoaded", main);

JavaScript内の

// Load and display 3D model in glTF file format
BABYLON.SceneLoader.Append("https://rawcdn.githack.com/KhronosGroup/glTF-WebGL-PBR/e7d707f3618d7e7cd5a78ce7b1403960ee3f7173/models/AppleTree/glTF/", "AppleTree.gltf", scene, newMeshes => {
      
    const mesh = scene.meshes[0];

    //mesh.position.y  =  -2.5;
    //mesh.position.z  =  1.5;

    //mesh.rotation  = new BABYLON.Vector3([X-axis rotation], [Y-axis rotation], [Z-axis rotation]); 
    // Used to orient the 3D model

    //mesh.rotation  = new BABYLON.Vector3(0, Math.PI, 0); // 3DModel displayed from the behind
    //mesh.rotation  = new BABYLON.Vector3(0, Math.PI/2, 0); // 3DModel displayed from the side
    mesh.rotation  = new BABYLON.Vector3(0, 0, 0); // 3DModel displayed from the front

    scene.activeCamera = null;
    scene.createDefaultCameraOrLight(true);
    scene.activeCamera.attachControl(canvas, false);
});

で3Dモデルを読み込んで表示しています。

BABYLON.SceneLoader.Append("https://rawcdn.githack.com/KhronosGroup/glTF-WebGL-PBR/e7d707f3618d7e7cd5a78ce7b1403960ee3f7173/models/AppleTree/glTF/", "AppleTree.gltf", scene, newMeshes => {

で指定している3Dモデルファイルを読み込んで表示します。

あとは
mesh.position.x、mesh.position.y、mesh.position.z で位置、mesh.rotationで回転を指定して3Dモデルの見え方を調節しています。

このnoteのここ以降の残りのコードは、基本的にこれらのファイル、位置、回転等を変更していろいろな3Dモデルを表示しているものです。


Babylon.js v6.3.1 Practice#19 glTF 3D Model Display03

Babylon.js v6.3.1 Practice#19 glTF 3D Model Display03

HTML Practice#18と共通
CSS Practice#18と共通
JavaScript Practice#18とほぼ共通 → 読み込み対象となるglTFファイルの修正と、その表示のためのサイズ・角度 等が修正されている


Babylon.js v6.3.1 Practice#20 glTF 3D Model Display04

Babylon.js v6.3.1 Practice#20 glTF 3D Model Display04

HTML Practice#18と共通
CSS Practice#18と共通
JavaScript Practice#18とほぼ共通 → 読み込み対象となるglTFファイルの修正と、その表示のためのサイズ・角度 等が修正されている


Babylon.js v6.3.1 Practice#21 glTF 3D Model Display05

Babylon.js v6.3.1 Practice#21 glTF 3D Model Display05

HTML Practice#18と共通
CSS Practice#18と共通
JavaScript Practice#18とほぼ共通 → 読み込み対象となるglTFファイルの修正と、その表示のためのサイズ・角度 等が修正されている


Babylon.js v6.3.1 Practice#22 glTF 3D Model Display06

Babylon.js v6.3.1 Practice#22 glTF 3D Model Display06

HTML Practice#18と共通
CSS Practice#18と共通
JavaScript Practice#18とほぼ共通 → 読み込み対象となるglTFファイルの修正と、その表示のためのサイズ・角度 等が修正されている


Babylon.js v6.3.1 Practice#23 glTF 3D Model Display07

Babylon.js v6.3.1 Practice#23 glTF 3D Model Display07

HTML Practice#18と共通
CSS Practice#18と共通
JavaScript Practice#18とほぼ共通 → 読み込み対象となるglTFファイルの修正と、その表示のためのサイズ・角度 等が修正されている


Babylon.js v6.3.1 Practice#24 glTF 3D Model Display08

Babylon.js v6.3.1 Practice#24 glTF 3D Model Display08

HTML Practice#18と共通
CSS Practice#18と共通
JavaScript Practice#18とほぼ共通 → 読み込み対象となるglTFファイルの修正と、その表示のためのサイズ・角度 等が修正されている


Babylon.js v6.3.1 Practice#25 glTF 3D Model Display09

Babylon.js v6.3.1 Practice#25 glTF 3D Model Display09

HTML Practice#18と共通
CSS Practice#18と共通
JavaScript Practice#18とほぼ共通 → 読み込み対象となるglTFファイルの修正と、その表示のためのサイズ・角度 等が修正されている


Babylon.js v6.3.1 Practice#26 glTF 3D Model Display10

Babylon.js v6.3.1 Practice#26 glTF 3D Model Display10

HTML Practice#18と共通
CSS Practice#18と共通
JavaScript Practice#18とほぼ共通 → 読み込み対象となるglTFファイルの修正と、その表示のためのサイズ・角度 等が修正されている


Babylon.js v6.3.1 Practice#27 glTF 3D Model Display11

Babylon.js v6.3.1 Practice#27 glTF 3D Model Display11

HTML Practice#18と共通
CSS Practice#18と共通
JavaScript Practice#18とほぼ共通 → 読み込み対象となるglTFファイルの修正と、その表示のためのサイズ・角度 等が修正されている


Babylon.js v6.3.1 Practice#28 glTF 3D Model Display12

Babylon.js v6.3.1 Practice#28 glTF 3D Model Display12

HTML Practice#18と共通
CSS Practice#18と共通
JavaScript Practice#18とほぼ共通 → 読み込み対象となるglTFファイルの修正と、その表示のためのサイズ・角度 等が修正されている


Babylon.js v6.3.1 Practice#29 glTF 3D Model Display13

Babylon.js v6.3.1 Practice#29 glTF 3D Model Display13

HTML Practice#18と共通
CSS Practice#18と共通
JavaScript Practice#18とほぼ共通 → 読み込み対象となるglTFファイルの修正と、その表示のためのサイズ・角度 等が修正されている


Babylon.js v6.3.1 Practice#30 glTF 3D Model Display14

Babylon.js v6.3.1 Practice#30 glTF 3D Model Display14

HTML Practice#18と共通
CSS Practice#18と共通
JavaScript Practice#18とほぼ共通 → 読み込み対象となるglTFファイルの修正と、その表示のためのサイズ・角度 等が修正されている


Babylon.js v6.3.1 Practice#31 glTF 3D Model Display15

Babylon.js v6.3.1 Practice#31 glTF 3D Model Display15

HTML Practice#18と共通
CSS Practice#18と共通
JavaScript Practice#18とほぼ共通 → 読み込み対象となるglTFファイルの修正と、その表示のためのサイズ・角度 等が修正されている


Babylon.js v6.3.1 Practice#32 glTF 3D Model Display16

Babylon.js v6.3.1 Practice#32 glTF 3D Model Display16

HTML Practice#18と共通
CSS Practice#18と共通
JavaScript Practice#18とほぼ共通 → 読み込み対象となるglTFファイルの修正と、その表示のためのサイズ・角度 等が修正されている


Babylon.js v6.3.1 Practice#33 glTF 3D Model Display17

Babylon.js v6.3.1 Practice#33 glTF 3D Model Display17

HTML Practice#18と共通
CSS Practice#18と共通
JavaScript Practice#18とほぼ共通 → 読み込み対象となるglTFファイルの修正と、その表示のためのサイズ・角度 等が修正されている


Babylon.js v6.3.1 Practice#34 glTF 3D Model Display18

Babylon.js v6.3.1 Practice#34 glTF 3D Model Display18

HTML Practice#18と共通
CSS Practice#18と共通
JavaScript Practice#18とほぼ共通 → 読み込み対象となるglTFファイルの修正と、その表示のためのサイズ・角度 等が修正されている


Babylon.js v6.3.1 Practice#35 glTF 3D Model Display19

Babylon.js v6.3.1 Practice#35 glTF 3D Model Display19

HTML Practice#18と共通
CSS Practice#18と共通
JavaScript Practice#18とほぼ共通 → 読み込み対象となるglTFファイルの修正と、その表示のためのサイズ・角度 等が修正されている


Babylon.js v6.3.1 Practice#36 glTF 3D Model Display20

Babylon.js v6.3.1 Practice#36 glTF 3D Model Display20

HTML Practice#18と共通
CSS Practice#18と共通
JavaScript Practice#18とほぼ共通 → 読み込み対象となるglTFファイルの修正と、その表示のためのサイズ・角度 等が修正されている


Babylon.js v6.3.1 Practice#37 glTF 3D Model Display21

Babylon.js v6.3.1 Practice#37 glTF 3D Model Display21

HTML Practice#18と共通
CSS Practice#18と共通
JavaScript Practice#18とほぼ共通 → 読み込み対象となるglTFファイルの修正と、その表示のためのサイズ・角度 等が修正されている


Babylon.js v6.3.1 Practice#38 glTF 3D Model Display22

Babylon.js v6.3.1 Practice#38 glTF 3D Model Display22

HTML Practice#18と共通
CSS Practice#18と共通
JavaScript Practice#18とほぼ共通 → 読み込み対象となるglTFファイルの修正と、その表示のためのサイズ・角度 等が修正されている

次回

まとめ


この記事が気に入ったらサポートをしてみませんか?