three 点材质 PointsMaterial

116 阅读1分钟

PointsMaterial 的一个最常见用途是创建点云。点云由大量离散的点组成,常用于模拟自然现象,例如星空、烟雾、雪花、尘埃等。通过调节点的大小、颜色和透明度,可以呈现出逼真的效果

PointsMaterial 有六个属性

  • alphaMap alpha贴图是一张灰度纹理,用于控制整个表面的不透明度。(黑色:完全透明;白色:完全不透明)。 默认值为null。仅使用纹理的颜色,忽略alpha通道(如果存在)。 对于RGB和RGBA纹理,WebGL渲染器在采样此纹理时将使用绿色通道, 因为在DXT压缩和未压缩RGB 565格式中为绿色提供了额外的精度。 Luminance-only以及luminance/alpha纹理也仍然有效。
  • color 材质的颜色(Color),默认值为白色 (0xffffff)。
  • fog 材质是否受雾影响。默认为true。
  • map 使用来自Texture的数据设置点的颜色。可以选择包括一个alpha通道,通常与 .transparent或.alphaTest。
  • size 设置点的大小。默认值为1.0。
  • sizeAttenuation 指定点的大小是否因相机深度而衰减。(仅限透视摄像头。)默认为true。
    // 创建几何体 (点的集合)
    const geometry = new THREE.BufferGeometry();
    const vertices = [];
    // 添加随机点的位置
    for (let i = 0; i < 1000; i++) {
        const x = THREE.MathUtils.randFloatSpread(10); // -5 到 5 之间的随机数
        const y = THREE.MathUtils.randFloatSpread(10);
        const z = THREE.MathUtils.randFloatSpread(10);
        vertices.push(x, y, z);
    }
    geometry.setAttribute('position', new THREE.Float32BufferAttribute(vertices, 3));
    // 加载纹理
    const textureLoader = new THREE.TextureLoader();
    const texture = textureLoader.load(person); // 替换为你的纹理图片路径
    // 创建材质
    const material = new THREE.PointsMaterial({
        color: 0x00ff00, // 绿色
        size: 0.1,       // 点的大小
        transparent: true, 
        map: texture,
        opacity: 0.75,   // 半透明效果
        sizeAttenuation: true, // 点的大小随距离衰减
    });
    // 创建点云对象
    const points = new THREE.Points(geometry, material);
    scene.add(points);