Three.js入门-基本组件介绍

139 阅读3分钟

首先介绍threejs的基本构成

基本组件:场景,摄像机,渲染器

场景: new THREE.Scene()

摄像机: new THREE.PerspectiveCamera()

渲染器: new THREE.WebGLRendere()

如何理解上述基本组件呢?举个例子:

桌子上的一个苹果。苹果和桌子所在的空间可以理解成一个场景,人的眼睛就是摄像机,眼睛接收到信息再回执给大脑就是一个渲染器。

1.创建场景

let scene = new THREE.Scene()

2.创建摄像机

let camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000);

摄像机这里介绍两种基本的:正投影相机OrthographicCamera和透视投影相机PerspectiveCamera。

透视投影照相机对应投影到的物体的大小是随着距离逐渐变小的,而正投影照相机投影到的物体大小是不受距离影响的。

    基本参数,分别是fov,aspect,near,far 。

    fov表示摄像机视锥体垂直视野角度,最小值为0,最大值为180,默认值为50,实际项目中一般都定义45,因为45最接近人正常睁眼角度;

    aspect表示摄像机视锥体长宽比,默认长宽比为1,即表示看到的是正方形,实际项目中使用的是屏幕的宽高比;

    near表示摄像机视锥体近端面,这个值默认为0.1,实际项目中都会设置为1;

    far表示摄像机视锥体远端面,默认为2000,这个值可以是无限的,说的简单点就是我们视觉所能看到的最远距离。

3.设置相机位置

camera.position.set(20, 20, 20);

camera.lookAt(scene.position);

为了确保渲染物体能被摄像机拍到,需要使用lookat方法将其指向场景中心(默认是0,0,0)

4.创建渲染器

    let renderer = new THREE.WebGLRenderer();

    设置渲染器颜色和面积

    renderer.setClearColor(new THREE.Color(0x000000));

    renderer.setSize(window.innerWidth, window.innerHeight);

上述步骤基本搭建完成,接下来我们就要往空间里添加物体了

为了辅助物体的创建,我们先要创建一个三维坐标系(这个三维坐标系的原点就是空间的中心位置,接下来的物体创建的位置都将以此为原点)

let axes = new THREE.AxesHelper(10)

    将三维坐标系添加到场景中

    scene.add(axes)

我们先创建一个简单的几何体

第一步创建一个模型

let planeGeometry = new THREE.PlaneGeometry(30, 30)

第二部给模型贴上材质

let planeMaterial = new THREE.MeshBasicMaterial({

        color: 0x845EC2

    })

第三步组合、设置位置,添加到场景中

组合当前几何体  Points Line Mesh

    let plane = new THREE.Mesh(planeGeometry, planeMaterial);

    设置该几何体位置

    plane.rotation.x = -0.5 * Math.PI;

    plane.position.set(0, 0, 0);

    将几何体添加到场景

    scene.add(plane)

最后将渲染器挂载到dom

    document.getElementById("webgl-output").appendChild(renderer.domElement);

    渲染器渲染加载场景及摄像机

    renderer.render(scene, camera)

另外介绍一下光源及阴影相关概念

上述创建物体时候写到了创建材质,材质是有很多种的,普通材质、法向量材质等等。在我们生活中,不同的材质遇到光照产生的效果也是不同,因此threejs中的光源概念就产生了。 在代码里如果未加光源,那么创建的物体都是看不见的,漆黑如夜。 光源有很多种,比如环境光(太阳光的效果)、点光源(手电筒)、还有可以产生阴影的光源。 接下来说说阴影,阴影的前提下是需要一个可以产生阴影效果的光源,所以阴影是需要设置接受投影的物体,需要一个开关开控制(其他场景的物体要开启投射或者接受阴影)。

    spotLight.castShadow = true;

    //设置用多少像素生成阴影(值越大,越细腻)

    spotLight.shadow.mapSize = new THREE.Vector2(7000, 7000);

    //投影远点(设置到距离光源的哪个位置生成阴影)

    spotLight.shadow.camera.far = 130;

    //投影近点(设置从距离光源的哪个位置生成阴影)

上述就是threejs基本组件及相关定义的简单介绍,如有兴趣深入研究,一代宗师指日可待。