three实现三维迷宫鼠标光照跟随效果代码
代码语言:html
所属分类:三维
代码描述:three实现三维迷宫鼠标光照跟随效果代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<style>
@import url('https://fonts.googleapis.com/css2?family=Audiowide&display=swap');
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
overflow: hidden;
cursor: none;
background: #000;
}
h1 {
position: fixed;
top: 50%;
left: 50%;
transform: translateX(-50%) translateY(-50%);
text-transform: uppercase;
color: #f00;
font-family: 'Audiowide', cursive;
font-size: min(128px, 10vw);
z-index: 1;
}
#root {
opacity: 0;
transition: opacity 1s ease-out;
}
#root.-loaded {
opacity: 1;
}
.cursor {
position: fixed;
height: 64px;
width: 64px;
border-radius: 50%;
border: 2px solid #ffffff;
transform: translateX(calc(50vw - 32px)) translateY(calc(50vh - 32px));
}
</style>
</head>
<body >
<h1>Maze</h1>
<div id='root'>
<div class='cursor'></div>
</div>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/three.146.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/EffectComposer.146.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/ShaderPass.146.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/CopyShader.146.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/RenderPass.146.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/LuminosityHighPassShader.146.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/UnrealBloomPass.146.js"></script>
<script type='module'>
// https://www.npmjs.com/package/generate-maze
import generateMaze from '//repo.bfw.wiki/bfwrepo/js/module/generate-maze.module.js';
const COLOR_SCHEME = Object.freeze({
background: 0x000000,
wall: 0x777777,
floor: 0x333333,
box: 0xff0000,
});
class MaterialsLibrary {
static wall = new THREE.MeshStandardMaterial({
color: COLOR_SCHEME.wall,
});
static floor = new THREE.MeshStandardMaterial({
color: COLOR_SCHEME.floor,
});
static box = new THREE.MeshStandardMaterial({
color: COLOR_SCHEME.box,
});
}
class Maze extends THREE.Group {
static #boxGeometry = new THREE.BoxGeometry(0.2, 0.2, 0.2);
static #wallGeometry = new THREE.BoxGeometry(1.2, 0.2, 1);
static #addBox(room, roomOptions) {
let wallsAround = 0;
if (roomOptions.left) {
wallsAround++;
}
if (roomOptions.right) {
wallsAround++;
}
if (roomOptions.top) {
wallsAround++;
}
if (roomOptions.bottom) {
wallsAround++;
}
if (wallsAround > 1) {
return;
}
const boxMaterial = MaterialsLibrary.box;
const boxGeometry = Maze.#boxGeometry;
const box = new THREE.Mesh(boxGeometry, boxMaterial);
box.position.set(0, 0.5, -0.5);
box.castShadow = true;
box.receiveShadow = true;
room.add(box);
}
static #addWalls(room, roomOptions, x, y, size) {
const hasLeftWall = (x === 0) || (roomOptions.left);
const hasRightWall = (x === size - 1);
const hasTopWall = (y === 0) || (roo.........完整代码请登录后点击上方下载按钮下载查看
网友评论0