想要让模型呈现不同的颜色,我们就需要使用标准材质StandarMaterial

创建材质

babylonjs中引入并创建StandarMaterial类,指定namescene,再将实例赋值给boxmaterial属性,即可快速的创建一个标准材质:

  1. import {
  2. ArcRotateCamera,
  3. Color3,
  4. Engine,
  5. MeshBuilder,
  6. Scene,
  7. Vector3,
  8. Color4,
  9. DirectionalLight,
  10. StandardMaterial
  11. } from 'babylonjs';
  12. /** 省略部分代码 */
  13. const createScene = (engine: Engine) => {
  14. /** 创建场景 */
  15. const scene = new Scene(engine);
  16. scene.clearColor = Color4.FromColor3(Color3.Gray());
  17. /** end */
  18. /** 创建相机 */
  19. const camera = new ArcRotateCamera('camera', 0, 0, 10, Vector3.Zero(), scene);
  20. camera.attachControl(true);
  21. /** end */
  22. /** 创建立方体 */
  23. const box = MeshBuilder.CreateBox('box', { width: 2, height: 3, depth: 4 }, scene);
  24. /** end */
  25. /** 创建灯光 */
  26. const light = new DirectionalLight('light', Vector3.Down(), scene);
  27. light.diffuse = Color3.Red();
  28. light.specular = Color3.Green();
  29. /** end */
  30. /** 创建标准材质 */
  31. const material = new StandardMaterial('boxMaterial', scene);
  32. box.material = material;
  33. /** end */
  34. return scene;
  35. };

现在,box已经准备好显示不同的颜色了,我们需要更改material的一些属性。

指定颜色

正如上一节灯光所述,在3D世界中,一个模型最终呈现的颜色由多个因素影响,并且,材质对不同的光色设置的属性也不同。在官方文档中,标准材质有以下四个光色属性:

  1. diffuseColor:漫反射色,即在光照条件下材质呈现的颜色
  2. specularColor:高光色,即光源在材质上呈现的颜色(类似在镜子中看灯泡)
  3. emissiveColor:自发光色,即没有任何灯光时材质呈现的颜色,也可以理解为材质的固有颜色
  4. ambientColor:环境光色,即在环境光下材质呈现的颜色(需要先给scene指定ambientColor属性)

下面我们依次演示下这几种颜色究竟有什么不一样。

漫反射色

我们给material.diffuseColor指定一个颜色: