想要让模型呈现不同的颜色,我们就需要使用标准材质StandarMaterial。
创建材质
从babylonjs中引入并创建StandarMaterial类,指定name和scene,再将实例赋值给box的material属性,即可快速的创建一个标准材质:
import {ArcRotateCamera,Color3,Engine,MeshBuilder,Scene,Vector3,Color4,DirectionalLight,StandardMaterial} from 'babylonjs';/** 省略部分代码 */const createScene = (engine: Engine) => {/** 创建场景 */const scene = new Scene(engine);scene.clearColor = Color4.FromColor3(Color3.Gray());/** end *//** 创建相机 */const camera = new ArcRotateCamera('camera', 0, 0, 10, Vector3.Zero(), scene);camera.attachControl(true);/** end *//** 创建立方体 */const box = MeshBuilder.CreateBox('box', { width: 2, height: 3, depth: 4 }, scene);/** end *//** 创建灯光 */const light = new DirectionalLight('light', Vector3.Down(), scene);light.diffuse = Color3.Red();light.specular = Color3.Green();/** end *//** 创建标准材质 */const material = new StandardMaterial('boxMaterial', scene);box.material = material;/** end */return scene;};
现在,box已经准备好显示不同的颜色了,我们需要更改material的一些属性。
指定颜色
正如上一节灯光所述,在3D世界中,一个模型最终呈现的颜色由多个因素影响,并且,材质对不同的光色设置的属性也不同。在官方文档中,标准材质有以下四个光色属性:
diffuseColor:漫反射色,即在光照条件下材质呈现的颜色specularColor:高光色,即光源在材质上呈现的颜色(类似在镜子中看灯泡)emissiveColor:自发光色,即没有任何灯光时材质呈现的颜色,也可以理解为材质的固有颜色ambientColor:环境光色,即在环境光下材质呈现的颜色(需要先给scene指定ambientColor属性)
漫反射色
我们给material.diffuseColor指定一个颜色:
