zoukankan      html  css  js  c++  java
  • 30-THREE.JS 圆环

    <!DOCTYPE html>
    
    <html>
    
    <head>
        <title>Example 05.03 - Basic 2D geometries - Ring</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>
        <script type="text/javascript" src="https://cdn.bootcss.com/dat-gui/0.7.3/dat.gui.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 init() {
    
            var stats = initStats();
    
            // 创建一个场景
            var scene = new THREE.Scene();
    
            // 创建一个相机
            var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000);
    
            // 创建一个渲染器
            var webGLRenderer = new THREE.WebGLRenderer();
            webGLRenderer.setClearColor(new THREE.Color(0xEEEEEE, 1.0));
            webGLRenderer.setSize(window.innerWidth, window.innerHeight);
            webGLRenderer.shadowMapEnabled = true;
    
            var torus = createMesh(new THREE.RingGeometry());
            // 把形状添加到场景中去
            scene.add(torus);
    
            // 设置相机坐标   和    朝向
            camera.position.x = -30;
            camera.position.y = 40;
            camera.position.z = 50;
            camera.lookAt(new THREE.Vector3(10, 0, 0));
    
            // 把渲染后的结果添加到DOM元素中去
            document.getElementById("WebGL-output").appendChild(webGLRenderer.domElement);
    
            
            var step = 0;
    
    
            
            var controls = new function () {
    
                this.innerRadius = 0;
                this.outerRadius = 50;
                this.thetaSegments = 8;
                this.phiSegments = 8;
                this.thetaStart = 0;
                this.thetaLength = Math.PI * 2;
    
                this.redraw = function () {
                    scene.remove(torus);
    
                    torus = createMesh(new THREE.RingGeometry(controls.innerRadius, controls.outerRadius, controls.thetaSegments, controls.phiSegments, controls.thetaStart, controls.thetaLength));
                    
                    scene.add(torus);
                };
            };
    
            var gui = new dat.GUI();
            gui.add(controls, 'innerRadius', 0, 40).onChange(controls.redraw);
            gui.add(controls, 'outerRadius', 0, 100).onChange(controls.redraw);
            gui.add(controls, 'thetaSegments', 1, 40).step(1).onChange(controls.redraw);
            gui.add(controls, 'phiSegments', 1, 20).step(1).onChange(controls.redraw);
            gui.add(controls, 'thetaStart', 0, Math.PI * 2).onChange(controls.redraw);
            gui.add(controls, 'thetaLength', 0, Math.PI * 2).onChange(controls.redraw);
    
    
            render();
    
            function createMesh(geom) {
    
                // 申请两种材质
                var meshMaterial = new THREE.MeshNormalMaterial();
                meshMaterial.side = THREE.DoubleSide;
                var wireFrameMat = new THREE.MeshBasicMaterial();
                wireFrameMat.wireframe = true;
    
                // 创建多材质图形
                var mesh = THREE.SceneUtils.createMultiMaterialObject(geom, [meshMaterial, wireFrameMat]);
    
                return mesh;
            }
    
            function render() {
                stats.update();
    
                torus.rotation.y = step += 0.01;
                requestAnimationFrame(render);
                webGLRenderer.render(scene, camera);
            }
    
            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>
    

      

  • 相关阅读:
    Linux系统下安装rz/sz命令及使用说明
    Linux 下Beanstalk安装
    Jetty中间件
    JBOSS应用中间件
    IBM 存储高可用HA解决方案和DR连续性解决方案
    Nginx负载均衡与反向代理的配置和优化
    NFS挂载网络存储
    使用集中式身份管理服务详解
    配置链路聚合(端口聚合)
    配置ssh远程访问策略
  • 原文地址:https://www.cnblogs.com/shuaihan/p/9881792.html
Copyright © 2011-2022 走看看