1. 程式人生 > >three.js布林運算原始碼

three.js布林運算原始碼

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <script src="lib/three.js"></script>
    <script src="lib/stats.min.js"></script>
    <style type="text/css">
        body
        {
            margin:0;
            overflow:hidden;
        }
    </style>
</head>
<body>
    <div id="Stats-output">
    </div>
 
    <div id="WebGL-output">
    </div>
</body>
</html>
<script type="text/javascript">
    function init()
    {
        //模型轉動
        var stats = initStats();
        //設定場景
        var scene = new THREE.Scene();
        //設定相機
        var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 10000);
        camera.position.x = -30;
        camera.position.y = 40;
        camera.position.z = 30;
        camera.lookAt(scene.position);
        //設定渲染器
        var renderer = new THREE.WebGLRenderer();
        renderer.setClearColor(new THREE.Color(0xEEEEEE, 1.0));
        renderer.setSize(window.innerWidth, window.innerHeight);
        renderer.shadowMapEnabled = true;
        //設定一個平面
        var planeGeometry = new THREE.PlaneGeometry(60, 20, 1, 1);
        var planeMaterial = new THREE.MeshLambertMaterial({
            color: 0xffffff
        });
        var plane = new THREE.Mesh(planeGeometry, planeMaterial);
        // 告訴渲染器需要陰影
        plane.receiveShadow = true;
        plane.rotation.x = -0.5 * Math.PI;
        plane.position.x = 15;
        plane.position.y = 0;
        plane.position.z = 0;
        scene.add(plane);
        //繪製長方體
        var cubeGeometry = new THREE.BoxGeometry(4, 4, 4);
        var cubeMaterial = new THREE.MeshLambertMaterial({
            color: 0xff0000,
            wireframe:true
        });
        var cube = new THREE.Mesh(cubeGeometry, cubeMaterial);
        //增加陰影
        cube.castShadow = true;

        // 繪製位置
        cube.position.x = -10;
        cube.position.y = 5;
        cube.position.z =0;
        scene.add(cube);
        //繪製圓
        var sphereGeometry = new THREE.SphereGeometry(4, 20, 20);
        var sphereMaterial = new THREE.MeshLambertMaterial({
            color: 0x7777ff,
            
        });
        var sphere = new THREE.Mesh(sphereGeometry, sphereMaterial);
        sphere.position.x = 20;
        sphere.position.y = 0;
        sphere.position.z = 2;
        sphere.castShadow = true;
        scene.add(sphere);

        //光源
        //var ambientLight = new THREE.AmbientLight(0x0c0c0c);
        //scene.add(ambientLight);

        var spotLight = new THREE.SpotLight(0xffffff);
        spotLight.position.set(-40, 60, -10);
        spotLight.castShadow = true;
        scene.add(spotLight);
        //顯示畫布
        document.getElementById("WebGL-output").appendChild(renderer.domElement);

        // call the render function
        var step = 0;
        renderScene();

        function renderScene() {
            stats.update();
            // 旋轉
            cube.rotation.x += 0.02;
            cube.rotation.y += 0.02;
            cube.rotation.z += 0.02;

            // 跳動
            step += 0.04;
            sphere.position.x = 20 + (10 * (Math.cos(step)));
            sphere.position.y = 2 + (10 * Math.abs(Math.sin(step)));

            // 動畫效果
            requestAnimationFrame(renderScene);
            renderer.render(scene, camera);
        }

        //座標軸物件
        var axes = new THREE.AxisHelper(20);   //引數(顏色,近處,遠出)
        scene.add(axes);

        //怎麼加霧效果
        scene.fog = new THREE.Fog(0xffffff, 0.2, 1000);

        //監聽
        function initStats()
        {

            var stats = new Stats();

            stats.setMode(0); // 0: fps, 1: ms

            // Align top-left
            stats.domElement.style.position = 'absolute';
            stats.domElement.style.left = '0px';
            stats.domElement.style.top = '0px';

            document.getElementById("Stats-output").appendChild(stats.domElement);

            return stats;
        }
    }
    window.onload = init;
</script>