three.js两大神器:粒子效果与补间动画,很好很强大!




// 引入Three.js相关库
import * as THREE from 'three';
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
import { TWEEN } from 'three/examples/jsm/libs/tween.module.min.js';
 
// 设置场景、相机和渲染器
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
 
// 创建补间动画库TWEEN的全局计时器
TWEEN.init();
 
// 创建星空背景
const starsGeometry = new THREE.SphereGeometry(10000, 200, 200);
const starsMaterial = new THREE.MeshBasicMaterial({ color: 0x000000 });
const stars = new THREE.Mesh(starsGeometry, starsMaterial);
scene.add(stars);
 
// 创建补间动画 - 让星空旋转
new TWEEN.Tween(stars.rotation).to({
    y: (Math.PI * 2)
}, 10000).easing(TWEEN.Easing.Linear).repeat(Infinity).start();
 
// 创建粒子系统
const particleCount = 1000;
const particleGeometry = new THREE.BufferGeometry();
const positions = new Float32Array(particleCount * 3);
particleGeometry.setAttribute('position', new THREE.BufferAttribute(positions, 3));
const particleMaterial = new THREE.PointsMaterial({ color: 0xffffff, size: 1 });
const particles = new THREE.Points(particleGeometry, particleMaterial);
scene.add(particles);
 
// 初始化粒子位置
function initParticles() {
    for (let i = 0; i < particleCount; i++) {
        positions[i * 3 + 0] = Math.random() * 2 - 1;
        positions[i * 3 + 1] = Math.random() * 2 - 1;
        positions[i * 3 + 2] = Math.random() * 2 - 1;
    }
    particleGeometry.attributes.position.needsUpdate = true;
}
initParticles();
 
// 创建补间动画 - 让粒子随机飞舞
new TWEEN.Tween(this).to({}, 10000).onUpdate(function() {
    for (let i = 0; i < particleCount; i++) {
        const particle = {
            x: positions[i * 3 + 0],
            y: positions[i * 3 + 1],
            z: positions[i * 3 + 2]
        };
        particle.y += Math.random() * 0.01;
        particle.x += Math.random() * 0.001;
        particle.z += Math.random() * 0.001;
        positions[i * 3 + 0] = particle.x;
        positions[i * 3 + 1] = particle.y;
        posit
最后修改于:2024年08月10日 19:02

评论已关闭

推荐阅读

DDPG 模型解析,附Pytorch完整代码
2024年11月24日
DQN 模型解析,附Pytorch完整代码
2024年11月24日
AIGC实战——Transformer模型
2024年12月01日
Socket TCP 和 UDP 编程基础(Python)
2024年11月30日
python , tcp , udp
如何使用 ChatGPT 进行学术润色?你需要这些指令
2024年12月01日
AI
最新 Python 调用 OpenAi 详细教程实现问答、图像合成、图像理解、语音合成、语音识别(详细教程)
2024年11月24日
ChatGPT 和 DALL·E 2 配合生成故事绘本
2024年12月01日
omegaconf,一个超强的 Python 库!
2024年11月24日
【视觉AIGC识别】误差特征、人脸伪造检测、其他类型假图检测
2024年12月01日
[超级详细]如何在深度学习训练模型过程中使用 GPU 加速
2024年11月29日
Python 物理引擎pymunk最完整教程
2024年11月27日
MediaPipe 人体姿态与手指关键点检测教程
2024年11月27日
深入了解 Taipy:Python 打造 Web 应用的全面教程
2024年11月26日
基于Transformer的时间序列预测模型
2024年11月25日
Python在金融大数据分析中的AI应用(股价分析、量化交易)实战
2024年11月25日
AIGC Gradio系列学习教程之Components
2024年12月01日
Python3 `asyncio` — 异步 I/O,事件循环和并发工具
2024年11月30日
llama-factory SFT系列教程:大模型在自定义数据集 LoRA 训练与部署
2024年12月01日
Python 多线程和多进程用法
2024年11月24日
Python socket详解,全网最全教程
2024年11月27日