THREE.js绘制银河系

该代码段展示了如何使用THREE.js库创建一个3D效果,背景为黑色,包含参数化的星系形状。它涉及到BufferGeometry、颜色混合、点材质以及纹理加载,最终生成具有动态旋转和光晕效果的3D点云。
摘要由CSDN通过智能技术生成

在这里插入图片描述

function createYinhexi(){
  scene.background = new THREE.Color("#000000");
  const scale = 2;
  const parameters = {
    count: 50000,
    size: .6,
    radius: 10,
    branches: 20,
    spin: -1.72,
    randomness: 0.3,
    randomnessPower: 3,
    insideColor: "#ff6030",
    outsideColor: "#1b3984",
  };
  
  let geometry = null;
  let material = null;
  let points = null;
  geometry = new THREE.BufferGeometry();
  const positionsArray = new Float32Array(parameters.count * 3);
  const colors = new Float32Array(parameters.count * 3);

  const colorInside = new THREE.Color(parameters.insideColor);
  const colorOutside = new THREE.Color(parameters.outsideColor);

  for (let i = 0; i < parameters.count; i++) {
    const i3 = i * 3;

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

    const randomX =
      Math.pow(Math.random(), parameters.randomnessPower) *
      (Math.random() < 0.5 ? 1 : -1) *
      parameters.randomness *
      radius;
    const randomY =
      Math.pow(Math.random(), parameters.randomnessPower) *
      (Math.random() < 0.5 ? 1 : -1) *
      parameters.randomness *
      radius;
    const randomZ =
      Math.pow(Math.random(), parameters.randomnessPower) *
      (Math.random() < 0.5 ? 1 : -1) *
      parameters.randomness *
      radius;

    positionsArray[i3] = Math.cos(branchAngle + spinAngle) * radius + randomX;
    positionsArray[i3 + 1] = randomY;
    positionsArray[i3 + 2] =
      Math.sin(branchAngle + spinAngle) * radius + randomZ;

    // Color
    const mixedColor = colorInside.clone();
    mixedColor.lerp(colorOutside, radius / parameters.radius);

    colors[i3] = mixedColor.r;
    colors[i3 + 1] = mixedColor.g;
    colors[i3 + 2] = mixedColor.b;
  }

  geometry.setAttribute(
    "position",
    new THREE.BufferAttribute(positionsArray, 3)
  );

  geometry.setAttribute("color", new THREE.BufferAttribute(colors, 3));

  const tLoader = new THREE.TextureLoader();
  const map = tLoader.load('https://wall.alva.com.cn/baikeResource/yinhe_star.png');
  // const map = tLoader.load('https://wall.alva.com.cn/baikeResource/circle.png');
  material = new THREE.PointsMaterial({
    size: parameters.size,
    map: map,
    alphaMap: map,
    transparent: true,
    depthWrite: false,
    blending: THREE.AdditiveBlending,
    vertexColors: true,
    // sizeAttenuation: true,
  });

  points = new THREE.Points(geometry, material);
  points.position.y += 4;
  points.scale.set(scale, scale, scale);
  points.rotation.x += Math.PI / 5;
  scene.add(points);

  // setInterval(()=>{
  //   currModel.rotation.y += .003;
  // }, 100);
  composer = new EffectComposer(renderer);
  let r = new RenderPass(scene, camera);
  let u = new UnrealBloomPass(new THREE.Vector2(770, 700), 1.5, 0.4, 0.85);
  composer.addPass(r);
  composer.addPass(u);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Three.js是一个用于创建和展示3D图形的JavaScript库。它提供了丰富的功能和工具,可以轻松地在Web浏览器中创建交互式的3D场景。 要使用Three.js绘制三棱锥,首先需要创建一个场景(Scene)、相机(Camera)和渲染器(Renderer)。然后,可以创建一个几何体(Geometry)来表示三棱锥的形状,并将其添加到场景中。最后,通过渲染器将场景和相机渲染到HTML页面上。 以下是一个使用Three.js绘制三棱锥的示例代码: ```javascript // 创建场景 var scene = new THREE.Scene(); // 创建相机 var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); camera.position.z = 5; // 创建渲染器 var renderer = new THREE.WebGLRenderer(); renderer.setSize(window.innerWidth, window.innerHeight); document.body.appendChild(renderer.domElement); // 创建三棱锥的几何体 var geometry = new THREE.ConeGeometry(1, 2, 3); // 创建材质 var material = new THREE.MeshBasicMaterial({ color: 0x00ff00 }); // 创建网格对象 var cone = new THREE.Mesh(geometry, material); // 将三棱锥添加到场景中 scene.add(cone); // 渲染场景和相机 function animate() { requestAnimationFrame(animate); cone.rotation.x += 0.01; cone.rotation.y += 0.01; renderer.render(scene, camera); } animate(); ``` 这段代码创建了一个场景、相机和渲染器,并使用ConeGeometry创建了一个三棱锥的几何体。然后,将几何体和材质创建一个网格对象,并将其添加到场景中。最后,通过渲染器将场景和相机渲染到HTML页面上。 希望这个示例能帮助你理解如何使用Three.js绘制三棱锥。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值