添加光影效果主要用到的代碼如下:
//使渲染器支持陰影貼圖 THREE.Render.shadowMapEnabled= true; //設置燈光陰影屬性 //設置燈光生成陰影 THREE.Light.castShadow= true; //如果是調試狀態,還可以把燈光的調試幫助框顯示出來 THREE.Light.shadowCameraVisible= true; //設置陰影貼圖質量 THREE.Light.shadowMapWidth = THREE.Light.shadowMapHeight = 1024*4; //設置模型屬性 //設置物體生成陰影 THREE.Mesh.castShadow = true; //設置物體接收陰影,即其它物體的陰影可以顯示在該物體上 THREE.Mesh.receiveShadow= true;
完整的測試代碼如下:
<!DOCTYPE html> <html> <head> <title></title> </head> <body> <script src="ThreeJS/build/three.js"></script> <script src="ThreeJS/examples/js/controls/OrbitControls.js"></script> <script src="ThreeJS/examples/js/loaders/OBJMTLLoader.js"></script> <script src="ThreeJS/examples/js/loaders/MTLLoader.js"></script> <script> var _scene,_camera,_control,_render,_ambient,_spotLight; Init(); Animate(); function Init() { _scene = new THREE.Scene(); _camera = new THREE.PerspectiveCamera(45,window.innerWidth/window.innerHeight,0.1,2000); _camera.position.z = 50; _render = new THREE.WebGLRenderer(); //設置渲染器大小 _render.setSize(window.innerWidth,window.innerHeight); //設置渲染器陰影可用 _render.shadowMapEnabled = true; document.body.appendChild(_render.domElement); //場景控制器,用以控制場景中的攝相機,方便觀察場景 _control = new THREE.OrbitControls(_camera,_render.domElement); //添加環境光 _ambient = new THREE.AmbientLight(0xffffff); _scene.add(_ambient); //燈光屬性 _spotLight = new THREE.SpotLight(0xffffff); _spotLight.castShadow = true; _spotLight.shadowCameraVisible = true; _spotLight.position.set(100,100,100); //設置陰影貼圖精度 _spotLight.shadowMapWidth = _spotLight.shadowMapHeight = 1024*4; _scene.add(_spotLight); //加載模型 LoadModel(); } function Animate() { requestAnimationFrame(Animate); Render(); } function Render() { //更新攝相機角度 _control.update(); _render.render(_scene,_camera); } function LoadModel() { //調用OBJMTLLoader加載模型 var loader = new THREE.OBJMTLLoader(); loader.load('Model/tc_tm/tc.obj','Model/tc_tm/tc.mtl', function(obj) { //traverse:回調,該模型以及所有子模型均執行該函數 //相當於遍歷obj的children數組 obj.traverse(function(child) { if (child instanceof THREE.Mesh) { //設置模型生成陰影並接收陰影 child.castShadow = true; child.receiveShadow = true; } }); _scene.add(obj); }); } </script> </body> </html>
效果如下圖所示:
遠觀:
近看: