经纬志
首页 / three.js / API 文档

PointsMaterial

先看结论

点材质。控制点的大小、颜色、贴图与衰减方式,是 Points 的默认材质。

最后验证 2026-11-03 · three.js 0.160.0 · 更新 2026-10-29 · 引用本文
new THREE.PointsMaterial(parameters)

构造参数

参数默认说明
color0xffffff基础颜色
size1点的尺寸,单位取决于 sizeAttenuation
sizeAttenuationtruetrue 时近大远小,false 时固定屏幕像素
mapnull点的贴图,圆点、光斑都靠它
alphaMapnull透明通道贴图
vertexColorsfalse开启后读取几何体的 color 属性
alphaTest0低于该透明度的像素直接丢弃,可消除排序问题
transparentfalse是否按透明对象排序渲染
opacity1整体透明度
fogtrue是否受场景雾影响
blendingNormalBlending混合模式,发光点用 AdditiveBlending
depthWritetrue是否写入深度,密集点云常关掉

示例:圆形点云

// 用画布生成一个圆点贴图,避免额外请求图片
function makeDotTexture(size) {
  const canvas = document.createElement('canvas');
  canvas.width = canvas.height = size;

  const ctx = canvas.getContext('2d');
  const r = size / 2;
  const gradient = ctx.createRadialGradient(r, r, 0, r, r, r);
  gradient.addColorStop(0, 'rgba(255,255,255,1)');
  gradient.addColorStop(0.6, 'rgba(255,255,255,0.9)');
  gradient.addColorStop(1, 'rgba(255,255,255,0)');

  ctx.fillStyle = gradient;
  ctx.fillRect(0, 0, size, size);

  const texture = new THREE.CanvasTexture(canvas);
  texture.colorSpace = THREE.SRGBColorSpace;
  return texture;
}

const material = new THREE.PointsMaterial({
  size: 6,
  sizeAttenuation: false,
  map: makeDotTexture(64),
  vertexColors: true,
  transparent: true,
  depthWrite: false,
  alphaTest: 0.02
});

const cloud = new THREE.Points(geometry, material);

size 单位

sizeAttenuation: true 时,size 是世界单位, 远处的点在屏幕上变小,同一份数据在不同相机距离下观感差别很大。 false 时按屏幕像素计算,缩放到任何视角点都一样大, 工程点云与符号化散点通常用这一种。

透明与深度

点云开启透明后,前后重叠的点需要正确排序。关掉 depthWrite 能避免互相遮挡,但半透明叠加会让密集区域偏亮。 改用 alphaTest 剔除边缘像素,可以让圆点保持深度关系, 视觉上更接近实体点。

加色混合会累积亮度。AdditiveBlending 下几十个点重叠时, 局部会直接变成纯白,丢失密度层次。需要表达密度时改用普通混合, 或用颜色强度编码密度。

引用本文

经纬志(2026)。《PointsMaterial》。https://www.jingweizhi.com/three/api/points-material.html(访问日期 2026-11-03)。