zoukankan      html  css  js  c++  java
  • three.js之创建坐标系网格

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset=utf-8>
        <title>My first three.js app</title>
        <style>
            body {
                margin: 0;
            }
    
            canvas {
                 100%;
                height: 100%
            }
    
            div#canvas-frame {
                border: none;
                cursor: pointer;
                 100%;
                height: 600px;
                background-color: #EEEEEE;
            }
        </style>
    </head>
    <body>
    <div id="canvas-frame"></div>
    <script src="../static/three.js-master/build/three.js"></script>
    <script>
    
        var renderer;  // 渲染器, 声明变量
    
        function initThree() {
    
            renderer = new THREE.WebGLRenderer();  // 创建一个渲染器
            renderer.setSize(window.innerWidth, window.innerHeight);  // 设置宽度高度
            document.getElementById('canvas-frame').appendChild(renderer.domElement);  //添加到画布canvas-frame里面
            renderer.setClearColor(0xFFFFFF, 1.0);  // 设置背景色和透明度
        }
    
    
        var camera;  // 摄像机
    
        function initCamera() {
            camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 500);  // 创建一个透视摄像机
            camera.position.set(0, 500, 0);  // 设置摄像机坐标
            camera.up.x = 0;
            camera.up.y = 0;
            camera.up.z = 1;
            camera.lookAt(0, 0, 0);
        }
    
    
        var scene;  // 场景
    
        function initScene() {
            scene = new THREE.Scene();  // 创建场景
        }
    
        var light;
    
        function initLight() {
            light = new THREE.DirectionalLight(0xFF0000, 1.0, 0);  // THREE.DirectionalLight平行光可以看作距离很远的光
            light.position.set(100, 100, 200);  // 坐标
            scene.add(light);  // 添加到场景中
        }
    
    
        function initObject() {
            var geometry = new THREE.Geometry();  // geometry为三维空间中的点集同点集闭合后的各个面的集合
            // 在x轴上定义两个点p1(-500,0,0),p2(500,0,0)。
            geometry.vertices.push(new THREE.Vector3(-200, 0, 0));
            geometry.vertices.push(new THREE.Vector3(200, 0, 0));
            // 思路:我们要画一个网格的坐标,那么我们就应该找到线的点。把网格虚拟成正方形,在正方形边界上找到几个等分点,用这些点两两连接,就能够画出整个网格来。
            for (var i = 0; i <= 8; i++) {
                // 这两个点决定了x轴上的一条线段,将这条线段复制20次,分别平行移动到z轴的不同位置,就能够形成一组平行的线段。
                // 同理,将p1p2这条线先围绕y轴旋转90度,然后再复制20份,平行于z轴移动到不同的位置,也能形成一组平行线。
                // 经过上面的步骤,就能够得到坐标网格了。
                var linex = new THREE.Line(geometry, new THREE.LineBasicMaterial({color: 0x000000, opacity: 0.2}));
                linex.position.z = (i * 50) - 200;
                scene.add(linex);
    
                var liney = new THREE.Line(geometry, new THREE.LineBasicMaterial({color: 0x000000, opacity: 0.2}));
                liney.position.x = (i * 50) - 200;
                liney.rotation.y = 90 * Math.PI / 180;  // 将线旋转90度
                scene.add(liney);
    
            }
        }
    
    
        function threeStart() {
            initThree();
            initCamera();
            initScene();
            initLight();
            initObject();
            renderer.clear();
            renderer.render(scene, camera);
        }
    
        threeStart();
    
    </script>
    </body>
    </html>

     附带three.js代码,点击下载

  • 相关阅读:
    mysql拼接字符串和过滤字符的方法
    python ichat使用学习记录
    php简单混淆类加密文件如何解密?
    如何读取xml文件,根据xml节点属性查询并输出xml文件
    GoldenDict
    R群体
    samtools中faidx索引格式
    Conservation and the genetics of population重要语录
    图形分类
    电脑网络知识理解
  • 原文地址:https://www.cnblogs.com/aaronthon/p/10979750.html
Copyright © 2011-2022 走看看