three.js实现世界3d地图
概况如下:
1、THREE.Shape
绘制世界地图平面地图;
2、THREE.ExtrudeGeometry
将绘制的平面沿着Z轴拉伸,实现3d效果;
效果图如下:
预览地址:three.js实现世界3d地图
初始化场景、相机、渲染器,设置相机位置,初始化光源,光源采用HemisphereLight
,设置光源位置为场景中心位置,并将光源加入场景中。
// 初始化场景
var scene = new THREE.Scene();
// 初始化相机,第一个参数为摄像机视锥体垂直视野角度,第二个参数为摄像机视锥体长宽比,
// 第三个参数为摄像机视锥体近端面,第四个参数为摄像机视锥体远端面
var camera = new THREE.PerspectiveCamera(20, dom.clientWidth / dom.clientHeight, 1, 100000);
// 设置相机位置,对应参数分别表示x,y,z位置
camera.position.set(0, 0, 500);
var renderer = new THREE.WebGLRenderer({
alpha: true,
antialias: true
});
// 设置光照
scene.add(new THREE.HemisphereLight('#ffffff', '#ffffff', 1));
设置场景窗口尺寸,并且初始化控制器,窗口尺寸默认与浏览器窗口尺寸保持一致,最后将渲染器加载到dom中。
// 设置窗口尺寸,第一个参数为宽度,第二个参数为高度
renderer.setSize(dom.clientWidth, dom.clientHeight);
// 初始化控制器
var orbitcontrols = new THREE.OrbitControls(camera,renderer.domElement);
// 将渲染器加载到dom中
dom.appendChild(renderer.domElement);
绘制世界地图平面方法
// 绘制世界平面地图函数
var drawShape = function (pos, averageX, averageY) {
var shape = new THREE.Shape();
shape.moveTo(pos[0][0] - averageX, pos[0][1] - averageY);
pos.forEach(function (item) {
shape.lineTo(item[0] - averageX, item[1] - averageY);
})
return shape;
}
将平面地图沿着z轴拉伸转换配置参数
// ExturdeGeometry配置参数
var options = {
depth: 3, // 定义图形拉伸的深度,默认100
steps: 0, // 拉伸面方向分为多少级,默认为1
bevelEnabled: true, // 表示是否有斜角,默认为true
bevelThickness: 0, // 斜角的深度,默认为6
bevelSize: 0, // 表示斜角的高度,高度会叠加到正常高度
bebelSegments: 0, // 斜角的分段数,分段数越高越平滑,默认为1
curveSegments: 0 // 拉伸体沿深度方向分为多少段,默认为1
}
将平面地图沿着z轴拉伸转换为3d方法
// 将shape转换为ExtrudeGeometry
var transition3d = function (shapeObj, identify) {
var geometry = new THREE.ExtrudeGeometry(shapeObj, options);
var material1 = new THREE.MeshBasicMaterial({
color: faceColor
});
var material2 = new THREE.MeshBasicMaterial({
color: sideColor
});
// 绘制地图
shapeGeometryObj['shapeGeometry' + identify] = new THREE.Mesh(geometry, [material1, material2]);
// 将地图加入场景
scene.add(shapeGeometryObj['shapeGeometry' + identify])
}
世界地图通过position
值来实现位置的确认,动画使用requestAnimationFrame
来实现。
// 执行函数
var render = function () {
scene.rotation.y -= 0.01;
renderer.render(scene, camera);
orbitcontrols.update();
requestAnimationFrame(render);
}
three.js实现世界3d地图的更多相关文章
- Three.js实现3D地图实例分享
本文主要给大家介绍了关于利用Three.js开发实现3D地图的实践过程,文中通过示例代码介绍的非常详细,对大家学习或者使用three.js具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习 ...
- three.js 绘制3d地图
通过地图数据配合three可以做出非常酷炫的地图,在大数据展示中十分常见. 这篇郭先生就来说说使用three.js几何体制作3D地图.在线案例点击原文地址. 地图的数据是各个地图块的点数组,通过THR ...
- three.js通过canvas实现球体世界平面地图
概况如下: 1.SphereGeometry实现自转的地球: 2.THREE.CatmullRomCurve3实现球体线条地图点确定: 3.THREE.Math.degToRad,Math.sin,M ...
- Threejs 开发3D地图实践总结
前段时间连续上了一个月班,加班加点完成了一个3D攻坚项目.也算是由传统web转型到webgl图形学开发中,坑不少,做了一下总结分享. 1.法向量问题 法线是垂直于我们想要照亮的物体表面的向量.法线代表 ...
- Threejs 开发3D地图实践总结【转】
Threejs 开发3D地图实践总结 前段时间连续上了一个月班,加班加点完成了一个3D攻坚项目.也算是由传统web转型到webgl图形学开发中,坑不少,做了一下总结分享. 1.法向量问题 法线是垂 ...
- ArcGIS API for JavaScript 4.2学习笔记[2] 显示3D地图
3D地图又叫场景. 由上一篇可知, require入口函数的第一个参数是字符串数组 ["esri/Map", "esri/views/MapView", &qu ...
- 初级开发者也能码出专业炫酷的3D地图吗?
好看的3D地图搭建出来,一定是要能为开发者所用与业务系统开发中才能真正地体现价值.基因于此,CityBuilder建立了与ThingJS的通道——直转ThingJS代码,支持将配置完成的3D地图一键转 ...
- Windows 10 新特性 -- Bing Maps 3D地图开发入门(一)
本文主要内容是讲述如何创建基于 Windows Universal App 的Windows 10 3D地图应用,涉及的Windows 10新特性包括 Bing Maps 控件.Compiled da ...
- js渲染的3d玫瑰
参看下面链接: 程序员最美情人节礼物:JS渲染的3D玫瑰
随机推荐
- C++ explicit关键字,修饰构造函数,ctor
#include <iostream> // operator Type() 类型操作符重载 // operator int() // operator double() // ... / ...
- 使用admin的步骤、必知必会13条、单表的双下划线、外键的操作、多对多的操作:
MVC M: model 模型 与数据库交互 V: view 视图 HTML C:controller 控制器 流程 和 业务逻辑 MTV M:model ORM T:template 模板 HTML ...
- 微信小程序的坑(持续更新中)
参与微信小程序开发有一段时间了,先后完成信息查询类和交易类的两个不同性质的小程序产品的开发:期间遇到各种各样的小程序开发的坑,有的是小程序基础功能不断改进完善而需要业务持续的适配,有的是小程序使用上的 ...
- HTML连载53-网易注册界面实战之content的头部、content注册信息
一. 这次完成了content部分的右边图片以及content的top部分的边角填充 <!DOCTYPE html> <html lang="en"> &l ...
- java对象引用测试
代码 java中初始化一个实例,这个实例对应的只是对象的一个地址,并不是对象本身.将这个实例赋值给别的实例时,新实例也是指向对象的地址,两个实例实际指向的是同一个实例.对新实例赋值,老实例也会同时改变 ...
- 【分析工具】阿里巴巴Arthas--线上问题分析利器
目录 1. Arthas是什么 2. Arthas能解决什么问题 3. 快速安装 第一步:下载 第二步:运行 第三步:选择进程 4. 实战使用 5. 总结 本博客转载自阿里开源的 Java 诊断工具 ...
- Linux中哪些工具堪称神器?
作者:int32bit www.zhihu.com/question/59227720 ag:比grep.ack更快的递归搜索文件内容. Github地址: https://github.com/gg ...
- 数据处理之以OLEDB方式读取Excel数据丢失的原因及解决方法
1.引言 在应用程序的设计中,经常需要读取Excel数据或将Excel数据导入转换到其他数据载体中,C#读取Excel的方式有两种,一种是通过OLEDB方式读取,另一种为通过COM组件方式读取.近段时 ...
- 利用Azure虚拟机安装Dynamics 365 Customer Engagement之九:新建组织
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- 打包Python文件为exe
pip install pyinstaller 然后就在终端里执行命令 cd 到目标文件的目录下 执行 pyinstaller -F ***.py 即可生成exe