vue+three,粒子星空

发布时间 2024-01-04 11:50:09作者: QinHaoRan

直接贴进去就可以用。

<template>
    <div id="container"></div>
</template>
  
<script>
 //引入three
import * as THREE from 'three'
//引入控制器
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'
let scene = new THREE.Scene()
// 相机
let camera = new THREE.PerspectiveCamera();
// 远,高,横向
camera.position.set(500, 1000, 500);
camera.lookAt(0, 0, 0);
scene.add(camera)
// 光
const ambientLight = new THREE.AmbientLight(0xffffff, 0) // 创建环境光
scene.add(ambientLight) // 将环境光添加到场景
// 渲染器变量
let renderer;
export default {
    data() {
        return {
        }
    },
    mounted() {
        this.init()
    },
    methods: {
        // 初始化
        init() {
            // 创建粒子
            this.createSprites() 
            // 创建渲染器
            this.createRender() 
             // 渲染
            this.render()
        },
        // 创建粒子
        createSprites() {
            // 创建粒子材质
            const material = new THREE.SpriteMaterial() 
            // 粒子数量
            let size = 2000;
            for (let x = 0; x < size; x++) {
                // 创建粒子
                const particle = new THREE.Sprite(material) 
                //随机粒子位置
                const x = (Math.random() * size + Math.random() * size) / 2 - size / 2
                const y = (Math.random() * size + Math.random() * size) / 2 - size / 2
                const z = (Math.random() * size + Math.random() * size) / 2 - size / 2
                particle.position.set(x, y, z)
                //加入场景
                scene.add(particle)
            }
        },
        // 创建渲染器
        createRender() {
            const container = document.getElementById('container')
            renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true })
            // 设置渲染区域尺寸
            renderer.setSize(window.innerWidth, window.innerHeight)
            // 显示阴影; 
            renderer.shadowMap.enabled = true 
            renderer.shadowMap.type = THREE.PCFSoftShadowMap
            // 设置背景颜色
            renderer.setClearColor(0x000000, 1) 
            new OrbitControls(camera, renderer.domElement)
            container.appendChild(renderer.domElement)
        },

        render() {
            renderer.render(scene, camera)
            requestAnimationFrame(this.render)
        },
    }
}
</script>
<style></style>