Three.js常用材质介绍
本文是Three.js电子书的3.1节
为了方便开发Threejs提供了一系列的材质,所有材质就是对WebGL着色器代码的封装,如果你不了解WebGL,会通过查阅Threejs文档使用相关材质类即可。
点材质PointsMaterial
点材质比较简单,只有PointsMaterial
,通常使用点模型的时候会使用点材质PointsMaterial
。
点材质PointsMaterial
的.size
属性可以每个顶点渲染的方形区域尺寸像素大小。
var geometry = new THREE.SphereGeometry(100, 25, 25); //创建一个球体几何对象
// 创建一个点材质对象
var material = new THREE.PointsMaterial({
color: 0x0000ff, //颜色
size: 3, //点渲染尺寸
});
//点模型对象 参数:几何体 点材质
var point = new THREE.Points(geometry, material);
scene.add(point); //网格模型添加到场景中
线材质
线材质有基础线材质LineBasicMaterial
和虚线材质LineDashedMaterial
两个,通常使用使用Line
等线模型才会用到线材质。
基础线材质LineBasicMaterial
。
var geometry = new THREE.SphereGeometry(100, 25, 25);//球体
// 直线基础材质对象
var material = new THREE.LineBasicMaterial({
color: 0x0000ff
});
var line = new THREE.Line(geometry, material); //线模型对象
scene.add(line); //点模型添加到场景中
虚线材质LineDashedMaterial
。
// 虚线材质对象:产生虚线效果
var material = new THREE.LineDashedMaterial({
color: 0x0000ff,
dashSize: 10,//显示线段的大小。默认为3。
gapSize: 5,//间隙的大小。默认为1
});
var line = new THREE.Line(geometry, material); //线模型对象
// computeLineDistances方法 计算LineDashedMaterial所需的距离数组
line.computeLineDistances();
网格模型
Threejs提供的网格类材质比较多,网格材质涉及的材质种类和材质属性也比较多,一节课也无法讲解完,本节课先有一个感性的认知。
网格材质顾名思义,网格类模型才会使用的材质对象。
基础网格材质对象MeshBasicMaterial
,不受带有方向光源影响,没有棱角感。
var material = new THREE.MeshBasicMaterial({
color: 0x0000ff,
})
MeshLambertMaterial
材质可以实现网格Mesh表面与光源的漫反射光照计算,有了光照计算,物体表面分界的位置才会产生棱角感。
var material = new THREE.MeshLambertMaterial({
color: 0x00ff00,
});
高光网格材质MeshPhongMaterial
除了和MeshLambertMaterial
一样可以实现光源和网格表面的漫反射光照计算,还可以产生高光效果(镜面反射)。
var material = new THREE.MeshPhongMaterial({
color: 0xff0000,
specular:0x444444,//高光部分的颜色
shininess:20,//高光部分的亮度,默认30
});
材质和模型对象对应关系
使用材质的时候,要注意材质和模型的对应关系,通过前面课程案例学习,目前为止你至少应该了解到了网格模型Mesh
、点模型Points
、线模型Line
,随着课程的学习其它的模型对象也会接触到,这里先有个印象就可以。