three实现三维圣诞节圣诞树彩灯礼物文字动画场景效果代码
代码语言:html
所属分类:三维
代码描述:three实现三维圣诞节圣诞树彩灯礼物文字动画场景效果代码
代码标签: three 三维 圣诞节 圣诞树 彩灯 礼物 文字 动画 场景
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<style>
* {
-moz-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
user-select: none;
margin: 0;
padding: 0;
}
canvas {
position: fixed;
width: 100%;
height: 100%;
top: 0;
left: 0;
margin: 0;
padding: 0;
z-index: 0;
}
:root {
--outside-border-size: 1px;
--outside-margin: 3px;
--inside-border-size: 3px;
--inside-margin: 3px;
}
#deco-border {
border: var(--outside-border-size) solid #ffd700;
position: absolute;
top: 0;
left: 0;
width: calc(
100% - var(--outside-border-size) * 2 - var(--outside-margin) * 2
);
height: calc(
100% - var(--outside-border-size) * 2 - var(--outside-margin) * 2
);
z-index: 1;
margin: var(--outside-margin);
pointer-events: none;
}
#deco-border:after {
border: var(--inside-border-size) solid #ffd700;
position: absolute;
top: 0;
left: 0;
width: calc(100% - var(--inside-border-size) * 2 - var(--inside-margin) * 2);
height: calc(100% - var(--inside-border-size) * 2 - var(--inside-margin) * 2);
z-index: 1;
margin: var(--inside-margin);
content: "";
}
</style>
</head>
<body>
<!-- partial:index.partial.html -->
<!-- using three.js -->
<div id="deco-border"></div>
<script type="x-shader/x-vertex" id="vertexshader">
varying vec2 vUv;
void main() {
vUv = uv;
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
}
</script>
<script type="x-shader/x-fragment" id="fragmentshader">
uniform sampler2D baseTexture;
uniform sampler2D bloomTexture;
varying vec2 vUv;
void main() {
gl_FragColor = ( texture2D( baseTexture, vUv ) + vec4( 1.0 ) * texture2D( bloomTexture, vUv ) );
}
</script>
<!-- partial -->
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/three.146.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/OrbitControls.145.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/MeshSurfaceSampler.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/RenderPass.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/UnrealBloomPass.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/CopyShader.146.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/FontLoader.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/TextGeometry.145.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/CurveModifier.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/BufferGeometryUtils.js"></script>
<script >
const e = "Happy Holidays!";
!function() {
"use strict";
function t(e, t, o) {
let n, a = t.length, s = new THREE.InstancedMesh(m.geometry, m.material, a);
j.set(0, 0, 0, 0);
for (let r = 0; r < a; r++) V.set(t[r][0], t[r][1], t[r][2]), F = V, "ico" == o && (k.set(Math.random() * Math.PI, Math.random() * Math.PI, Math.random() * Math.PI),
j.setFromEuler(k)), 1 != e && U.set(e, e, e), D.compose(F, j, U), n = "ball" == o ? new THREE.Color().setHSL(THREE.MathUtils.randFloat(.25, .4), 1, .18) : "ico" == o ? new THREE.Color().setHSL(Math.random(), 1, .8) : "light" == o ? new THREE.Color().setHSL(Math.random(), 1, .5) : new THREE.Color().setHSL(Math.random(), 1, .7),
s.setMatrixAt(r, D), s.setColorAt(r, n);
if ("light" == o) {
setInterval(function() {
s.layers.toggle(v), l();
}, 1e3);
}
d.add(s);
}
function o(e) {
let t = this.attributes.position;
if (null != this.index) return;
let o = t.count / 3, n = [], a = new THREE.Triangle(), s = new THREE.Vector3(), r = new THREE.Vector3(), i = new THREE.Vector3();
for (let E = 0; E < o; E++) {
s.fromBufferAttribute(t, 3 * E + 0), r.fromBufferAttribute(t, 3 * E + 1), i.fromBufferAttribute(t, 3 * E + 2),
a.set(s, r, i);
let o = new THREE.Vector3();
a.getMidpoint(o);
let l = s.distanceTo(r), h = Math.sqrt(3) / 2 * l * e, d = o.clone().normalize().setLength(h);
o.add(d), n.push(o.clone(), s.clone(), r.clone(), o.clone(), r.clone(), i.clone(), o.clone(), i.clone(), s.clone());
}
let E = new THREE.BufferGeometry().setFromPoints(n);
return E.computeVertexNormals(), E;
}
function n(e, t, o, n, a, s, r, i = !1) {
u = i ? new THREE.CylinderGeometry(e / 2, e / 2, t, 20, 1) : new THREE.BoxGeometry(e, t, o),
(R = R.clone()).color.set(s);
let E = new THREE.Mesh(u, R);
.........完整代码请登录后点击上方下载按钮下载查看
网友评论0