【案例】3D地球(vue+three.js)

news2025/2/27 20:59:04

在这里插入图片描述

需要下载插件
在这里插入图片描述

<template>
    <div class="demo">
        <div id="container" ref="content"></div>
    </div>
</template>
<script>
import * as THREE from 'three';
// import mapJSON from '../map.json';
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls";
export default {
  // components :{  CoolEarth},
  data() {
    return {
      // 创建一个场景
      scene: null,
      // 创建一个相机
      camera: null,
      // 创建一个渲染器
      renderer: null,
      // 模型对象
      mesh: null,
      // 平面
      plane: null,
      // 点光源
      point: null,
      // step
      step: 0,
      controls: null,
      starsGeometry: null,
    }
  },
  mounted() {
    // this.Earth_3D();
    this.init();
  },
  methods: {
    // 初始化
    init() {
        // 初始化容器
        var content = this.$refs.content;
        // 创建一个场景
        this.scene = new THREE.Scene();
        
        
        this.scene.background = new THREE.Color("#000000");
//         const positions = [];
// var colors = [];
// var geometry = new THREE.BufferGeometry();
// for (var i = 0; i < 100; i ++) {
//   var vertex = new THREE.Vector3();
//   vertex.x = Math.random() * 2 - 1;
//   vertex.y = Math.random() * 2 - 1;
//   // vertex.z = Math.random() * 2 + 1;
//   positions.push( vertex.x, vertex.y, );
//   var color = new THREE.Color();
//   color.setHSL( Math.random() * 0.2 + 0.5, 0.55, Math.random() * 0.25 + 0.55 );
//   colors.push( color.r, color.g, color.b );
// }
// geometry.setAttribute( 'position', new THREE.Float32BufferAttribute( positions, 3 ) );
// geometry.setAttribute( 'color', new THREE.Float32BufferAttribute( colors, 3 ) );

        // 创建几何体
        var geometry = new THREE.SphereGeometry(30, 50, 50);
        
        // // 纹理加载器 ( 此处加载贴图 )
        var texture = new THREE.TextureLoader().load(require('@/assets/earth3.jpg'));
        // 发光地球
        // let lightTexture = new THREE.TextureLoader().load("@/assets/earth.jpg");
        // let lightEarthGeometry = new THREE.SphereGeometry(53, 30, 28);
        // let lightEarthMaterial = new THREE.MeshBasicMaterial({
        //   map: lightTexture,
        //   alphaMap: lightTexture,
        //   blending: THREE.AdditiveBlending,
        //   transparent: true,
        // });

        // let lightEarth = new THREE.Mesh(lightEarthGeometry, lightEarthMaterial);
        // this.scene.add(lightEarth);
        
        //  光环
        // var huan = new THREE.TextureLoader().load( '@/assets/00.jpg' );
        // var spriteMaterial = new THREE.SpriteMaterial( {
        //   map: huan,
        //   transparent: true,
        //   opacity: 0.5,
        //   depthWrite: false
        // } );
        // var sprite = new THREE.Sprite( spriteMaterial );
        // sprite.scale.set( 5 * 3, 5 * 3, 1 );
        // this.scene.add( sprite );
        
        // 几何体材质对象
        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( 60, window.innerWidth / window.innerHeight, 1,  1000 );
        this.camera.position.set(100, 100, 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);
        console.log("1111",OrbitControls)
        this.controls = new OrbitControls(this.camera, this.renderer.domElement);
        
        this.controls.addEventListener("resize", this.render(), false);

        this.createLight();
        
    },

    render() {
        this.renderer.render(this.scene, this.camera);
        // 自动旋转动画
        this.mesh.rotateY(0.002);
        requestAnimationFrame(this.render);
    },
    // 创建灯光
    createLight() {
      this.light = new THREE.DirectionalLight({
        color: 'blue'
      })
      this.light.position.set(100, 100, 100)
      this.scene.add(this.light)
    },
    Earth_3D() {
      const scene = new THREE.Scene();
      const camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );
      const renderer = new THREE.WebGLRenderer();
      renderer.setSize( window.innerWidth, window.innerHeight );
      document.body.appendChild( renderer.domElement );
      const geometry = new THREE.BoxGeometry( 1,1,1 );
      const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
      const cube = new THREE.Mesh( geometry, material );
      scene.add( cube );

      camera.position.z = 5;

      function animate() {
        requestAnimationFrame( animate );
        renderer.render( scene, camera );
      }
      animate();
      cube.rotation.x += 0.01;
      cube.rotation.y += 0.01;

    },
  }
}
</script>
<style scoped>

</style>

有人找不到合适的地球平面图的话,可直接地球平面图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1158339.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【笔记】Arrays.binarySearch()实践,以及需要注意的一些问题点

背景&#xff1a;我想校验一个指定的String字符串&#xff0c;是否存在于另一个String数组中&#xff0c;选择Arrays.binarySearch()方法实现&#xff0c;代码如下&#xff1a; String[] item {"0","1","16","1591","1594"…

Java程序员面试核心知识--Java基础知识(一)

目录 一、Java程序初始化顺序 二、Java的Clone方法作用 三、 OverLoad&#xff08;重载&#xff09;与Override&#xff08;重写&#xff09;区别 四、abstract class&#xff08;抽象类&#xff09;与interface&#xff08;接口&#xff09;的异同 五、String、StringBuf…

行业追踪,2023-11-01

自动复盘 2023-11-01 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

【腾讯云 HAI域探秘】宝妈也能快速入门AI绘画

活动背景 本次活动是由腾讯云和CSDN联合推出的开发者技术实践活动。我通过技术交流直播、动手实验、征文等形式&#xff0c;深入沉浸式体验腾讯云高性能应用服务 HAI。从活动中汲取到技术上的精华。在本次活动中&#xff0c;只要完成各个环节任务&#xff0c;不仅可以参与 AIGC…

嵌入式每日500(2)231102 (GPIO外设)

文章目录 1.GPIO外设介绍&#xff08;老生常谈的那些东西&#xff09;2.GPIO的寄存器&#xff08;9个&#xff09;3.GPIO的类型定义&#xff08;结构体和枚举&#xff09;4.GPIO常量定义&#xff08;GPIO_PIN,GPIO_MODE,GPIO_SPEED,GPIO_PULL&#xff09;5.GPIO函数定义&#x…

echarts 画散点图, x周,y周在指定位置标志一下

文章目录 echarts 画散点图&#xff0c; x周&#xff0c;y周在指定位置标志一下示例一例子二示例三 echarts 画散点图&#xff0c; x周&#xff0c;y周在指定位置标志一下 示例一 let scatterData {data: [[[-0.2, -0.6],[0.4, 0.3],[0.1, 0.4],[0.3, 0.5],[0.09, 0.1],[0.7,…

仿东郊到家按摩小程序app开发搭建

最新版的仿东郊到家按摩小程序&#xff0c;支持上门服务系统&#xff0c;全开源&#xff0c;并且支持公众号、小程序和app。前端使用uniapp&#xff0c;后端使用php&#xff0c;价格合理。用户端功能模块包括技师选择、预约服务、优惠券、订单等&#xff0c;还有意见功能和城市…

Java多线程篇(13)——FutureTask、Disruptor的使用

文章目录 FutureTaskCompletionServiceCompletableFuture DisruptorDisruptor 核心概念运行流程不同生产者模式的区别Disruptor设计精髓 FutureTask 现有一个场景&#xff0c;10个线程执行10个任务&#xff0c;然后主线程获取任务结果。 比较广泛的一个说法就是&#xff0c;r…

代码随想录算法训练营第三十九天丨 动态规划part02

62.不同路径 思路 动态规划 机器人从(0 , 0) 位置出发&#xff0c;到(m - 1, n - 1)终点。 按照动规五部曲来分析&#xff1a; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i][j] &#xff1a;表示从&#xff08;0 &#xff0c;0&#xff09;出发&#…

【每日一题】参加会议的最多员工数

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;内向基环树拓扑排序分类讨论内向基环树分类讨论基环长度大于 2基环长度等于 2 功能实现 写在最后 Tag 【内向基环树拓扑排序分类讨论】【图】【2023-11-01】 题目来源 2127. 参加会议的最多员工数 题目解读 员工只有…

阿昌教你如何优雅的数据脱敏

阿昌教你如何优雅的数据脱敏 Hi&#xff0c;我是阿昌&#xff0c;最近有一个数据脱敏的需求&#xff0c;要求用户可自定义配置数据权限&#xff0c;并对某种类型数据进行脱敏返回给前端 一、涉及知识点 SpringMVCJava反射Java自定义注解Java枚举 二、方案选择 1、需求要求…

呼叫中心的重要考核指标

呼叫中心在运营过程中越来越精细化&#xff0c;在信息化管理的时代&#xff0c;呼叫中心系统是必不可少的&#xff0c;而呼叫中心的管理人员为了提升运营效率&#xff0c;通常会根据业务目标设置各种业务的考核指标&#xff0c;而我也根据OKCC在呼叫中心项目运营过程中的经验&a…

【双十一预售】玩得越来越大了...

双十一又又又到了 剁手带来的快乐终究是短暂的 让自己变得更优秀才是长远的快乐 当今大环境 工作难找&#xff0c;钱难赚 只有不断学习与成长 方能应对未来的各种不确定性 知了堂双十一预售 0.11元畅享三大权益 助你快速实现自我提升 突破成长瓶颈 https://appyqk1x…

1. 网络之网络通信基础

网络通信基础 文章目录 网络通信基础1. IP地址2. 端口号3. 协议3.1 三要素3.2 作用 4. 五元组5. 协议分层5.1 OSI七层模型5.2 TCP/IP 五层模型5.2.1 应用层5.2.2 传输层5.2.3 网络层5.2.3 数据链路层5.2.5 物理层 6. 封装和分用6.1 发送方 - 封装6.2 中间转发6.3 接收方 - 分用…

codeMirror代码编辑器,如何定位并在编辑区域输入内容

背景 最近在写UI自动化&#xff0c;发现普通的方法不能在CodeMirror编辑器里面输入内容&#xff0c;只能通过JS的方式输入内容。 于是琢磨了一下selenium和playwright这2种自动化工具&#xff0c;在CodeMirror编辑器里面输入内容的差别。 注意&#xff1a;这里在定位CodeMirr…

轧钢厂安全生产方案:AI视频识别安全风险智能监管平台的设计

一、背景与需求 轧钢厂一般都使用打包机对线材进行打包作业&#xff0c;由于生产需要&#xff0c;人员需频繁进入打包机内作业&#xff0c;如&#xff1a;加护垫、整包、打包机检修、调试等作业。在轧钢厂生产过程中&#xff0c;每个班次生产线材超过300件&#xff0c;人员在一…

【OpenCV实现图像找到轮廓的不同特征,就像面积,周长,质心,边界框等等。】

文章目录 概要图像矩凸包边界矩形 概要 OpenCV是一个流行的计算机视觉库&#xff0c;它提供了许多图像处理和分析功能&#xff0c;其中包括查找图像中物体的轮廓。通过查找轮廓&#xff0c;可以提取许多有用的特征&#xff0c;如面积、周长、质心、边界框等。 以下是几种使用…

双目视觉检测 KX02-SY1000型测宽仪 有效修正和消除距离变化对测量的影响

双目视觉检测的基本原理 利用相机测量宽度时&#xff0c;由于单个相机在成像时存在“近大远小”的现象&#xff0c;并且单靠摄入的图像无法知道被测物的距离&#xff0c;所以由被测物的跳动导致的被测物到工业相机之间距离变化&#xff0c;使测量精度难以提高。 因此测宽仪需…

Vue项目创建与启动(2023超详细的图文教程)

目录 一、下载node.js 二、下载vue-cli与webpack插件 三、项目初始化(项目配置详细信息) 四、项目启动 五、Vue项目工程结构&#xff08;扩展知识&#xff09; 一、下载node.js 1.检测是否已经安装过node.js 打开控制台,输入 npm -v如果有会显示对应版本 如果没有会显示…

RocketMQ消费者和队列对应关系

参考 RocketMQ 5.0 POP 消费模式探秘 https://www.cnblogs.com/alisystemsoftware/p/15535925.html 旧版本MQ结论 消费者应用和topic队列一对多的关系。 &#xff08;一个消费组consumer group里&#xff0c;一个消费者应用可以消费多个队列的消息。一个队列的消息只能被一个…