简单材质

  • MeshBasicMaterial 网格基础材质
  • MeshDepthMaterial 网格深度材质
  • MeshNormalMaterial 网格法向材质
  • MeshFaceMaterial 网格面材质

非简单材质

  • MeshLamberMaterial 网格朗伯材质
  • MeshPhongMaterial 网格phong式材质
  • ShaderMaterial 着色器材质
  • LineBasicMaterial 直线基础材质
  • LineDashedMaterial 虚线材质

材质共有属性

  • 基础属性
  • 融合属性
  • 高级属性

MeshBasicMaterial

MeshBasicMaterial是一种非常简单的材质,这种材质不考虑光的影响。使用这种材质的网格会被渲染成一些简单的平面多边形,而且可以展示几何体线框。

MeshDepthMaterial

使用这种材质的物体,其外观不是由光照或某个材质属性决定的;而是由物体到相机的距离决定的。这种材质可以与其他材质结合,从而很容易的创建出逐渐消失的效果。

联合材质

MeshDepchMaterial控制渐变
MeshBasicMaterial控制颜色

MeshNormalMaterial

计算法向颜色,用来设置球体的渐变色。

MeshFaceMaterial

材质容器,通过MeshFaceMaterial可以为几何体的每个面指定不同的材质。MeshFaceMaterial中可以放MeshBasicMaterial来指定颜色。

MeshLamberMaterial

用于暗淡、不光亮表面,会对场景中的光源产生反应。

MeshPhongMaterial

可以创建一种光亮的材质。

ShaderMaterial 创建自己的着色器

ShaderMaterial是Three.js库中功能最丰富、最复杂的一种材质。通过它,可以使用自己定制的着色器,直接在WebGL中运行。
要使用这个材质,必须传入两个不同的着色器:vertexShader,fragmentShader.

LineBasicMaterial、LineDashedMaterial两种材质只能应用于特定的几何体:THREE.Line(线段)。

LineBasicMaterial,通过线段的基础材质可以设置线段的颜色、宽度、端点和连接点属性。
LineDashedMaterial,跟LineBasicMaterial的属性一样,但是通过指定短划线和空格的长度,可以创建虚线的效果。

总结

  • 各种材质有很多共同的属性
  • 并不是所有材质都会对场景中的光源做出反应。如果你希望一种材质计算光照的影响,应该使用MeshPhongMaterial或者MeshLamberMaterial.
  • 如果要创建一种透明材质,需要设置opacity,transparent=true
  • 材质大部分属性可以运行时修改,但是有些属性(side)不可以运行时修改。如果要修改,需要设置needsUpdate为true。
  • 可以为一个几何体赋予多种材质,但是这样会复制几何体,从而创建出多个网格。
  • THREE.Line几何体不可以使用普通材质覆盖。只能用LineBasicMaterial、LineDashedMaterial。
  • 光亮物体可以用MeshPhongMaterial。暗淡物体可以用MeshLamberMaterial。
  • 使用dat.GUI来试验各种属性。