我的THREE.js之旅01

时间:2021-11-19 04:39:52
教材:Three.js开发指南 第一章  
[html] view plain copy  
[html] view plain copy<!DOCTYPE html>  
<html>  
<head>  
    <title>example 01.01</title>  
    <script type="text/javascript" src="./libs/three.js"></script>  
    <script type="text/javascript" src="./libs/jquery.js"></script>  
    <script type="text/javascript" src="./libs/stats.min.js"></script>  
    <script type="text/javascript" src="./libs/AsciiEffect.js"></script>  
  
  
    <style>  
        body{  
            margin: 0;  
            overflow: hidden;  
        }  
    </style>  
</head>  
<body>  
<div id="Stats-output"></div>  
<div id="WebGL-output"></div>  
  
  
<script type="text/javascript">  
    $(function(){  
        var stats1=initStats();  
        //THREE.Scene 一个容器,用于保存并跟踪我们想要渲染的物体  
        //THREE.PerspectiveCamera camera定义了我们能够在渲染好的scene里面看到什么  
        // THREE.WebGLRenderer renderer对象负责计算指定相机角度下浏览器中scene的样子,WebGLRenderer:使用计算机上的显卡来渲染场景  
        var scene=new THREE.Scene();  
        var camera=new THREE.PerspectiveCamera(45,window.innerWidth/window.innerHeight,0.1,1000);  
        var renderer=new THREE.WebGLRenderer();  
  
  
        //设置背景颜色  
        renderer.setClearColor(0xEEEEEE);  
        //将scene渲染的尺寸大小  
        renderer.setSize(window.innerWidth,window.innerHeight);  
        //需要生成阴影,这里设置后,还需要设置接收阴影的面,产生阴影的物体与光源  
        renderer.shadowMapEnabled=true;  
  
  
        //创建坐标轴并加入到scene  
        var axes=new THREE.AxisHelper(20);  
        scene.add(axes);  
  
  
        //平面大小,宽60(x),高20(z)  
        var planeGeometry=new THREE.PlaneGeometry(60,20,1,1);  
        //平面外观,MeshBasicMaterial:不会对照射有反应,使用MeshLambertMaterial、MeshPhongMaterial试试  
        var planeMaterial=new THREE.MeshPhongMaterial({color:0xcccccc});  
        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  
        scene.add(plane);  
  
  
        //wireframe:true 网格,false 实体表面?  
        var cubeGeometry=new THREE.CubeGeometry(4,4,4);  
        var cubeMaterial=new THREE.MeshLambertMaterial({color:0xff0000, wireframe:false});  
        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, wireframe:false});  
        var sphere=new THREE.Mesh(sphereGeometry,sphereMaterial);  
  
  
        //生成阴影  
        sphere.castShadow=true;  
  
  
        sphere.position.x=20;  
        sphere.position.y=4;  
        sphere.position.z=2;  
  
  
        scene.add(sphere);  
  
  
        camera.position.x=-30;  
        camera.position.y=40;  
        camera.position.z=30;  
        camera.lookAt(scene.position);  
  
  
        //添加光源  
        var spotLight=new THREE.SpotLight(0xffffff);  
        spotLight.position.set(-40,60,-10);//照射位置  
        //这个光源可以产生阴影  
        spotLight.castShadow=true;  
        scene.add(spotLight);  
  
  
  
  
  
  
        var step=0;  
  
  
        //ascii效果  
        var effect=new THREE.AsciiEffect(renderer);  
        effect.setSize(window.innerWidth,window.innerHeight);  
        $("#WebGL-output").append(effect.domElement);  
    //    $("#WebGL-output").append(renderer.domElement);  
        //renderer.render(scene,camera);  
        renderScene();  
  
  
        //添加动画,持续渲染  
        function renderScene(){  
            stats1.update();  
  
  
            //绕坐标轴旋转的红色方块  
            cube.rotation.x+=0.02;  
            cube.rotation.y+=0.02;  
            cube.rotation.z+=0.02;  
  
  
            //让蓝色球弹跳  
            step+=0.1;  
            sphere.position.x=20+(10*(Math.cos(step)));  
            sphere.position.y=2+(10*Math.abs(Math.sin(step)));  
  
  
            requestAnimationFrame(renderScene);  
            effect.render(scene,camera);  
           // renderer.render(scene,camera);  
  
  
        }  
        //统计fps  
        function initStats(){  
            var stats=new Stats();  
            stats.setMode(0);  
            stats.domElement.style.position='absolute';  
            stats.domElement.style.left='0px';  
            stats.domElement.style.right='0px';  
            $("#Stats-output").append(stats.domElement);  
            return stats;  
  
  
        }  
    });  
  
  
  
  
</script>  
</body>  

</html>  




宁波双眼皮整形医院http://www.iyestar.com/ybzx/syp/