zoukankan      html  css  js  c++  java
  • ThreeJS 地球添加柱状图

    环境

    • ThreeJS 107版本
    • three.min.js
    • OrbitControls.js

    说明

    柱状图功能原理是在地球上加上圆柱对象,颜色和高度分别代表分类和值大小。

    解决方案

    1. 创建球的过程参见"ThreeJS制作地球"

    2. 创建柱子group,考虑后面会做删除功能,所以把所有的实体都以group组为单位添加,后续方便做删除

    // 标记点组合
    var columnGroup = new THREE.Group();
    
    1. 根据数据,定义柱子颜色
    // 获取柱体值对应颜色
    var color = '#1bb4b0';//默认色
    for (var ci = 0; ci < colors.length; ci++) {
    if (_columnData[i].attributes.value >= colors[ci].value) {
    color = colors[ci].color;
    break;
    }
    }
    
    1. 创造柱子对象和材质
    var columnGeom = new THREE.CylinderGeometry(columnRadius, columnRadius, _columnData[i].attributes.value * columnScale, 32);
    var columnMaterial = new THREE.MeshBasicMaterial({
    color: color
    });
    var columnMesh = new THREE.Mesh(columnGeom, columnMaterial);
    
    1. 设置柱子的坐标位置
    // 获取标记点坐标
    var columnPos = this.getPosition(_columnData[i].attributes.x + 90, _columnData[i].attributes.y, _earthOptions.earthBallSize);
    
    1. 旋转柱子,使柱子都垂直于地球表面
    // 旋转
    var matrix = new THREE.Matrix4();
    matrix.makeRotationX(Math.PI / 2);
    matrix.setPosition(new THREE.Vector3(0, 0, -(_columnData[i].attributes.value * columnScale) / 2));
    columnGeom.applyMatrix(matrix);
    let columnC = columnMesh.clone();
    columnC.rotation.z = Math.PI / 2;
    columnMesh.add(columnC);
    columnMesh.position.copy(columnPos);
    columnMesh.lookAt(0, 0, 0);
    columnGroup.add(columnMesh);
    

    附上效果图

    柱状图

  • 相关阅读:
    python学习第18天----属性、类方法、静态方法
    面试总结
    JAVA面试题整理
    Docker-基础
    Shell
    MYSQL
    logstash的使用(ELK)
    (ELK)FileBeat的使用
    Zookeeper的介绍和单机、集群搭建
    Elaticsearch7.7.0的安装(ELK)
  • 原文地址:https://www.cnblogs.com/giser-s/p/12928587.html
Copyright © 2011-2022 走看看