第3章我们简单地讨论了材质。你了解到材质与THREE.Geometry实例一起形成THREE.Mesh对象。材质类似于一个对象的“皮肤”,定义了几何体的外观。例如,“皮肤”定义了几何体是金属外观、透明还是显示为线框。将套上了“皮肤”之后的THREE.Mesh对象添加到场景中,Three.js才能进行渲染。
到目前为止,我们还没有详细地研究材质。在本章中,我们将深入探讨Three.js提供的所有材质,并学习如何使用这些材质创建漂亮的3D对象。本章中我们将探索以下材质:
❑ MeshBasicMaterial:这是一种基本材质,你可以使用它给几何体赋予简单的颜色或显示几何体的线框。该材质不受光源影响。
❑ MeshDepthMaterial:这是一种根据对象到相机的距离确定网格颜色的材质。
❑ MeshNormalMaterial:这是一种简单的材质,用于根据面的法线向量来计算颜色。
❑ MeshLambertMaterial:这是一种能够对场景中的光源做出反应的材质,用于创建暗淡无光泽效果的对象。
❑ MeshPhongMaterial:这是一种能够对场景中的光源做出反应的材质,可用于创建有光滑反光效果的对象。
❑ MeshStandardMaterial:这是一种使用基于物理的渲染来渲染对象的材质。基于物理的渲染使用正确的物理模型来确定光与对象表面的交互方式。从而使你能够创建更准确、更逼真的对象。
❑ MeshPhysicalMaterial:这是MeshStandardMaterial的一种扩展,提供了更多控制反射效果的属性。
❑ MeshToonMaterial:这是MeshPhongMaterial的一种扩展,能够模拟手绘效果。
❑ ShadowMaterial:这是一种特殊的材质,专门用于接收其他对象的阴影,实现阴影效果,但它是透明的。
❑ ShaderMaterial:该材质允许你指定着色器程序来直接控制顶点的位置和像素的颜色。
❑ LineBasicMaterial:这是一种可用于THREE.Line几何体的材质,可以用来创建有颜色的线条。
❑ LineDashMaterial:与LineBasicMaterial相似,但增加了创建虚线效果的功能。
在Three.js的源代码中,你还可以找到THREE.SpriteMaterial和THREE.Points-Material。它们用于为单个点设置样式。我们将不在本章讨论这些材质,我们会在第7章讨论它们。
所有材质都具有一些共同属性,因此在讲述第一个材质(THREE.MeshBasic-Material)之前,我们将先了解所有材质的共同属性。