three+threeasy实现夜晚高速行驶的汽车动画效果代码

代码语言:html

所属分类:动画

代码描述:three+threeasy实现夜晚高速行驶的汽车动画效果代码

代码标签: three threeasy 夜晚 高速 行驶 汽车 动画

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

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

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


  <meta name="viewport" content="width=device-width, initial-scale=1">
  
  
  
<style>
@import url("https://fonts.googleapis.com/css?family=Merriweather:400,400i,700");
* {
	margin: 0;
}
body  {
	font-family: Merriweather, serif;
}
.loading {
	width: 100%;
	min-height: 100vh;
	display: grid;
	place-items: center;
	background: #001219;
	color: #e9c46a;
	position: absolute;
	top: 0;
	left: 0;
	transition: 1.5s ease-in-out;
}
</style>


  
  
</head>

<body translate="no">

<div class="loading">
	<h1>Loading</h1>
</div>

<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/es-module-shims.1.6.3.js"></script>
<script type="importmap">
  {
    "imports": {
      "three": "//repo.bfw.wiki/bfwrepo/js/module/three/build/160/three.module.js",
      "three/addons/": "//repo.bfw.wiki/bfwrepo/js/module/three/examples/160/jsm/",
			"threeasy": "//repo.bfw.wiki/bfwrepo/js/module/threeasy.min.js"
    }
  }
</script>

      <script type="module">
console.clear();

import * as THREE from "three";
import { GLTFLoader } from "three/addons/loaders/GLTFLoader.js";
// import { OrbitControls } from "three/addons/controls/OrbitControls";
import Threeasy from "threeasy";

// COLORS
const white = new THREE.Color(0xe9c46a);
const black = new THREE.Color(0x001219);
const red = new THREE.Color(0xe63946);
const blue = new THREE.Color(0x457b9d);

// CREATE
const createDirLight = (c = 0xffffff, s = .5) => {
  const directionalLight = new THREE.DirectionalLight(c, s);
  app.scene.add(directionalLight);
  return directionalLight;
};
const createPointLight = (c = 0xffffff, s = .5) => {
  const pointLight = new THREE.SpotLight(c, s);
  return pointLight;
};
const createSpotLight = (c = 0xffffff, s = .5, w = .3) => {
  const spotLight = new THREE.SpotLight(c, s);
  // console.log(spotLight)
  spotLight.position.set(0, 10, 0);
  spotLight.castShadow = true;

  spotLight.shadow.mapSize.width = 1024;
  spotLight.shadow.mapSize.height = 1024;

  spotLight.shadow.camera.near = 50;
  spotLight.shadow.camera.far = 40;
  spotLight.shadow.camera.fov = 10;

  spotLight.distance = 0;
  spotLight.angle = Math.PI * w;
  spotLight.penumbra = 1;
  spotLight.decay = 1;

  return spotLight;
};
const createLightPole = () => {
  const metal = new THREE.MeshPhysicalMaterial({
    color: 0x4a606d,
    roughness: .3,
    metalness: 1 });

  const geo = new THREE.CylinderGeometry(
  .2, // radiusTop
  .2, // radiusBottom
  100, // height
  16, // radialSegments
  1);

  const mesh = new THREE.Mesh(geo, metal);
  return mesh;
};
const createMainSpotLight = () => {
  const spotLight = createSpotLight(blue, 120);
  spotLight.position.set(0, 10, 0);
  app.scene.add(spotLight);
  app.scene.add(spotLight.target);

  const lightPole = createLightPole();
  lightPole.position.set(6, 0, 0);
  app.scene.add(lightPole);

  // ANIMTION
  app.animator.add(() => {
    const spotlightTravel = 50;

    let newPos = spotLight.position.z - .4;
    if (newPos < -spotlightTravel) newPos = spotlightTravel;
    spotLight.position.z = newPos;
    spotLight.target.position.z = newPos;
    lightPole.position.z = newPos;
  });

  return spotLight;
};
const createWall = () => {
  let geo = new THREE.BoxGeometry(.2, 2, 500, 1);
  let mat = new THREE.MeshStandardMaterial({ color: blue });
  let mesh = new THREE.Mesh(geo, mat);
  // mesh.rotation.x = -.5*Math.PI;
  mesh.position.set(5, -1, 0);
  mesh.recieveShadow = true;
  mesh.name = "wall";
  app.scene.add(mesh);

  mesh.material.normalMap = app.wood_nor;
  mesh.material.displacementMap = app.wood_dis;
  mesh.material.displacementScale = .05;
  mesh.material.roughnessMap = app.wood_rgh;
  mesh.material.needsUpdate = true;

  const speed = .003;
  app.animator.add(() => {
    mesh.material.normalMap.offset.y -= speed;
    mesh.material.r.........完整代码请登录后点击上方下载按钮下载查看

网友评论0