Three.js 银河星系效果 | 三维可视化 / AI 提示词

Three.js 银河星系效果 | 三维可视化 / AI 提示词

📋 AI 提示词

prompt 复制代码
使用 Three.js 创建银河星系效果,粒子围绕中心螺旋分布,使用 GUI 控制参数。

🖼️ 效果预览


🎮 案例演示

立即体验


效果描述

这是一个展示如何创建银河星系效果的示例,粒子围绕中心螺旋分布。

效果特性

  • 银河星系:创建 250000 个粒子
  • 螺旋分布:粒子围绕中心螺旋分布
  • 分支结构:粒子分为多个分支
  • 颜色渐变:粒子颜色从内到外渐变
  • GUI 控制:使用 GUI 控制参数
  • 纹理贴图:使用星形纹理

核心参数

参数 说明
粒子数量 250000 粒子总数
分支数量 6 星系分支数
分支半径 5 分支半径
旋转角度 0.2 旋转角度
内颜色 #ff812e 内部颜色
外颜色 #a668ff 外部颜色

核心代码解析

生成银河

javascript 复制代码
const generateGalaxy = () => {
    if (points) {
        geometry.dispose();
        material.dispose();
        scene.remove(points);
    }

    const positions = new Float32Array(params.particleCount * 3);
    const colors = new Float32Array(params.particleCount * 3);
    const innerColor = new THREE.Color(params.innerColor);
    const outerColor = new THREE.Color(params.outerColor);
    
    for (let i = 0; i < params.particleCount; i++) {
        const i3 = i * 3;

        const radius = params.branchRadius * Math.random();
        const branchAngle = ((i % params.branches) / params.branches) * Math.PI * 2;
        const spinAngle = params.spin * radius * Math.PI * 2;

        const randRadius = Math.random() * params.radialRandomness * radius;
        const { x: randX, y: randY, z: randZ } = getRandomPolarCoordinate(randRadius);

        positions[i3] = radius * Math.cos(branchAngle + spinAngle) + randX;
        positions[i3 + 1] = randY;
        positions[i3 + 2] = radius * Math.sin(branchAngle + spinAngle) + randZ;

        const mixedColor = innerColor.clone().lerp(outerColor, radius / params.branchRadius);
        colors[i3] = mixedColor.r;
        colors[i3 + 1] = mixedColor.g;
        colors[i3 + 2] = mixedColor.b;
    }

    material = new THREE.PointsMaterial({
        size: params.particleSize,
        sizeAttenuation: true,
        depthWrite: false,
        blending: THREE.AdditiveBlending,
        vertexColors: true,
        map: particleTexture,
        transparent: true,
    });

    geometry = new THREE.BufferGeometry();
    geometry.setAttribute("position", new THREE.BufferAttribute(positions, 3));
    geometry.setAttribute("color", new THREE.BufferAttribute(colors, 3));

    points = new THREE.Points(geometry, material);
    scene.add(points);
};

随机极坐标

javascript 复制代码
const getRandomPolarCoordinate = (radius) => {
    const theta = Math.random() * Math.PI * 2;
    const phi = Math.random() * Math.PI * 2;
    const x = radius * Math.sin(theta) * Math.cos(phi);
    const y = radius * Math.sin(theta) * Math.sin(phi);
    const z = radius * Math.cos(theta);
    return { x, y, z };
}

技术亮点

  1. 银河星系:创建银河星系效果
  2. 螺旋分布:粒子围绕中心螺旋分布
  3. 分支结构:粒子分为多个分支
  4. 颜色渐变:粒子颜色从内到外渐变
  5. GUI 控制:使用 GUI 控制参数

调试技巧

  1. 粒子数量:调整粒子数量测试性能
  2. 分支数量:调整分支数量改变结构
  3. 旋转角度:调整旋转角度改变螺旋
  4. 颜色渐变:调整颜色渐变参数
  5. 随机性:调整随机性参数

扩展方向

  1. 多层银河:创建多层银河效果
  2. 不同形状:使用不同的星系形状
  3. 动画效果:添加旋转动画
  4. 交互控制:添加更多交互控制
  5. 复杂结构:创建更复杂的星系结构

本文档由 ThreeLab 编辑整理,如需转载,请注明出处。

相关推荐
不加辣椒3 小时前
第 4 章 什么是 Harness Engineering
人工智能
桃西西呀3 小时前
上下文窗口都卷到 100 万了,大模型为什么还在为"位置"发愁?
人工智能·llm·ai编程
阿拉斯攀登3 小时前
SpringBoot整合MQTT:后端订阅设备数据、解析传感器报文
人工智能
用户298698530143 小时前
React 中 HTML 内容转 Word 文档的实现方案
javascript·react.js·html
然我3 小时前
模型不是 Agent:从零实现一个最小 Agent Loop
前端·人工智能·agent
mONESY3 小时前
我用 Next.js 16 + Supabase 从零做了个「背单词」H5 应用
javascript
boooooooom3 小时前
手把手做一个图 RAG 烹饪问答系统:Neo4j + Milvus + LLM 的工程实践
前端·javascript·后端
黄油面包3 小时前
Codex 额度三天见底后,我重新做了一周预算
前端·人工智能
AI效率君3 小时前
Deer‑Flow 2.0 + Go‑MCP‑Server(add加法工具)保姆级完整教程
人工智能·agent
阿拉斯攀登3 小时前
SpringCloud微服务MQTT架构:设备消息统一接入、业务分发设计
人工智能