可视化-THREEJS 绘制星空

在这里插入图片描述

var skyConfig = {
	number: 1000,// 星星数量
	height: [90, 1000], // 中心店区间
	size: 5,// 大小
	color: 'rgba(255,255,255,1)'// 颜色
}
let position = [];
let index = [];
for (let i = 0; i < skyConfig.number; i++) {
    let x = randomFloat(-1, 1);
    let y = randomFloat(-1, 1);
    let z = randomFloat(-1, 1);
    let vec = new THREE.Vector3(x, y, z);
    let len = randomFloat(skyConfig.height[0] + thm.Config.radius, skyConfig.height[1] + thm.Config.radius);
    vec.setLength(len);
    position.push(vec.x, vec.y, vec.z);
    index.push(i);
}
var geometry = new THREE.BufferGeometry();
geometry.addAttribute("position", new THREE.Float32BufferAttribute(position, 3));
geometry.addAttribute("u_index", new THREE.Float32BufferAttribute(index, 1));
var material = new THREE.ShaderMaterial({
    vertexShader: skyShader.vertexShader,
    fragmentShader: skyShader.fragmentShader,
    side: THREE.DoubleSide,
    uniforms: {
        u_color: { value: new THREE.Color("#ffffff") },
        u_opacity: { value: 1 },
        u_size: { value: skyConfig .size },
        u_texture: { value: txues['_sky'] }, // 星星纹理
        u_time: { value: 0 }
    },
    transparent: true,
    depthTest: false,
    blending: THREE.AdditiveBlending,
});
thm.skyPoint = new THREE.Points(geometry, material);
scene.add(thm.skyPoint)
// shader 
var skyShader=![在这里插入图片描述](https://img-blog.csdnimg.cn/20191220112157194.gif) {
        vertexShader: `
            attribute float u_index;
            varying float c_index;
            uniform float u_size;
            uniform float u_time;
            void main(){ 
                c_index = u_index; 
                vec4 myPosition = modelViewMatrix * vec4(position,1.0);
                gl_Position =  projectionMatrix * myPosition;
                float c_size =abs(cos(u_time + u_index)) * u_size;
                gl_PointSize = c_size * 300.0 / (-myPosition.z);
            }
        `,
        fragmentShader: `
        uniform vec3 u_color;
        uniform float u_opacity;
        uniform sampler2D u_texture;
        void main(){ 
            gl_FragColor = vec4(u_color,u_opacity) * texture2D(u_texture, vec2(gl_PointCoord.x, 1.0 - gl_PointCoord.y));
        }
            
        `
    }
// render 
thm.skyPoint.material.uniforms.u_time.value += dt;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸡饶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值