Threejs实现3d地球记录(2)

2、添加地球光圈

地球光圈图:
地球光圈图

//地球光圈
function createSprite(R) {
   
  var textureLoader = new THREE.TextureLoader();
  var texture = textureLoader.load(spriteImg);//加载纹理贴图
  // 创建精灵材质对象SpriteMaterial
  var spriteMaterial = new THREE.SpriteMaterial({
   
    map: texture, //设置贴图
    transparent: true,//开启透明
    // opacity: 0.5,//通过透明度整体调节光圈
  });
  var sprite = new THREE.Sprite(spriteMaterial);
  sprite.scale.set(R * 3.0, R * 3.0, 1);//缩放精灵
  return sprite
}

function createEarth(R) {
   
  var earthGroup = new THREE.Group();//地球组对象
  earthGroup.add(createSphereMesh(R));//球体Mesh插入earthGroup中
  earthGroup.add(createSprite(R));//地球光圈
  });
  return earthGroup;
}

效果:
地球光圈

3、绘制国家边界线

(1)、经纬度转球面坐标

公式如下:
经纬度转球面坐标公式

function lon2xyz(R, longitude, latitude) {
    //longitude:经度角度值,latitude:纬度角度值
  var lon = longitude * Math.PI / 180;//转弧度值
  var lat = latitude * Math.PI / 180;
  lon = -lon;// three.js坐标系z坐标轴对应经度-90度,而不是90度

  // 经纬度坐标转球面坐标计算公式
  var x = R * Math.cos(lat) * Math.cos(lon);
  var y = R * Math.sin(lat);
  var z = R * Math.cos(lat) * Math.sin(lon);
  // 返回球面坐标
  return {
   
    x: x,
    y: y,
    z: z,
  };
}

(2)、边界线创建

通过BufferGeometry构建一个几何体并传入顶点数据,通过LineLoop模型渲染几何体,连点成线,但是设置线模型Line对应线材质LineBasicMaterial的线宽属性.lineWidth,是无效的。可使用拓展库Line2解决此问题
在这里插入图片描述

// pointArr:边界坐标
function line(pointArr) {
   
  var geometry = new THREE.BufferGeometry(); //创建一个Buffer类型几何体对象
  var vertices = new Float32Array(pointArr);//创建顶点数据
  //BufferAttribute这个类用于存储与BufferGeometry相关联的 attribute(例如顶点位置向量,面片索引,法向量,颜色值,UV坐标以及任何自定义 attribute )。 利用 BufferAttribute,可以更高效的向GPU传递数据。
  var attribue = new THREE.BufferAttribute(vertices, 3); //表示一个顶点的xyz坐标
  geometry
  • 9
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值