Three.js教程:光源对物体表面影响
推荐:将NSDT场景编辑器加入你的3D工具链
其他系列工具:NSDT简石数字孪生
光源对物体表面影响
实际生活中物体表面的明暗效果是会受到光照的影响,threejs中同样也要模拟光照Light
对网格模型Mesh
表面的影响。
你可以打开课件中案例源码,对比有光照和无光照两种情况,网格模型Mesh
表面的差异。
受光照影响材质
threejs提供的网格材质,有的受光照影响,有的不受光照影响。
![](https://www.mvrlink.com/content/images/2023/04/image-15.png)
基础网格材质MeshBasicMaterial (opens new window)不会受到光照影响。
//MeshBasicMaterial不受光照影响
const material = new THREE.MeshBasicMaterial();
漫反射网格材质MeshLambertMaterial (opens new window)会受到光照影响,该材质也可以称为Lambert网格材质,音译为兰伯特网格材质。
一个立方体长方体使用MeshLambertMaterial材质,不同面和光线夹角不同,立方体不同面就会呈现出来不同的明暗效果。
//MeshLambertMaterial受光照影响
const material = new THREE.MeshLambertMaterial();
光源简介
Three.js提供了多种模拟生活中光源的API,文档搜索关键词light就可以看到。
![](https://www.mvrlink.com/content/images/2023/04/image-16.png)
点光源
![](https://www.mvrlink.com/content/images/2023/04/image-17.png)
点光源PointLight (opens new window)可以类比为一个发光点,就像生活中一个灯泡以灯泡为中心向四周发射光线。
//点光源:两个参数分别表示光源颜色和光照强度
// 参数1:0xffffff是纯白光,表示光源颜色
// 参数2:1.0,表示光照强度,可以根据需要调整
const pointLight = new THREE.PointLight(0xffffff, 1.0);
光源位置
你把点光源想象为一个电灯泡,你在3D空间中,放的位置不同,模型的渲染效果就不一样。
注意光源位置尺寸大小:如果你希望光源照在模型的外表面,那你就需要把光源放在模型的外面。
//点光源位置
pointLight.position.set(400, 0, 0);//点光源放在x轴上
改变光源位置,观察网格模型表面的明暗变化。
directionalLight.position.set(100, 60, 50);
光源添加到场景
光源和网格模型Mesh对应一样是三维场景的一部分,自然需要添加到三维场景中才能起作用。
scene.add(directionalLight); //点光源添加到场景中