three模拟真实的暴风雪下雪动画效果代码
代码语言:html
所属分类:动画
代码描述:three模拟真实的暴风雪下雪动画效果代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<style>
* {
margin: 0;
padding: 0;
}
html,
body {
overflow: hidden;
background-color: black;
}
canvas {
position: fixed;
top: 0;
left: 0;
outline: none;
}
.image {
position: absolute;
display: flex;
width: 100%;
height: 100%;
top: 0;
left: 0;
z-index: -1;
filter: brightness(0.5) blur(1px);
}
img {
object-fit: cover;
object-position: 50% 50%;
width: 100%;
height: auto;
}
</style>
</head>
<body translate="no">
<div class="image">
<img src="//repo.bfw.wiki/bfwrepo/image/65d420c223aa5.png" />
</div>
<canvas></canvas>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/three.128.js"></script>
<script type="module">
class SnowAnimation {
constructor(canvasSelector) {
// Initialize canvas
const canvas = document.querySelector(canvasSelector);
if (!canvas)
throw new Error("Canvas element not found");
this.canvas = canvas;
// Initialize properties
this.geometry = null;
this.material = null;
this.points = null;
this.previousTime = 0;
this.clock = new THREE.Clock();
// Setup snow parameters
this.snow = {
count: document.documentElement.clientWidth * 20,
randomness: 0.5,
randomnessPower: 3,
sizeMin: 1.0,
sizeMax: 4.0,
opacityMin: 0.1,
opacityMax: 0.4,
gravity: 25.0
};
// Setup wind
this.wind = {
current: 0,
force: 0.1,
target: 0.1,
min: 0.1,
max: 0.2,
easing: 0.005
};
// Initialize Three.js components
this.scene = new THREE.Scene();
this.scene.background = null;
const { width, height } = this.getViewportSize();
this.camera = new THREE.PerspectiveCamera(50, width / height, 0.5, 100);
this.camera.position.set(-0.25, 0, -2);
this.scene.add(this.camera);
this.renderer = new THREE.WebGLRenderer({
canvas: this.canvas,
alpha: true
});
this.renderer.setSize(width, height);
this.renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));
// Setup event listeners
window.addEventListener("resize", this.handleResize.bind(this));
// Initialize snow
this.generateSnow();
}
getViewportSize() {
return {
width: window.innerWidth,
height: window.innerHeight
};
}
handleResize() {
const { width, height } = this.getViewportSize();
this.camera.aspect = width / height;
this.camera.updateProjectionMatrix();
this.renderer.setSize(width, height);
this.renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));
}
generateSnow() {
var _a, _b;
if (this.points !== null) {
(_a = this.geometry) === null || _a === void 0 ? void 0 : _a.dispose();
(_b = this.material) === null || _b === void 0 ? void 0 : _b.dispose();
this.scene.remove(t.........完整代码请登录后点击上方下载按钮下载查看
网友评论0