three模拟真实的暴风雪下雪动画效果代码

代码语言:html

所属分类:动画

代码描述:three模拟真实的暴风雪下雪动画效果代码

代码标签: 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