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);
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);