效果图

总体步骤

① 创建场景
② 创建相机
③ 创建物体
④创建渲染器

html代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><style>html,body{padding: 0;margin: 0;}#container{width: 100%;height: 650px;background-color: #000000;}</style>
</head>
<body>
<div id="container"></div>
<script type="module">
</script>
</body>
</html>

导入文件,创建全局变量和函数

    import * as THREE from "./js/three.module.js";import {OrbitControls} from "./js/OrbitControls.js";let renderer,scene,camera,cube,cloudMesh;action();function action() {onload();run();}

①创建场景

onload函数中

        let container=document.getElementById("container");//获取containerscene=new THREE.Scene();//创建场景

②创建相机

onload函数中

        camera=new THREE.PerspectiveCamera(45,container.offsetWidth/container.offsetHeight,1,4000);camera.position.set(0,0,3.5);//创建相机并设置位置//let axe=new THREE.AxesHelper(20);//scene.add(axe);//辅助工具,用于创建相机时,相机找到合适的位置

③创建物体

onload函数中

let group=new THREE.Group();//创建群组,用来存放地球和大气层let pointLight=new THREE.PointLight();//创建点光源pointLight.position.set(-10,4,15);//设置光源的位置pointLight.intensity=1.5;//设置光强scene.add(pointLight);let geometry=new THREE.SphereGeometry(1,32,32);//创建一个球let textureLoader=new THREE.TextureLoader();let surfaceMap=textureLoader.load("./img/earth_surface_2048.jpg");//创建颜色贴图let normalMap=textureLoader.load("./img/earth_normal_2048.jpg");//创建法线贴图let specularMap=textureLoader.load("./img/earth_specular_2048.jpg");//创建高光贴图let material=new THREE.MeshPhongMaterial({map:surfaceMap,normalMap:normalMap,specularMap:specularMap});cube=new THREE.Mesh(geometry,material);//将几何体和材料放到网格中cube.rotation.x=Math.PI/5;group.add(cube);let cloudGeometry=new THREE.SphereGeometry(1.005,32,32);//创建大气层所在的球面let cloudMap=textureLoader.load("./img/earth_clouds_1024.png");let cloudMaterial=new THREE.MeshLambertMaterial({color:0xffffff,map:cloudMap,transparent:true});cloudMesh=new THREE.Mesh(cloudGeometry,cloudMaterial);group.add(cloudMesh);scene.add(group);//把群组添加到场景中

④创建渲染器

onload函数中

     renderer=new THREE.WebGLRenderer({antialias:true});renderer.setPixelRatio(window.devicePixelRatio);renderer.setSize(container.offsetWidth,container.offsetHeight);container.appendChild(renderer.domElement);let contorl=new OrbitControls(camera,renderer.domElement);//添加鼠标滚动缩放,旋转对象

run函数中

 function run() {requestAnimationFrame(run);//循环调用cloudMesh.rotation.y+=0.0002;//大气层旋转cube.rotation.y+=0.0005;//地球旋转renderer.render(scene,camera);//不断渲染}

总代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><style>html,body{padding: 0;margin: 0;}#container{width: 100%;height: 650px;background-color: #000000;}</style>
</head>
<body>
<div id="container"></div>
<script type="module">import * as THREE from "./js/three.module.js";import {OrbitControls} from "./js/OrbitControls.js";let renderer,scene,camera,cube,cloudMesh;action();function action() {onload();run();}function onload() {let container=document.getElementById("container");//获取containerscene=new THREE.Scene();//创建场景camera=new THREE.PerspectiveCamera(45,container.offsetWidth/container.offsetHeight,1,4000);camera.position.set(0,0,3.5);//创建相机并设置位置//let axe=new THREE.AxesHelper(20);//scene.add(axe);//辅助工具,用于创建相机时,相机找到合适的位置let group=new THREE.Group();//创建群组,用来存放地球和大气层let pointLight=new THREE.PointLight();//创建点光源pointLight.position.set(-10,4,15);//设置光源的位置pointLight.intensity=1.5;//设置光强scene.add(pointLight);let geometry=new THREE.SphereGeometry(1,32,32);//创建一个球let textureLoader=new THREE.TextureLoader();let surfaceMap=textureLoader.load("./img/earth_surface_2048.jpg");//创建颜色贴图let normalMap=textureLoader.load("./img/earth_normal_2048.jpg");//创建法线贴图let specularMap=textureLoader.load("./img/earth_specular_2048.jpg");//创建高光贴图let material=new THREE.MeshPhongMaterial({map:surfaceMap,normalMap:normalMap,specularMap:specularMap});cube=new THREE.Mesh(geometry,material);//将几何体和材料放到网格中cube.rotation.x=Math.PI/5;group.add(cube);let cloudGeometry=new THREE.SphereGeometry(1.005,32,32);//创建大气层所在的球面let cloudMap=textureLoader.load("./img/earth_clouds_1024.png");let cloudMaterial=new THREE.MeshLambertMaterial({color:0xffffff,map:cloudMap,transparent:true});cloudMesh=new THREE.Mesh(cloudGeometry,cloudMaterial);group.add(cloudMesh);scene.add(group);//把群组添加到场景中renderer=new THREE.WebGLRenderer({antialias:true});renderer.setPixelRatio(window.devicePixelRatio);renderer.setSize(container.offsetWidth,container.offsetHeight);container.appendChild(renderer.domElement);let contorl=new OrbitControls(camera,renderer.domElement);//添加鼠标滚动缩放,旋转对象}function run() {requestAnimationFrame(run);cloudMesh.rotation.y+=0.0002;cube.rotation.y+=0.0005;renderer.render(scene,camera);}</script>
</body>
</html>

threeJS 创建逼真地球相关推荐

  1. threejs 绘制球体_实战:用 threejs 创建一个地球

    原标题:实战:用 threejs 创建一个地球 提示: 讲座 前端大型免费公开课讲座 教程 从零基础学前端教程,都在这~ 上个月底,在朋友圈看到一个号称"这可能是地球上最美的h5" ...

  2. threeJS 创建逼真海洋落日

    本博客参考官方案例 效果图 总体步骤 ① 创建场景 ② 创建相机 ③创建渲染器 ④ 创建物体 ⑤ 创建status和OrbitControls html代码 <!DOCTYPE html> ...

  3. html5仿腾讯,高仿腾讯QQ Xplan(X计划)的H5页面(1):threejs创建地球

    上个月底,在朋友圈看到一个号称"这可能是地球上最美的h5"的分享,点进入后发现这个h5还很别致,思考了一会,决定要不高仿一个? 到今天为止,高仿基本完成, 除了手机端的media控 ...

  4. Threejs实现3d地球记录(3)

    (2).对等距点集进行三角剖分生成Mash 我将三角剖分可以简单理解为以最接近的三点形成三角形,且各线段(三角形的边)皆不相交:这里使用开源库delaunator进行点的三角剖分 // polygon ...

  5. Threejs实现绘制地球,地理位置标注、经纬度转换世界坐标threejs坐标

    1,介绍 该示例使用的是 r95版本Three.js库. 主要实现功能:绘制地球和地理位置进行标注 效果图如下: 2,主要说明 准备一张地图,创建一个球体并进行贴图,把地理位置经纬度转换成threej ...

  6. Blender2.9全流程创建逼真未来科幻蝙蝠汽车视频教程

    Blender2.9全流程创建逼真未来科幻蝙蝠汽车视频教程 MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2通道 含课程工程素材 体裁:在线学习|语言:英语+中文字幕( ...

  7. threejs创建平面几何形状

    创建平面几何形状 平面几何形状有三种:点,线,面三种,下面说说用threejs创建这几种形状的方法. 创建点 创建点可以使用Points类. function createPoints(){//创建一 ...

  8. photoshop使用技巧_如何使用Photoshop创建逼真的漫画

    photoshop使用技巧 Even if you don't have much drawing talent, it's surprisingly easy to create a photore ...

  9. threejs创建3d交互地图

    文章目录 前言 关键点 源码 总结 前言 基于react-hooks创建的三维地图,只实现了基本的交互展示,可根据个人喜好增加各种交互和展示效果,效果如下. 关键点 使用threejs创建3d地图注意 ...

最新文章

  1. 哈啰程序员吐槽:试用期带5个人创造了部门历史最高成绩,结果却被辞退
  2. 分享笔趣阁、宜搜等小说免费API接口
  3. 53帧变900帧!AI让你不用昂贵的高速摄像机也能制作慢镜头,来自华为|CVPR 2021...
  4. 织梦添加搜索框里的提示消息
  5. Java实现HashTable的基本操作
  6. razor 怎样使用session变量_Nginx负载均衡解决session一致性问题
  7. 用Delphi创建服务程序
  8. cookies和session
  9. 搞定常见垃圾收集器【Java】
  10. SAP Cloud Platform上的WebIDE fullstack在哪里打开
  11. TCP三次握手和四次挥手过程
  12. (42)根据时钟关系分类时钟
  13. pcb成型板aoi检测_smt贴片加工打样的检测设备
  14. 代码管理_阿里巴巴如何管理代码分支?
  15. 超快的前端引擎——artTemplate-3.0
  16. 用indesign怎么更换名牌姓名_北京怎么脱单?来北京相亲会,哪里有单身交友聚会?户外交友活动...
  17. vb连接odbc连接mysql数据库_vb6通过ODBC连接mysql数据库
  18. 10款精美的web前端源码的特效
  19. win7计算机扫描仪,win7系统怎么用打印机扫描仪功能|win7系统扫描仪功能的使用方法...
  20. ksearch系统开发过程中遇到的KFC性能问题

热门文章

  1. python情感分析中文_Python有趣|中文文本情感分析
  2. cdn刷新api_缓存刷新与查询
  3. 微信小程序基于最新版1.0开发者工具分享-小试牛刀(视频) 发布流程
  4. 冠军联赛:当火焰变成焰火 海水变成泪水
  5. SAP HANA Temporal Table (历史表)
  6. 完成静态服务器——Node.js摸石头系列之四
  7. 汇编——从一道题目浅谈分支结构
  8. 短诗整理1——奋进+惜时
  9. oracle gi和gc的区别,gl值(gi值跟gl值有什么区别)
  10. 【攻防世界-Web简单篇】