three实现三维可打开摄像头的mac笔记本电脑代码

代码语言:html

所属分类:三维

代码描述:three实现三维可打开摄像头的mac笔记本电脑代码,可设置笔记本角度和内容滚动,还可以将本地摄像头投影到笔记本电脑屏幕上。

代码标签: three 三维 打开 摄像头 mac 笔记本 电脑 代码

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en" >

<head>
  <meta charset="UTF-8">
  

  
  
  
<style>
html, body {
    overflow: hidden;
    padding: 0;
    margin: 0;
}

.container {
    position: relative;
    overflow: hidden;
    background: #C6FFDD;
    background: linear-gradient(120deg, #f7797d, #FBD786, #C6FFDD);
    height: 100vh;
}

canvas {
    display: block;
    width: 100%;
	 cursor: grab;
}

.lil-gui {
    --width: 450px;
    --name-width: 60%;
    max-width: 90%;
    --widget-height: 20px;
    font-size: 15px;
    --input-font-size: 15px;
    --padding: 10px;
    --spacing: 10px;
    --slider-knob-width: 5px;
    --background-color: rgba(5, 0, 15, .8);
    --widget-color: rgba(255, 255, 255, .3);
    --focus-color: rgba(255, 255, 255, .4);
    --hover-color: rgba(255, 255, 255, .5);
    --font-family: monospace;
}
</style>


  
</head>

<body translate="no">
  <div class="container">
    <canvas id="laptop"></canvas>
</div>

<script type="importmap">{
	"imports": {
		"three": "//repo.bfw.wiki/bfwrepo/js/module/three/build/151/three.module.js",
		"three/addons/": "//repo.bfw.wiki/bfwrepo/js/module/three/examples/151/jsm/"
	}
}
</script>


<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/es-module-shims.1.6.3.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/gsap.3.9.1.js"></script>
      <script  type="module">
import * as THREE from "three";
import { GLTFLoader } from "three/addons/loaders/GLTFLoader.js";
import { OrbitControls } from "three/addons/controls/OrbitControls.js";
import { GUI } from "//repo.bfw.wiki/bfwrepo/js/lil-gui.esm.js";


// =======================================================
// Globals

const canvasEl = document.querySelector("#laptop");
const videoEl = document.createElement("video");

let mainTl, laptopAppearTl, laptopOpeningTl, screenOnTl, cameraOnTl, textureScrollTl, floatingTl;
let scene, camera, renderer, orbit;
let darkPlasticMaterial, cameraMaterial, baseMetalMaterial, logoMaterial, screenMaterial, keyboardMaterial;
let macGroup, lidGroup, bottomGroup, screenMesh, lightHolder, screenLight;
let screenImageTexture, screenCameraTexture;

let openingControl, contentScrollControl;
const controlParams = {
  cameraOn: false,
  openingProgress: 0,
  contentScrollProgress: 0 };

const screenSize = [29.4, 20];


// =======================================================
// Start the app

initScene();
createMaterials();

// connectToWebcam(); // if you set the webcam in advance

const modelLoader = new GLTFLoader();
modelLoader.load(
"//repo.bfw.wiki/bfwrepo/threemodel/mac/mac-noUv.glb",
glb => {
  parseModel(glb);
  addScreen();
  addKeyboard();
  createControls();
  createTimelines();
  mainTl.play(0);

  render();
  updateSceneSize();
  window.addEventListener("resize", () => updateSceneSize());
});


// =======================================================
// Three.js stuff

function initScene() {

  scene = new THREE.Scene();

  camera = new THREE.PerspectiveCamera(40, window.innerWidth / window.innerHeight, 10, 1000);
  camera.position.z = 75;

  renderer = new THREE.WebGLRenderer({
    antialias: true,
    alpha: true,
    canvas: canvasEl });

  renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));

  const ambientLight = new THREE.AmbientLight(0xffffff, .2);
  scene.add(ambientLight);

  lightHolder = new THREE.Group();
  scene.add(lightHolder);
  const light = new THREE.PointLight(0xFFF5E1, .8);
  light.position.set(0, 5, 50);
  lightHolder.add(light);

  orbit = new OrbitControls(camera, renderer.domElement);
  orbit.minDistance = 45;
  orbit.maxDistance = 120;
  orbit.enablePan = false;
  orbit.enableDamping = true;

  macGroup = new THREE.Group();
  macGroup.position.z = -10;
  scene.add(macGroup);
  lidGroup = new THREE.Group();
  macGroup.add(lidGroup);
  bottomGroup = new THREE.Group();
  macGroup.add(bottomGroup);
}

function updateSceneSize() {
  camera.aspect = window.innerWidth / window.innerHeight;
  camera.updateProjectionMatrix().........完整代码请登录后点击上方下载按钮下载查看

网友评论0