4.3 Phong材质
优质
小牛编辑
137浏览
2023-12-01
Phong材质(MeshPhongMaterial)是符合Phong光照模型的材质。和Lambert不同的是,Phong模型考虑了镜面反射的效果,因此对于金属、镜面的表现尤为适合。
漫反射部分和Lambert光照模型是相同的,镜面反射部分的模型为:
Ispecular = Ks * Is * (cos(alpha)) ^ n
其中,Ispecular
是镜面反射的光强,Ks
是材质表面镜面反射系数,Is
是光源强度,alpha
是反射光与视线的夹角,n
是高光指数,越大则高光光斑越小。
由于漫反射部分与Lambert模型是一致的,因此,如果不指定镜面反射系数,而只设定漫反射,其效果与Lambert是相同的:
new THREE.MeshPhongMaterial({
color: 0xffff00
});
同样地,可以指定emissive
和ambient
值,这里不再说明。下面就specular
值指定镜面反射系数作说明。首先,我们只使用镜面反射,将高光设为红色,应用于一个球体:
var material = new THREE.MeshPhongMaterial({
specular: 0xff0000
});
var sphere = new THREE.Mesh(new THREE.SphereGeometry(3, 20, 8), material);
效果为:
可以通过shininess
属性控制光照模型中的n
值,当shininess
值越大时,高光的光斑越小,默认值为30
。我们将其设置为1000
时:
new THREE.MeshPhongMaterial({
specular: 0xff0000,
shininess: 1000
});
效果为:
使用黄色的镜面光,红色的散射光:
material = new THREE.MeshPhongMaterial({
color: 0xff0000,
specular: 0xffff00,
shininess: 100
});
看起来是不是像个桌球了呢?