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);

派生光源

Three.JS学习 6:光源_点光源

环境光

构造函数

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.JS学习 6:光源_点光源_02

聚光灯

效果
Three.JS学习 6:光源_点光源_03
光线从一个锥体中射出,在被照射的物体上产生聚光的效果。
构造函数

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>

效果
Three.JS学习 6:光源_点光源_04