three.js 简单的样板:带阻尼的旋转立方体和轨道控制

示例

这是基本的HTML文件,可以在启动项目时用作样板。该样板使用带有阻尼的轨道控制(可以使物体围绕物体移动并产生减速效果的相机),并创建一个旋转的立方体。

<!DOCTYPE html>
<html>
    <head>
        <title>Three.js Boilerplate</title>

        <!--This is important to get a correct canvas size on mobile-->
        <meta name='viewport' content='width=device-width, user-scalable=no'/>

        <style>
            body{
                margin:0;
                overflow:hidden;
            }

            /*
              Next 2 paragraphs are a good practice. 
              In IE/Edge you have to provide the cursor images.
            */
            canvas{
                cursor:grab;
                cursor:-webkit-grab;
                cursor:-moz-grab;
            }
            canvas:active{
                cursor:grabbing;
                cursor:-webkit-grabbing;
                cursor:-moz-grabbing;
            }
        </style>
    </head>
    <body>
        
        <script xx_src='three.js/build/three.js'></script>
        <script xx_src='three.js/examples/js/controls/OrbitControls.js'></script>

        <script>
            var scene, renderer, camera, controls, cube;
        
            init();

            function init () {
                renderer = new THREE.WebGLRenderer();
                
                //这是为了在便携式设备上获得正确的像素细节
                renderer.setPixelRatio(window.devicePixelRatio);

                //这将设置画布的尺寸。
                renderer.setSize( window.innerWidth,window.innerHeight);
                document.body.appendChild(renderer.domElement);

                scene = new THREE.Scene();

                camera = new THREE.PerspectiveCamera( 
                    70,                                         //FOV
                   window.innerWidth/ window.innerHeight,     //aspect
                    1,                                          //接近裁剪平面
                    100                                         //远裁剪平面
                );
                camera.position.set( 1, 3, 5 );

                controls = new THREE.OrbitControls( camera,renderer.domElement);
               controls.rotateSpeed= .07;
               controls.enableDamping= true;
               controls.dampingFactor= .05;

                window.addEventListener( 'resize', function () {
                   camera.aspect=window.innerWidth/ window.innerHeight;
                    camera.updateProjectionMatrix();
                    renderer.setSize( window.innerWidth,window.innerHeight);
                }, false );

                cube = new THREE.Mesh(
                    new THREE.BoxGeometry( 1, 1, 1 ),
                    new THREE.MeshBasicMaterial()
                   );
                scene.add( cube );

                animate();
            }

            function animate () {
                requestAnimationFrame( animate );
                controls.update();
                renderer.render( scene, camera );
                
                cube.rotation.x += 0.01;
            }
        </script>
    </body>
</html>