前言
第一次接触3d开发的童鞋我本人,可能会对其中的一些名词要素一头雾水,下面一起学习总结一下这些要素及其作用。
收获清单
- 坐标系与位置
- 材质material
- 相机Cameras
- 灯光Lights
知识要点
坐标系与位置
3d开发中主要涉及两种坐标系,如下图,babylon采用的是左手坐标系:
x轴朝右
y轴朝上
z轴朝里
这里的z轴可以理解为远小近大,如我们动态改变z轴的值可以得到以下效果:
知道了坐标系下一步就可以了解物体的位置【
position 】、旋转【rotation】以及缩放比例【scaling】,它们的基本单位是三维向量,即BABYLON.Vector3(x,y,z)
基本用法如下,其中旋转是以角度为单位的。
//常规设置
pilot.position = new BABYLON.Vector3(2, 3, 4);
//或者,独立设置
pilot.position.x = 2;
pilot.position.y = 3;
pilot.position.z = 4;
材质material
作用:美化物体,可以是颜色或纹理
创建颜色:
var rgb = new BABYLON.Color3(0.5, 0.5, 0.5);//颜色
var rgba = new BABYLON.Color3(0.5, 0.5, 0.5, 1);//透明度颜色
颜色分类:
- 漫反射颜色:diffuseColor
- 镜面颜色:specularColor
- 自发光颜色:emissiveColor
- 环境颜色:ambientColor
纹理贴图Texture分类: - 漫反射纹理:diffuseTexture
- 镜面反射纹理:specularTexture
- 自发光纹理:emissiveTexture
- 环境纹理【需搭配环境光使用】:ambientTexture
创建材质通用公式
//第一个参数是材质名称,第二个是场景实例
var myMaterial = new BABYLON.StandardMaterial("myMaterial", scene);
// 添加颜色或纹理
myMaterial.diffuseColor = new BABYLON.Color3(1, 0, 1);//漫反射颜色
//PATH TO IMAGE,表示图片的路径,其实也可以使用base64格式的图片。
myMaterial.diffuseTexture = new BABYLON.Texture("PATH TO IMAGE", scene);
// 给物体设置材质
mesh.material = myMaterial
不同材质效果
不同纹理效果
相机Cameras
相机可以理解为我们的视线,创建了一个物体后,我们想要看到它就需要相机,观察视角的不同就有不同的相机类型,babylon提供了很多种相机,我们日常开发常用的是通用相机UniversalCamera,也可以根据开发需求的不同选择不同的相机类型
构建通用相机代码
// 参数顺序 : name相机名称, position相机放置的位置, scene场景实例
var camera = new BABYLON.UniversalCamera("UniversalCamera", new BABYLON.Vector3(0, 0, -10), scene);
//相机观察的目标,在这里表示:相机放在(0,0,-10),镜头对准观察 (0,0,0)
camera.setTarget(BABYLON.Vector3.Zero());
// 让相机响应用户操作
camera.attachControl(canvas, true);
灯光Lights
灯光应该是最好理解的,想要改变物体的明暗跟颜色就要学会打灯了!
创建灯光
点光Point Light
var light = new BABYLON.PointLight("pointLight", new BABYLON.Vector3(1, 10, 1), scene);
平行光Directional Light
//第二个参数表示平行光的方向
var light = new BABYLON.DirectionalLight("DirectionalLight", new BABYLON.Vector3(0, -1, 0), scene);
聚光灯Spot Light
//第2个参数是位置、第3个参数是方向,第4个参数角度angle,第5个参数指数exponent
var light = new BABYLON.SpotLight("spotLight", new BABYLON.Vector3(0, 30, -10), new BABYLON.Vector3(0, -1, 0), Math.PI / 3, 2, scene);
半球光Hemispheric Light
//第2个参数是方向
var light = new BABYLON.HemisphericLight("HemiLight", new BABYLON.Vector3(0, 1, 0), scene);
总结
今天回顾学习了babylonjs开发中的常见名称要素,更详细的介绍可以看官网教程