Threejs - 几行代码带你创建三维地球

简介: Threejs - 几行代码带你创建三维地球

需要具备哪些知识 ?

前端开发中的一些基础知识,html,css,javascript

vue 基本用法 (注意: 本实例是基于vue来做的,也可以采用原生js的方式开发,看个人喜好)

先来看下效果吧image.png开发前准备

1. 一张地球全景平面图

image.png2. 搭建一个三维场景,场景中添加网格模型(前面几讲有具体讲到如何搭建一个三维场景以及添加网格模型,添加相机,灯光,渲染器等)

3. 纹理加载器 (TextureLoader


废话就讲到这里了,直接上代码看效果吧


<template>  <div ref="content"></div></template>
<script>// 引入threejsimport * as THREE from "../../public/build/three";//鼠标控制import { OrbitControls } from "../../public/example/jsm/controls/OrbitControls.js";
export default {  components: {},  data() {    return {      // 创建一个场景      scene: null,      // 创建一个相机      camera: null,      // 创建一个渲染器      renderer: null,      // 模型对象      mesh: null,      // 平面      plane: null,      // 点光源      point: null,
      // step      step:0    };  },
  mounted() {    this.init();  },  methods: {    // 初始化    init() {      // 初始化容器      var content = this.$refs.content;
      // 创建一个场景      this.scene = new THREE.Scene();      this.scene.background = new THREE.Color("#000");
      // 创建几何体      var geometry = new THREE.SphereGeometry(30, 50, 50);    // 纹理加载器 ( 此处加载贴图 )    var texture = new THREE.TextureLoader().load(require('./Earth.png'));         // 几何体材质对象      var material = new THREE.MeshLambertMaterial({          map: texture      });
      // 创建网格模型对象      this.mesh = new THREE.Mesh(geometry, material);      //设置几何体位置      this.mesh.position.x = 0;      this.mesh.position.y = 10;      this.mesh.position.z = 0;      this.scene.add(this.mesh);
      // 创建点光源      var point = new THREE.PointLight("#FFF");      point.position.set(40, 200, 30);      this.point = point;      this.scene.add(point);
      const sphereSize = 10;      const pointLightHelper = new THREE.PointLightHelper(point, sphereSize);      this.scene.add(pointLightHelper);
      //创建环境光      var ambient = new THREE.AmbientLight(0x444444);      this.scene.add(ambient);
      // 创建一个相机      this.camera = new THREE.PerspectiveCamera(        70,        window.innerWidth / window.innerHeight,        1,        10000      );      this.camera.position.set(-50, 50, 50);      this.camera.lookAt(0, 0, 0);
      //坐标轴辅助器,X,Y,Z长度30    //   var axes = new THREE.AxesHelper(300);    //   this.scene.add(axes);      // 辅助网格    //   let gridHelper = new THREE.GridHelper(100, 100);    //   this.scene.add(gridHelper);
      // 创建渲染器      this.renderer = new THREE.WebGLRenderer();      this.renderer.setSize(window.innerWidth, window.innerHeight);      this.renderer.setClearColor(0xb9d3ff, 1);      //插入 dom 元素      content.appendChild(this.renderer.domElement);
      let controls = new OrbitControls(this.camera, this.renderer.domElement);      controls.addEventListener("resize", this.render(), false);    },
    render() {      this.renderer.render(this.scene, this.camera);      // 自动旋转动画      this.mesh.rotateY(0.01);      requestAnimationFrame(this.render);    }  }};</script>
<style lang="scss" scoped></style>



废话说的有点多,程序员都喜欢直接看代码,哈哈,不喜勿喷

下一章节我们学啥? 下一章节我们一起来研究下如何加载一个视频纹理渲染吧


相关文章
|
5月前
|
定位技术 数据安全/隐私保护 iOS开发
一文讲清楚地图地理坐标系
一文讲清楚地图地理坐标系
|
定位技术
Threejs实现绘制地球,地理位置标注、经纬度转换世界坐标threejs坐标
Threejs实现绘制地球,地理位置标注、经纬度转换世界坐标threejs坐标
1100 0
Threejs实现绘制地球,地理位置标注、经纬度转换世界坐标threejs坐标
|
20天前
【ShaderToy中图形效果转译到UnityShaderlab案例分享,实现粒子场_ParticleField】
【ShaderToy中图形效果转译到UnityShaderlab案例分享,实现粒子场_ParticleField】
|
11月前
|
前端开发 JavaScript 容器
前端|利用<canvas>画布制作地球轨道
前端|利用<canvas>画布制作地球轨道
179 0
|
11月前
|
JavaScript 前端开发
threejs实战_理解光源
threejs实战_理解光源
92 0
threejs实战_理解光源
|
数据可视化
【视觉基础篇】15 # 如何用极坐标系绘制有趣图案?
【视觉基础篇】15 # 如何用极坐标系绘制有趣图案?
130 0
【视觉基础篇】15 # 如何用极坐标系绘制有趣图案?
从0开发游戏引擎之三维几何体数据类
Shape类只是单纯的形状数据,并不能用具真正的绘制,真正的绘制工作是Gizmo类去做的。该类只是作为Gizmo的一个成员去使用的。Shape的函数只是提供了加工数据的,然后把加工后的数据存下来。不多哔哔了,直接贴代码。原理有空了再详细写。
从0开发游戏引擎之在3D空间中渲染出三维几何体
这个类里面会使用第9章里的三维体数据来调用OpenGL的接口绘制出来对应的形状。几何体绘制类主要是调试使用的,比如想要更直观的看到一个对象身上的碰撞框。绘制的形状非常多,大家直接看代码吧。
Threejs实现宇宙中地球动态展示和卫星绕地运动
Threejs实现宇宙中地球动态展示和卫星绕地运动
782 0
Threejs实现宇宙中地球动态展示和卫星绕地运动
|
前端开发 数据可视化 定位技术
Threejs - 搭建三维场景
Threejs - 搭建三维场景
Threejs - 搭建三维场景