File size: 2,212 Bytes
fba2ed6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ff9a0bb
fba2ed6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
function main() {

    prepareToUploadFile();
    
  }
  function prepareToUploadFile(){
    /*
   * 送信イベントが発生したら実行
   */
  document.querySelector("#upload").addEventListener("submit", (e)=>{
    const targetImage = document.querySelector("#targetImage"); 
    // 規定の送信処理をキャンセル(画面遷移などしない)
    e.preventDefault();

    // 送信データの準備
    const formData = new FormData();
    formData.append("targetImage", targetImage.files[0]);  // ファイル内容を詰める

    const param = {
      method: "POST",
      body: formData
    }

    // アップロードする
    fetch(`/prediction`, param)
      .then((res)=>{
        return( res.json() );
      })
      .then((json)=>{
        // 通信が成功した際の処理
        load3dModel(json["path"], json["name"]);
      })
      .catch((error)=>{
        // エラー処理
        alert("残念、なんかエラー!")
      });
  });
  }
  function load3dModel(rcPath, rcName){

    const canvas = document.getElementById('renderCanvas');
    const engine = new BABYLON.Engine(canvas);
    // ここから
    function createScene() {
      // シーンを作成
      const scene = new BABYLON.Scene(engine);
      // カメラを作成
      const camera = new BABYLON.ArcRotateCamera("camera", -Math.PI / 2, Math.PI / 2.5, 3, new BABYLON.Vector3(0, 0, 0), scene);
      // カメラがユーザからの入力で動くように
      camera.attachControl(canvas, true);
      // ライトを作成
      const light = new BABYLON.HemisphericLight("light", new BABYLON.Vector3(0, 1, 0), scene);
      
      // 画像を読み込む
      BABYLON.SceneLoader.ImportMesh("", `/${rcPath}/`, `${rcName}`, scene, function (newMeshes) {
        // Create a default arc rotate camera and light.
        // createArcRotateCamera
        scene.createDefaultCameraOrLight(true, true, true);
    });
      return scene;
    }
    
    const scene = createScene();

    
    engine.runRenderLoop(() => {
      scene.render();
    });
    
    window.addEventListener('resize', () => {
      engine.resize();
    });
  }
  window.addEventListener('DOMContentLoaded', main);