当前位置: 首页 > news >正文

【Three.js + Vue 构建三维地球-Part One】

Three.js + Vue 构建三维地球-Part One

  • Vue 初始化部分
    • Vue-cli 安装
    • 初始化 Vue 项目
      • 调整目录结构
  • Three.js 简介
    • Three.js 安装与开始使用

实习的第一个任务是完成一个三维地球的首屏搭建,看了很多的案例,也尝试了用 Echarts 3D地球的模型进行构建,

发现地球部分的很多动画例如卫星环绕动画、光源变化、纹理调整等内容都难以实现,所以选择Three.js 来进行三维地球的开发,通过 Vue-router 来实现页面的跳转,然后用 DataV 组件做了首页的一些布局,更显科技感

由于地球本身只进行展示,不涉及与其他页面的数据交互,所以没有使用 Vuex 。

技术栈:Vue(2.6.14) + Three.js(0.155.0) + Vue router(3.5.1)

Vue 初始化部分

首先通过 Vue-cli 初始化项目,没有安装的朋友可以通过下面命令安装最新版本

Vue-cli 安装

npm install -g @vue/cli
# OR
yarn global add @vue/cli

初始化 Vue 项目

初始化项目的命令为:

vue create project-name
# OR
vue ui

初始化过程记得把 Babel 、Vue router、ESlint 这些内容勾选上,如无意外的话就会得到下面这样一个目录

各个目录的作用和内容如图所示,接下来就是开始作目录精简,将没用的删除掉。
在这里插入图片描述

调整目录结构

  1. 将 assets 下的内容全部删除
  2. components 下的内容全部删除
  3. App.vue 只保留项目模板,内容一样删掉
  4. 添加 utils 目录,用来存放一些工具

这样就完成了初步的项目构建

Three.js 简介

Three.js是一款基于原生WebGL封装通用Web 3D引擎,在小游戏、产品展示、物联网、数字孪生、

智慧城市园区、机械、建筑、全景看房、GIS等各个领域基本上都有three.js的身影

Three.js 安装与开始使用

要安装three 的 npm 模块,请在你的项目文件夹里打开终端窗口,运行:

npm install three

完成安装之后就可以在 main.js 进行导入

// 方式 1: 导入整个 three.js核心库
import * as THREE from 'three';const scene = new THREE.Scene();// 方式 2: 仅导入你所需要的部分
import { Scene } from 'three';const scene = new Scene();

想要让你的场景按照你的需求进行展示,首先你需要知道 Three.js 中的场景、相机和渲染器,然后通
过相机看到我们渲染的场景。

// 创建场景
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 );

three.js里有几种不同的相机,在这里,我们使用的是PerspectiveCamera(透视摄像机)。

第一个参数是视野角度(FOV)。视野角度就是无论在什么时候,你所能在显示器上看到的场景的范
围,它的单位是角度(与弧度区分开)。

第二个参数是长宽比(aspect ratio)。 也就是你用一个物体的宽除以它的高的值。比如说,当你在一个宽屏电视上播放老电影时,可以看到图像仿佛是被压扁的。

接下来的两个参数是近截面(near)和远截面(far)。 当物体某些部分比摄像机的远截面远或者比近截面近的时候,该这些部分将不会被渲染到场景中。

接下来是渲染器。除了WebGLRenderer渲染器之外,Three.js同时提供了其他几种渲染器,当浏览器过于老旧,或者由于其他原因不支持WebGL时,可以使用其他渲染器进行降级(具体内容请点击 在线文档 查看)。

除了创建一个渲染器的实例之外,还需要设置渲染器的尺寸。比如说,我们可以使用所需要的渲染区域的宽高,来让渲染器渲染出的场景填充满我们的应用程序。

如果你希望保持你的应用程序的尺寸,但是以较低的分辨率来渲染,你可以在调用setSize时,将updateStyle(第三个参数)设为false。例如,假设你的 标签现在已经具有了100%的宽和高,调用setSize(window.innerWidth/2, window.innerHeight/2, false)将使得你的应用程序以一半的分辨率来进行渲染。

最后,将renderer(渲染器)的dom元素(renderer.domElement)添加到HTML文档中。这就是渲染器用来显示场景给我们看的元素。

相关文章:

【Three.js + Vue 构建三维地球-Part One】

Three.js Vue 构建三维地球-Part One Vue 初始化部分Vue-cli 安装初始化 Vue 项目调整目录结构 Three.js 简介Three.js 安装与开始使用 实习的第一个任务是完成一个三维地球的首屏搭建,看了很多的案例,也尝试了用 Echarts 3D地球的模型进行构建&#xf…...

Power View

界面 切换可视化效果 对于已经上传到透视表的数据,选择power view,形成表格后。...

SQL查询本年每月的数据

--一、以一行数据的形式,显示本年的12月的数据,本示例以2017年为例,根据统计日期字段判断,计算总和,查询语句如下:selectsum(case when datepart(month,统计日期)1 then 支付金额 else 0 end) as 1月, sum…...

C++之struct和union对比介绍

C之struct和union对比介绍 在C中,struct和union都是用来定义自定义数据类型的关键字,但它们的作用略有不同。 首先了解一下它们的基本概念: struct(结构体):struct 是一个用户自定义的数据类型&#xff…...

微服务--SkayWalking(链路追踪:国产开源框架)

SkayWalking:分布式系统的应用程序性能监视工具 作用:分布式追踪、性能指标分析、应用、服务依赖分析; SkayWalking性能剖析: 我操,能够定位到某一个方法会有多慢。。。 通过Tid查看全局所有的日志信息&#xff08…...

在Windows 10上部署ChatGLM2-6B:掌握信息时代的智能对话

在Windows 10上部署ChatGLM2-6B:掌握信息时代的智能对话 硬件环境ChatGLM2-6B的量化模型最低GPU配置说明准备工作ChatGLM2-6B安装部署ChatGLM2-6B运行模式解决问题总结 随着当代科技的快速发展,我们进入了一个数字化时代,其中信息以前所未有的…...

LRU和LFU算法的简单实现

LRU #include <iostream> #include <unordered_map> #include <list> struct Node{int key;int value;Node(int key, int value):key(key),value(value){} }; class LruCache{ private:int maxCapacity;// 最大容量std::list<Node>CacheList;// 缓存链…...

OCR多语言识别模型构建资料收集

OCR多语言识别模型构建 构建多语言识别模型方案 合合&#xff0c;百度&#xff0c;腾讯&#xff0c;阿里这四家的不错 调研多家&#xff0c;发现有两种方案&#xff0c;但是大多数厂商都是将多语言放在一个字典里&#xff0c;构建1w~2W的字典&#xff0c;训练一个可识别多种语…...

倍增的经典题目:扩大区间、st表

1. 扩大区间 P4155 [SCOI2015] 国旗计划例题1&#xff1a;P4155 [SCOI2015] 国旗计划 计算能覆盖整个圆圈的最少区间&#xff0c;题目给定的所有区间互相不包含&#xff0c;按区间左端点排序后&#xff0c;区间的右端点也是单增的。 我们首先需要化圆为线&#xff0c;然后贪…...

LeetCode——和为K的子数组(中等)

题目 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的连续子数组的个数 。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2示例 2&#xff1a; 输入&#xff1a;nums [1,2,3], k 3 输出&#xff1a;2 题解 …...

Truncation Sampling as Language Model Desmoothing

本文是LLM系列文章&#xff0c;针对《Truncation Sampling as Language Model Desmoothing》的翻译。 截断采样作为语言模型的去平滑性 摘要1 引言2 背景3 截断作为去平滑性4 方法5 实验与结果6 相关工作7 结论8 不足 摘要 来自神经语言模型的长文本样本可能质量较差。截断采…...

docker安装jenkins

运行jenkins docker run -d \--name jenkins \ --hostname jenkins \-u root \-p 29090:8080 \--restart always \-v D:\springcloud\学习\jekins\jenkins\jks_home:/var/jenkins_home \ jenkins/jenkins获取root登录密码 密码在jekins_home/secrets/initalAdminPassword文件…...

学习pytorch8 土堆说卷积操作

土堆说卷积操作 官网debug torch版本只有nn 没有nn.functional代码执行结果 B站小土堆视频学习笔记 官网 https://pytorch.org/docs/stable/nn.html#convolution-layers 常用torch.nn, nn是对nn.functional的封装&#xff0c;使函数更易用。 卷积核从输入图像左上角&#xf…...

pytest自动化测试两种执行环境切换的解决方案

目录 一、痛点分析 方法一&#xff1a;Hook方法pytest_addoption注册命令行参数 1、Hook方法注解 2、使用方法 方法二&#xff1a;使用插件pytest-base-url进行命令行传参 一、痛点分析 在实际企业的项目中&#xff0c;自动化测试的代码往往需要在不同的环境中进行切换&am…...

说说TIME_WAIT和CLOSE_WAIT区别

分析&回答 TCP协议规定&#xff0c;对于已经建立的连接&#xff0c;网络双方要进行四次握手才能成功断开连接&#xff0c;如果缺少了其中某个步骤&#xff0c;将会使连接处于假死状态&#xff0c;连接本身占用的资源不会被释放。网络服务器程序要同时管理大量连接&#xf…...

Docker的优势

Docker是一种开源的容器化平台&#xff0c;提供了一种将应用程序、库和其它依赖项封装在容器中的方法。以下是Docker的基本概念和优势&#xff1a; 基本概念&#xff1a; 镜像&#xff1a;一个Docker镜像是一个可运行的软件包&#xff0c;包括应用程序、库和其它依赖项。它是D…...

C++——string使用

string的常见构造接口 string() 构造空的srting类对象&#xff0c;空字符串 string(const char* str) 用字符串初始化 string(const string& str)拷贝构造&#xff0c;使用string类初始化string(size_t n, char c) 用n个字符c初始化 string s1; string s2("hello …...

10. selenium API (二)

目录 1. 多层框架/窗口定位 2. 下拉框处理 2.1 前端界面 2.2 代码 3. 针对 alert 弹窗进行操作 3.1 前端界面 3.2 代码 4. 文件提交 4.1 前端界面 4.2 代码 5. 显示等待 6. 操作浏览器滚动条 7. 截图 8. 浏览器关闭 9. 窗口切换 在上篇文章中&#xff0c;我们学…...

[国产MCU]-W801开发实例-用户报文协议(UDP)数据接收和发送

用户报文协议(UDP)数据接收和发送 文章目录 用户报文协议(UDP)数据接收和发送1、UDP简单介绍2、W801的UDP创建逻辑2.1 UDP使用步骤2.2 代码实现1、UDP简单介绍 用户数据报协议 (UDP) 是一种跨互联网使用的通信协议,用于对时间敏感的传输,例如视频播放或 DNS查找。它通过在数…...

JavaScript 生成 16: 9 宽高比

这篇文章只是对 for 循环一个简单应用&#xff0c;没有什么知识含量。 可以跳过这篇文章。 只是我用来保存一下我的代码&#xff0c;保存在本地我嫌碍眼&#xff0c;总想把他删了。 正文部分 公式&#xff1a;其中 width 表示宽度&#xff0c;height 表示高度 16 9 w i d t…...

卡证检测矫正模型效果展示:高清四角点定位+正视角矫正图实拍

卡证检测矫正模型效果展示&#xff1a;高清四角点定位正视角矫正图实拍 你有没有遇到过这样的烦恼&#xff1f;需要上传身份证、驾照或者护照照片时&#xff0c;手机随手一拍&#xff0c;结果照片歪歪扭扭&#xff0c;背景杂乱&#xff0c;关键信息还被手指挡住了。这时候要么…...

Qwen-Image-Edit快速入门:上传模糊图片,一键生成高清人像

Qwen-Image-Edit快速入门&#xff1a;上传模糊图片&#xff0c;一键生成高清人像 1. 认识Qwen-Image-Edit图像修复模型 1.1 模型核心能力 Qwen-Image-Edit-2511-Unblur-Upscale是一款专为图像修复设计的AI模型&#xff0c;它能将模糊、低分辨率的人像照片快速转化为高清效果…...

YimMenu终极指南:5大核心功能打造安全的GTA5增强体验

YimMenu终极指南&#xff1a;5大核心功能打造安全的GTA5增强体验 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMe…...

Stable Diffusion Lora训练避坑指南:为什么你的模型总是‘丑’?

Stable Diffusion LoRA训练实战&#xff1a;从“翻车”到精通的避坑手册 每次看到别人分享的精致LoRA模型&#xff0c;再看看自己训练出的"克苏鲁风格"作品&#xff0c;是不是有种砸键盘的冲动&#xff1f;别急着放弃——这可能是你训练流程中几个关键环节出了问题。…...

保姆级教程:在Ubuntu 22.04物理机上,从开启SSH到配置IPv6防火墙的完整流程

Ubuntu 22.04物理机从SSH配置到IPv6防火墙的完整安全指南 当你拿到一台全新的Ubuntu物理机时&#xff0c;如何安全地配置远程访问并启用IPv6连接&#xff1f;本文将带你从零开始&#xff0c;一步步完成从系统初始化到防火墙配置的全过程。无论你是搭建家庭服务器、开发测试环境…...

OpenClaw+GLM-4.7-Flash:研究者的文献收集与分析助手

OpenClawGLM-4.7-Flash&#xff1a;研究者的文献收集与分析助手 1. 为什么需要自动化文献助手 作为一名经常需要查阅大量文献的研究者&#xff0c;我过去每天要花费数小时在不同学术平台间切换——从arXiv到PubMed&#xff0c;再到学校图书馆的订阅期刊。最痛苦的不是阅读本身…...

BiliTools:跨平台B站资源管理工具的全方位应用指南

BiliTools&#xff1a;跨平台B站资源管理工具的全方位应用指南 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持视频、音乐、番剧、课程下载……持续更新 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliToo…...

24小时运行不掉线:OpenClaw+GLM-4.7-Flash监控告警方案

24小时运行不掉线&#xff1a;OpenClawGLM-4.7-Flash监控告警方案 1. 为什么需要自动化监控告警 去年夏天的一个深夜&#xff0c;我负责维护的某个内部服务突然崩溃。直到第二天早上用户反馈才发现问题&#xff0c;整整8小时的服务中断让我意识到&#xff1a;人工巡检存在天然…...

【巴法云】零代码安卓App开发:用App Inventor + MQTT + ESP8266打造智能硬件遥控器

1. 零代码开发智能硬件遥控器的魅力 想象一下&#xff0c;你躺在沙发上发现忘关客厅的灯&#xff0c;这时候掏出手机点一下就能远程关灯&#xff1b;或者夏天回家前提前打开空调&#xff0c;进门就能享受清凉。这些智能家居场景现在用App Inventor 巴法云 ESP8266组合就能轻松…...

GSM-Playground:面向SIM800L硬件深度优化的Arduino蜂窝通信库

1. 项目概述GSM-Playground 是一款面向 Arduino 平台的 GSM 通信扩展库&#xff0c;专为配套硬件模块GSM Playground Shield设计。该库并非通用 AT 指令封装器&#xff0c;而是针对特定 PCB 硬件拓扑、电平转换逻辑、电源管理时序及外设复用约束进行深度适配的固件层抽象。其核…...