zoukankan      html  css  js  c++  java
  • 01-THREE.JS 第一个场景

    THREE.JS第一个场景

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
            <script src="https://cdn.bootcss.com/three.js/r67/three.js"></script>
            <script src="https://cdn.bootcss.com/stats.js/r10/Stats.min.js"></script>
            <style>
                body{
                    margin:0;
                    overflow:hidden;
                }
            </style>
        </head>
        <body>
            <!--
                作者:
                时间:2018-10-29
                描述:状态
            -->
            <div id="Stats-output"></div>
            <!--
                作者:
                时间:2018-10-29
                描述:显示动画效果
            -->
            <div id="WebGL-output"></div>
            <script>
                function init(){
                    
                     var stats = initStats();
                    
                    //创建一个场景
                    var scene = new THREE.Scene();
                    
                    //创建一个相机
                     var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000);
                     
                    //创建一个渲染器
                    var renderer = new THREE.WebGLRenderer();
                    
                    //渲染器的背景颜色#EEEEEE
                    renderer.setClearColor(new THREE.Color(0xEEEEEE, 1.0));
                    
                    //渲染器的大小
                    renderer.setSize(window.innerWidth, window.innerHeight);
                    
                    //是否显示阴影
                    renderer.shadowMapEnabled = true;
                    
                    
                    //创建一个地面几何    宽60   高20   宽分成1份   高分成1份
                    var planeGeometry = new THREE.PlaneGeometry(60, 20, 1, 1);
                    
                    //地面的材料是光照材料 颜色是#FFFFFF
                    var planeMaterial = new THREE.MeshLambertMaterial({color: 0xffffff});
                    
                    //合成材料和几何
                    var plane = new THREE.Mesh(planeGeometry, planeMaterial);
                    
                    //地面允许接收阴影
                    plane.receiveShadow = true;
                    
                    //地面坐标
                    plane.rotation.x = -0.5 * Math.PI;   //地面本来是竖着的  要逆时针旋转90度   -90 * Math.PI / 180;  
                    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});
                    var cube = new THREE.Mesh(cubeGeometry, cubeMaterial);
                    cube.castShadow = true;
            
                    // 正方体的坐标
                    cube.position.x = -4;
                    cube.position.y = 3;
                    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);
                    
                    // 相机的坐标  相机的镜头朝向场景
                    camera.position.x = -30;
                    camera.position.y = 40;
                    camera.position.z = 30;
                    camera.lookAt(scene.position);
                    
                     // 添加自然光    自然光不会产生阴影
                    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);
                    
                    //将渲染的场景添加到dom元素中去
                       document.getElementById("WebGL-output").appendChild(renderer.domElement);
                       
                        // 调用渲染场景的循环
                    var step = 0;
                    renderScene();
            
                    function renderScene() {
                        
                        //更新FPS值
                        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)));
            
                        // render using requestAnimationFrame
                        requestAnimationFrame(renderScene);
                        renderer.render(scene, camera);
                    }
                    
                    //在一个小图里显示每秒显示的帧数(FPS)
                    function initStats(){
                        var stats = new Stats();
                        stats.setMode(0); // 0: fps, 1: ms
                        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>
        </body>
    </html>
  • 相关阅读:
    Reverse linked list
    Implement Queue by Two Stacks
    Min Stack
    Search a 2D Matrix
    50. Pow(x, n)
    监控hdfs的一个目录,若有新文件,spark就开始处理这个文件,可以使用spark streaming textfilestream来监控该目录
    kafka2在重启消费者以后已经提交offset回退了 什么原因(待完善)
    Hybrid Recommender Systems: Survey and Experiments
    开源实时日志分析平台
    scala为什么要清理闭包
  • 原文地址:https://www.cnblogs.com/shuaihan/p/9872415.html
Copyright © 2011-2022 走看看