為THREEJS場景添加光影效果


添加光影效果主要用到的代碼如下:

//使渲染器支持陰影貼圖

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>

效果如下圖所示:

遠觀:

近看:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM