8. Render Scene on Demond#

  • Create html environment

<template>
  <div id="bg" ref="base_container"></div>
</template>
  • Config Copper and Vue

import * as Copper from "gltfloader-plugin-test";
import { getCurrentInstance, onMounted } from "vue";
import { Scene } from "three";

let refs = null;
let bg: HTMLDivElement;
let appRenderer: Copper.copperRendererOnDemond;
let scene: Copper.copperSceneOnDemond;
onMounted(() => {
  let { $refs } = (getCurrentInstance() as any).proxy;
  refs = $refs;
  bg = refs.base_container;

  appRenderer = new Copper.copperRendererOnDemond(bg, {
    guiOpen: true,
    camera: true,
    performance: true,
    light: true,
  });
  loadModel("/test.glb", "test");
});
  • load model

function loadModel(url: string, name: string) {
  scene = appRenderer.getSceneByName(name) as Copper.copperSceneOnDemond;
  if (scene == undefined) {
    scene = appRenderer.createScene(name) as Copper.copperSceneOnDemond;
    const funa = () => {
      window.location.href =
        "https://linkungao.github.io/medtech-heart-vue/model-heart";
      document.removeEventListener("click", funa);
    };

    const opt = ["whole-body", "whole-body_2", "whole-body_1"];
    if (scene) {
      appRenderer.setCurrentScene(scene);
      if (name === "test") {
        scene.loadGltf(url, (content) => {
          appRenderer.animate();
          scene &&
            scene.pickModel(
              content,
              (mesh) => {
                if (mesh && mesh.name === "whole-heart") {
                  document.addEventListener("click", funa);
                } else {
                  document.removeEventListener("click", funa);
                }
                appRenderer.animate();
              },
              opt
            );
        });
      }
      scene.loadViewUrl("/human_view.json");

      scene.updateBackground("#5454ad", "#18e5a7");
    }
    Copper.setHDRFilePath("venice_sunset_1k.hdr");
    appRenderer.updateEnvironment();
  }
}