【three.js第五課】光線的添加和感光材料

材料分類:

MeshBasicMaterial:基礎網孔材料,一個以簡單着色(平面或線框)方式來繪製幾何形狀的材料。
MeshLambertMaterial:蘭伯特網孔材料,一種非發光材料(蘭伯特)的表面
MeshPhongMaterial:網孔材料,用於表面有光澤的材料,計算每個像素。

光線分類
        注意:材料收到光線影響,即不同的材料對不同的光線表現出不同的特點,試着該表材料和光線,觀測結果
        1.    AmbientLight  環境光:這種光的顏色被應用到全局範圍內的所有對象。

        2.    PointLight 點光源 使用 MeshLambertMaterial 或 Phong網孔材料(MeshPhongMaterial) 來影響對象

        3.    平行光源(DirectionalLight).影響使用 蘭伯特網孔材料(MeshLambertMaterial) 或 Phong網孔材料(MeshPhongMaterial) 的對象。

        4.    聚光光源(SpotLight)一種能投射錐形陰影區域的點光源。 使用 MeshLambertMaterial 或 Phong網孔材料(MeshPhongMaterial) 來影響對象。

        5.    光(Light)光源的基類。

 

1.在【three.js第四課】的原本基礎上進行修改,將自定義的材料修改爲如下:


        //自定義材料
        //map:用於設置紋理貼圖,也可以用16進制的顏色替換:color:0xFFFFFF
        //side:用於設置顯示面。屬性可設置爲雙面DoubleSide,前面FontSide,後面BackSide
        //MeshBasicMaterial:基礎網孔材料,一個以簡單着色(平面或線框)方式來繪製幾何形狀的材料。
        //MeshLambertMaterial:蘭伯特網孔材料,一種非發光材料(蘭伯特)的表面
        //MeshPhongMaterial:網孔材料,用於表面有光澤的材料,計算每個像素。
        var cubeMaterial = [
            //右
            new THREE.MeshLambertMaterial({color:0xFFFFFF,side:THREE.DoubleSide}),
            //左
            new THREE.MeshBasicMaterial({map: new THREE.TextureLoader().load('images/2.png') ,side:THREE.DoubleSide}),
            //上
            new THREE.MeshPhongMaterial({map: new THREE.TextureLoader().load('images/3.png') ,side:THREE.DoubleSide}),
            //下
            new THREE.MeshLambertMaterial({map: new THREE.TextureLoader().load('images/4.png') ,side:THREE.DoubleSide}),
            //前
            new THREE.MeshBasicMaterial({map: new THREE.TextureLoader().load('images/5.png') ,side:THREE.DoubleSide}),
            //後
            new THREE.MeshPhongMaterial({map: new THREE.TextureLoader().load('images/6.png') ,side:THREE.DoubleSide})

        ];

2.在此處舉例上面所有的光線,更換時將保留一個,其他光線註釋即可,光線使用如下:


        //添加光線
        //注意:材料收到光線影響,即不同的材料對不同的光線表現出不同的特點,試着該表材料和光線,觀測結果
        //1.    AmbientLight  環境光:這種光的顏色被應用到全局範圍內的所有對象。
        //AmbientLight(光線的顏色,光線的強度)
        //var ambientLight = new THREE.AmbientLight(0xFFFFFF,3.0);
        //scene.add(ambientLight);//光線加入場景中

        //2.    PointLight 點光源 使用 MeshLambertMaterial 或 Phong網孔材料(MeshPhongMaterial) 來影響對象
        //var pointLight = new THREE.PointLight(0xFFFFFF,3.0);
        //scene.add(pointLight);//光線加入場景中

        //3.    平行光源(DirectionalLight).影響使用 蘭伯特網孔材料(MeshLambertMaterial) 或 Phong網孔材料(MeshPhongMaterial) 的對象。
        //var directionalLight = new THREE.DirectionalLight(0xFFFFFF,3.0);
        //scene.add(directionalLight);//光線加入場景中

        //4.    聚光光源(SpotLight)一種能投射錐形陰影區域的點光源。 使用 MeshLambertMaterial 或 Phong網孔材料(MeshPhongMaterial) 來影響對象。
        //var spotLight = new THREE.SpotLight(0xFFFFFF,3.0);
        //scene.add(spotLight);//光線加入場景中

        //5.    光(Light)光源的基類。
        var light = new THREE.Light(0xFFFFFF,3.0);
        scene.add(light);//光線加入場景中

4.修改不同的光線以及材料,觀察不同光線對材料的影響。

5.源碼:

<!DOCTYPE html>
<html>
<head>
    <title>demo1</title>
</head>
<style type="text/css">
   body{
        margin:0;
   }
   canvas{
        width:100%;
        height:100%;
   }
</style>
<body>
    <script src="jquery.min.js"></script>
    <script src="../build/three.js"></script>
    <script src="../examples/js/controls/OrbitControls.js"></script>
    <script type="text/javascript"> 
        var scene = new THREE.Scene();//創建場景
        //創建一個攝像機對象
        var camera = new THREE.PerspectiveCamera(75,window.innerWidth / window.innerHeight, 0.1, 1000);

         //創建渲染器
        var renderer = new THREE.WebGLRenderer();
        renderer.setSize(window.innerWidth, window.innerHeight);
       
        document.body.appendChild(renderer.domElement);//渲染到瀏覽器

        //加入事件監聽器,窗口自適應
        window.addEventListener('resize', function(){
            var width = window.innerWidth;
            var height = window.innerHeight;
            renderer.setSize(width,height);
            camera.aspect = width/height;
            camera.updateProjectionMatrix();
        })

        //軌道控制 鏡頭的移動
        var controls = new THREE.OrbitControls(camera,renderer.document);

        //創建形狀 BoxGeometry
        var geometry = new THREE.BoxGeometry(1,1,1);

       
        //自定義材料
        //map:用於設置紋理貼圖,也可以用16進制的顏色替換:color:0xFFFFFF
        //side:用於設置顯示面。屬性可設置爲雙面DoubleSide,前面FontSide,後面BackSide
        //MeshBasicMaterial:基礎網孔材料,一個以簡單着色(平面或線框)方式來繪製幾何形狀的材料。
        //MeshLambertMaterial:蘭伯特網孔材料,一種非發光材料(蘭伯特)的表面
        //MeshPhongMaterial:網孔材料,用於表面有光澤的材料,計算每個像素。
        var cubeMaterial = [
            //右
            new THREE.MeshLambertMaterial({color:0xFFFFFF,side:THREE.DoubleSide}),
            //左
            new THREE.MeshBasicMaterial({map: new THREE.TextureLoader().load('images/2.png') ,side:THREE.DoubleSide}),
            //上
            new THREE.MeshPhongMaterial({map: new THREE.TextureLoader().load('images/3.png') ,side:THREE.DoubleSide}),
            //下
            new THREE.MeshLambertMaterial({map: new THREE.TextureLoader().load('images/4.png') ,side:THREE.DoubleSide}),
            //前
            new THREE.MeshBasicMaterial({map: new THREE.TextureLoader().load('images/5.png') ,side:THREE.DoubleSide}),
            //後
            new THREE.MeshPhongMaterial({map: new THREE.TextureLoader().load('images/6.png') ,side:THREE.DoubleSide})

        ];

        //創建材料   wireframe是否使用線條
        //var material = new THREE.MeshBasicMaterial({color:0xFFFFFF,wireframe:true});
        var material = new THREE.MeshFaceMaterial(cubeMaterial);

        //將材料和形狀結合
        var cube = new THREE.Mesh(geometry,material);
        
        //物體加入場景中
        scene.add(cube);       


        //添加光線
        //注意:材料收到光線影響,即不同的材料對不同的光線表現出不同的特點,試着該表材料和光線,觀測結果
        //1.    AmbientLight  環境光:這種光的顏色被應用到全局範圍內的所有對象。
        //AmbientLight(光線的顏色,光線的強度)
        //var ambientLight = new THREE.AmbientLight(0xFFFFFF,3.0);
        //scene.add(ambientLight);//光線加入場景中

        //2.    PointLight 點光源 使用 MeshLambertMaterial 或 Phong網孔材料(MeshPhongMaterial) 來影響對象
        //var pointLight = new THREE.PointLight(0xFFFFFF,3.0);
        //scene.add(pointLight);//光線加入場景中

        //3.    平行光源(DirectionalLight).影響使用 蘭伯特網孔材料(MeshLambertMaterial) 或 Phong網孔材料(MeshPhongMaterial) 的對象。
        //var directionalLight = new THREE.DirectionalLight(0xFFFFFF,3.0);
        //scene.add(directionalLight);//光線加入場景中

        //4.    聚光光源(SpotLight)一種能投射錐形陰影區域的點光源。 使用 MeshLambertMaterial 或 Phong網孔材料(MeshPhongMaterial) 來影響對象。
        //var spotLight = new THREE.SpotLight(0xFFFFFF,3.0);
        //scene.add(spotLight);//光線加入場景中

        //5.    光(Light)光源的基類。
        var light = new THREE.Light(0xFFFFFF,3.0);
        scene.add(light);//光線加入場景中


        camera.position.z=3;//設置相機的位置


        //邏輯
        var update=function(){
            //物體隨着XY軸旋轉
            //cube.rotation.x +=0.01;
            //cube.rotation.y += 0.005;
        }

        //繪畫渲染
        var render=function() {
            renderer.render(scene,camera);
        }

        //循環運行update,render
        var loop=function() {
             requestAnimationFrame(loop);
             update();
             render();
        }

        loop();//循環開始
    </script>
</body>
</html>


    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章