three.js(5)-光源

作者: 姜治宇 | 来源:发表于2021-11-16 10:56 被阅读0次

    我们前面提到了材质与光源的关系,漫反射离不开光源。光源分如下几种:

    点光源-PointLight

    顾名思义,就是一个点射出来的光线。
    点光源的特征是:凡是光照不到的地方都是黑暗的。因此,我们还需要设定点光源的位置。

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <script src="http://www.yanhuangxueyuan.com/versions/threejsR92/build/three.js"></script>
      <title>Document</title>
    </head>
    
    <body>
      <div id="webgl"></div>
    </body>
    
    </html>
    <script>
      var scene = new THREE.Scene();
      console.log(scene);
      //几何体
      var geometry = new THREE.BoxGeometry(100, 100, 100); //创建一个立方体几何对象Geometry
      //材质
      var material = new THREE.MeshLambertMaterial({
        color: 0xffff00
      });
      //合成对象
      var mesh = new THREE.Mesh(geometry, material); //网格模型对象Mesh
      scene.add(mesh); //网格模型添加到场景中
    
      var point = new THREE.PointLight(0xffffff);
      point.position.set(0, 0, 300); //点光源位置
    
      scene.add(point); //点光源添加到场景中
    
      //创建相机对象
      var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000);
      camera.position.set(100, 100, 200); //设置相机位置
      camera.lookAt(scene.position); //设置相机方向(指向的场景对象)
    
      /**
       * 创建渲染器函数
       */
      var renderer = new THREE.WebGLRenderer();//画布
      renderer.setClearColor(0xb9d3ff, 1); //设置背景颜色
      //将渲染好的canvas追加到dom
      var cont = document.getElementById('webgl');
      cont.appendChild(renderer.domElement);
      render();
      function render() {
        renderer.render(scene, camera);//渲染必须有场景和相机两个对象
        mesh.rotateX(0.01);
    
        requestAnimationFrame(render);//递归调用
      }
    
    </script>
    
    777.gif

    环境光-AmbientLight

    环境光跟点光源相对,物体的各个面都可以照到。既然四面八方都可以照到,那也没必要设定其位置了。

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="http://www.yanhuangxueyuan.com/versions/threejsR92/build/three.js"></script>
        <title>Document</title>
    </head>
    
    <body>
        <div id="webgl"></div>
    </body>
    
    </html>
    <script>
        var scene = new THREE.Scene();
        console.log(scene);
        //几何体
        var geometry = new THREE.BoxGeometry(100, 100, 100); //创建一个立方体几何对象Geometry
        //材质
        var material = new THREE.MeshLambertMaterial({
            color: 0xffff00
        });
        //合成对象
        var mesh = new THREE.Mesh(geometry, material); //网格模型对象Mesh
        scene.add(mesh); //网格模型添加到场景中
    
        var ambient = new THREE.AmbientLight(0xffffff);//环境光
    
        scene.add(ambient); //环境光添加到场景中
    
        //创建相机对象
        var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000);
        camera.position.set(100, 100, 200); //设置相机位置
        camera.lookAt(scene.position); //设置相机方向(指向的场景对象)
    
        /**
         * 创建渲染器函数
         */
        var renderer = new THREE.WebGLRenderer();//画布
        renderer.setSize(1000, 500);//设置渲染区域尺寸
        renderer.setClearColor(0xb9d3ff, 1); //设置背景颜色
        //将渲染好的canvas追加到dom
        var cont = document.getElementById('webgl');
        cont.appendChild(renderer.domElement);
        render();
        function render() {
            renderer.render(scene, camera);//渲染必须有场景和相机两个对象
            mesh.rotateX(0.01);
    
            requestAnimationFrame(render);//递归调用
        }
    
    </script>
    
    88.gif

    还有两种不太常用的光源,分别是平行光(DirectionalLight)和聚光源(SpotLight),这里就不赘述了,有兴趣的同学可以查文档。

    相关文章

      网友评论

        本文标题:three.js(5)-光源

        本文链接:https://www.haomeiwen.com/subject/nwqhtrtx.html