Three.JS学习 6:光源

本文学习内容主要来自:
http://www.hewebgl.com/article/getarticle/60

Three.JS中不同各类的光源

名字描述
THREE.AmbientLight基本光源,该淘汰的颜色将会叠加到场景现有物体的颜色上
THREE.PointLight点光源,点光源不能用来创建阴影
THREE.SpotLight聚光效果,类似台灯、天花板上的吊灯或手电筒,可以投射阴影
THREE.DirectionalLight无限光/平行光,像太阳光
THREE.HemisphereLight特殊的光源,可以通过模拟反光面和光线微弱的天空来创建更加自然的室外光线。这个淘汰也不提供阴影功能
THREE.AreaLight可以指定散发光线的平面,而不是一个点。Three.AreaLight不投射任何阴影
THREE.LensFlare这不是一种光源,但是通过使用THREE.LensFlare,可以为场景中的光源添加镜头光晕效果

光源基类

THREE.Light(hex):参数是16进制颜色值,如:

var light=new THREE.Light(0xFF0000);

派生光源

这里写图片描述

环境光

构造函数

var light = new THREE.AmbientLight( 0xff0000 );
scene.add( light );

点光源

构造函数

PointLight( color, intensity, distance )

参数说明

  • color:光的颜色
  • intensity:光的强度,默认为1.0,表示100%强度的灯光
  • distance:光的距离,从光源所在位置,经过distance距离后,光的强度将从Intensity衰减为0.默认情况下,值为0.0,表示光源强度不衰减

示例

var light = new THREE.PointLight(0xFF0000);
light.position.set(0, 0,50);
scene.add(light);

效果
这里写图片描述

聚光灯

效果
这里写图片描述
光线从一个锥体中射出,在被照射的物体上产生聚光的效果。
构造函数

THREE.SpotLight( hex, intensity, distance, angle, exponent )

参数说明

  • Hex:聚光灯发出的颜色,如0xFFFFFF
  • Intensity:光源的强度,默认是1.0,如果为0.5,则强度是一半,意思是颜色会淡一些。和上面点光源一样
  • Distance:光线的强度,从最大值衰减到0,需要的距离。 默认为0,表示光不衰减,如果非0,则表示从光源的位置到Distance的距离,光都在线性衰减。到离光源距离Distance时,光源强度为0
  • Angle:聚光灯着色的角度,用弧度作为单位,这个角度是和光源的方向形成的角度
  • exponent:光源模型中,衰减的一个参数,越大衰减约快

平行光(方向光)

构造函数

THREE.DirectionalLight = function ( hex, intensity )

参数说明

  • Hex:颜色
  • Intensity:光线的强度,默认为1。值为8的时候,物体会显示黑色

示例

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Three框架</title>
        <script src="js/three.min.js"></script>
        <style type="text/css">
            div#canvas-frame {
                border: none;
                cursor: pointer;
                width: 100%;
                height: 600px;
                background-color: #EEEEEE;
            }

        </style>
        <script>
            var renderer,width,height;
            function initThree() {
                width = document.getElementById('canvas-frame').clientWidth;
                height = document.getElementById('canvas-frame').clientHeight;
                renderer = new THREE.WebGLRenderer({
                    antialias: true
                });
                renderer.setSize(width, height);
                document.getElementById('canvas-frame').appendChild(renderer.domElement);
                renderer.setClearColor(0xFFFFFF, 1.0);
            }

            var camera;
            function initCamera() {
                camera = new THREE.PerspectiveCamera(45, width / height, 1, 10000);
                camera.position.x = 600;
                camera.position.y = 0;
                camera.position.z = 600;
                camera.up.x = 0;
                camera.up.y = 1;
                camera.up.z = 0;
                camera.lookAt({
                    x: 0,
                    y: 0,
                    z: 0
                });
            }

            var scene;
            function initScene() {
                scene = new THREE.Scene();
            }

            var light;
            function initLight() {
                // A start
                // 第二个参数是光源强度,你可以改变它试一下
                light = new THREE.DirectionalLight(0xFF0000, 1);
                // 位置不同,方向光作用于物体的面也不同,看到的物体各个面的颜色也不一样
                light.position.set(0, 0, 1);
                scene.add(light);
                // A end
            }

            function initObject() {
                var geometry = new THREE.CubeGeometry(200, 100, 50, 4, 4);
                var material = new THREE.MeshLambertMaterial({ color: 0xFFFFFF });
                var mesh = new THREE.Mesh(geometry, material);
                mesh.position.set(0, 0, 0);
                scene.add(mesh);
            }

            function threeStart() {
                initThree();
                initCamera();
                initScene();
                initLight();
                initObject();
                renderer.clear();
                renderer.render(scene, camera);
            }

        </script>
    </head>

    <body onload="threeStart();">
        <div id="canvas-frame"></div>
    </body>
</html>

效果
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程圈子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值