使用 Three.js 材质
在第3章《在 Three.js 中使用光源》中,我们稍微讨论了材质。
您了解到,材质与 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.PointsMaterial。
这些是在为个别点设置样式时可以使用的材质。
我们不会在本章中讨论这些材质,但我们将在第7章《点和精灵》中进行探讨 。
材质具有一些共同的属性,因此在查看第一个材质 THREE.MeshBasicMaterial 之前,
我们将先看一下所有材质共享的属性。
理解通用材质属性
您可以快速查看所有材质共有的属性。Three.js 提供了一个名为 THREE.Material 的材质基类,列出了所有这些共有属性。我们将这些通用材质属性分为以下三个类别:
-
基本属性:这些是您经常使用的属性。使用这些属性,您可以控制对象的不透明度、是否可见以及如何引用它(通过ID或自定义名称)。
-
混合属性:每个对象都有一组混合属性。这些属性定义了材质每个点的颜色如何与其背后的颜色结合。
-
高级属性:几个高级属性控制低级别的 WebGL 上下文如何渲染对象。在大多数情况下,您不需要处理这些属性。
请注意,在本章中,我们将跳过与纹理和贴图相关的大多数属性。
大多数材质允许您使用图像作为纹理(例如木纹或石纹)。
在第10章《加载和使用纹理》中,我们将深入探讨各种可用的纹理和贴图选项。
一些材质还具有与动画相关的特定属性(例如骨骼动画、法线变形和目标变形),
我们也会跳过这些属性。这将在第9章《动画和相机移动》中讨论。
clipIntersection、
clippingPlanes 和
clipShadows 属性将在第6章《探索高级几何》中讨论。
我们将从列表中显示的第一组开始:基本属性。