Three.js(九)——Materials材质 (一)

603 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第10天,点击查看活动详情 >>

基础网格材质(MeshBasicMaterial)

一个以简单着色(平面或线框)方式来绘制几何体的材质。
这种材质不受光照的影响。

纹理

// 写法1:
const material = new THREE.MeshBasicMaterial({
    map: doorColorTexture
});
// 写法2:
const material = new THREE.MeshBasicMaterial();
material.map = doorColorTexture;

颜色

// 写法1:
const material = new THREE.MeshBasicMaterial({ color: "pink" });
// 写法2:
const material = new THREE.MeshBasicMaterial();
material.color.set("pink");
// 写法3:
const material = new THREE.MeshBasicMaterial();
material.color = new THREE.Color("green");

法线网格材质(MeshNormalMaterial)

wireframe 线框

线框:布尔型,将几何体渲染为线框,默认值为false(即渲染为平滑着色)。线框线宽:浮动,控制线框厚度。默认值为1。
由于大多数平台上带有WebGL渲染器的OpenGL核心配置文件的限制,无论设置值如何,线宽都将始终为1。

const material = new THREE.MeshNormalMaterial();
// 线框显示
material.wireframe = true;

flatShading 平面阴影

平面阴影:布尔型 定义是否使用平面着色渲染材质。默认值为false

const material = new THREE.MeshNormalMaterial();
// 平面阴影显示
material.flatShading = true;

无光泽材料(MeshMatcapMaterial)

MeshMatcapMaterial 由一个材质捕捉(MatCap,或光照球(Lit Sphere))纹理所定义,其编码了材质的颜色与明暗。
由于mapcap图像文件编码了烘焙过的光照,因此MeshMatcapMaterial 不对灯光作出反应。 它将会投射阴影到一个接受阴影的物体上(and shadow clipping works),但不会产生自身阴影或是接受阴影。

matcap 纹理

const material = new THREE.MeshMatcapMaterial();
const matcapTexture = textureLoader.load("./img/matcaps/8.png");
material.matcap = matcapTexture;

网格深度材料(MeshDepthMaterial)

一种按深度绘制几何体的材质。深度基于相机远近平面。白色最近,黑色最远。

const material = new THREE.MeshDepthMaterial();

Lambert网格材质(MeshLambertMaterial)

一种非光泽表面的材质,没有镜面高光。
该材质使用基于非物理的Lambertian模型来计算反射率。 这可以很好地模拟一些表面(例如未经处理的木材或石材),但不能模拟具有镜面高光的光泽表面(例如涂漆木材)。

需要灯光辅助才能看到形状

const material = new THREE.MeshLambertMaterial();
// 环境光
const ambientLight = new THREE.AmbientLight(0xffffff, 0.5);
scene.add(ambientLight);
// 点光源
const pointLight = new THREE.PointLight(0xffffff, 0.5);
pointLight.position.x = 2;
pointLight.position.y = 3;
pointLight.position.z = 4;
scene.add(pointLight);

未完待续……