three.js如何实现简易3D机房?(一)基础准备-上

目录

一、tips

二、功能说明

1.模型初始化 

 2.功能交互

三、初始化准备

1.目录结构

2.创建三要素 

3.创建轨道控制器

4.初始化灯光 

5.适配

6.循环渲染


一、tips

1.three.js入门的相关基础性知识就不在此过多赘述了,可以自行提前了解

three.js docs:官网 

Three.js中文网 :有教程有案例,还有免费学习视频(当然也有收费的部分,可以根据自己情况来定,不过个人觉得看文档就够了,在实际项目中学习成长的更快),内容很多可以自行探索,对于刚接触three.js的小伙伴非常友好,有很多实用的避坑教程

2.本教程不包括如何自建机房模型,只有模型相关交互内容,(其他图表的展示是通过定位实现的,这里也不做赘述),因为项目比较小,功能交互相对也很简单,只能说是入门,最后实现的效果算是勉强看的过去,用到的模型是公司相关同事为项目量身定制的,建议可以自己找类似模型练习,个人不方便分享哈~

相关模型下载以及学习教程地址推荐:

3D模型gltf下载网站(threejs开发) | Three.js中文网

麒跃科技_老陈打码-让学习更简单!

二、功能说明

1.模型初始化 

默认显示报警设备的信息,正常设备按照顺序3s轮换展示

 2.功能交互

点击选中设备,添加选中效果并显示当前选中设备的信息

三、初始化准备
1.目录结构

此目录是我实际项目(vue3+ts)文件目录,没时间单独拆开写demo,其他多余文件自行忽略

2.创建三要素 

在threeD-init.js文件中:

// 引入three.js
import * as THREE from 'three';
export let scene, camera, renderer, width, height,

// 1.初始化三要素
export function init (dom) {
  scene = new THREE.Scene();
  // 设置场景颜色
  scene.background = new THREE.Color(0x001c55)
  camera = new THREE.PerspectiveCamera(25, width / height, 1, 1000);
  // 移动相机位置
  camera.position.set(0, 0, 80);
  camera.lookAt(new THREE.Vector3(0, 0, 0));
  // 添加抗锯齿效果
  renderer = new THREE.WebGLRenderer({ antialias: true, logarithmicDepthBuffer: true, });
  // 给画布设置宽高
  renderer.setSize(width, height);
  // document.body.appendChild(renderer.domElement);
  dom.appendChild(renderer.domElement);
}

注意:

(1)当3D内容是全屏展示时

  width = window.innerWidth;
  height = window.innerHeight;
  document.body.appendChild(renderer.domElement);

(2)当3D内容是局部div时

  width = dom.offsetWidth;
  height = dom.offsetHeight;
  dom.appendChild(renderer.domElement);
3.创建轨道控制器

在threeD-init.js文件中:具体属性配置可参考文档根据实际开发要求调整

// 导入附加组件-轨道控制器
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
export let controls

// 2.创建轨道控制器
export function createControls () {
  controls = new OrbitControls(camera, renderer.domElement);
  // 开启阻尼惯性
  controls.enableDamping = true;
  // 阻尼速度
  controls.dampingFactor = 0.1;
  // 开启旋转
  // controls.autoRotate = true;
  // 旋转的速度
  // controls.autoRotateSpeed = 1;
  // 视角最小距离
  // controls.minDistance = 20;
  // 视角最远距离
  // controls.maxDistance = 5000;
  // 最大角度
  controls.maxPolarAngle = Math.PI / 3;
}
4.初始化灯光 

在threeD-init.js文件中:

// 3.初始化灯光
export function initLight () {
  //模拟远处类似太阳的光源
  const directionalLight = new THREE.DirectionalLight(0xffffff, 1); 
  directionalLight.position.set(3, 500, 10).normalize();
  scene.add(directionalLight);
  //影响整个场景的光源
  const ambient = new THREE.AmbientLight(0xffffff, 1);
  ambient.position.set(0, 500, 10);
  scene.add(ambient);
}
5.适配

在threeD-init.js文件中:

官网其实只给了适配浏览器大小的示例,但在实际项目中适配效果还是差了一点儿,我自己又另外加了一个监听div尺寸变化的适配,大家可以根据实际情况自行取用

// 5.1监听div的尺寸变化(是否全屏)
export const watchDom = (dom) => {
  let ro = new ResizeObserver(() => {
    updateRelatedProperties(dom)
  });
  ro.observe(dom);
};

// 5.2监听浏览器窗口的缩放
export function renderResize (dom) {
  window.addEventListener('resize', () => {
    updateRelatedProperties(dom)
  });
}

function updateRelatedProperties (dom) {
  getDomInfo(dom);
  // 更新画布宽高
  renderer.setSize(width, height);
  // 更新相机的宽高比
  camera.aspect = width / height;
  // 更新相机的近截面和远截面
  camera.updateProjectionMatrix();
}
6.循环渲染

在threeD-init.js文件中:

// 6.循环渲染
export function renderLoop () {
  requestAnimationFrame(renderLoop);
  // 实时更新性能
  controls.update();
  css3DRenderer.render(scene, camera);
  renderer.render(scene, camera);
}

未完待续。。。(下班啦,明天继续更) 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PyTorch深度学习实战(38)——StyleGAN详解与实现

PyTorch深度学习实战(38)——StyleGAN详解与实现 0. 前言1. StyleGAN1.1 模型介绍1.2 模型策略分析 2. 实现 StyleGAN2.1 生成图像2.2 风格迁移 小结系列链接 0. 前言 StyleGAN (Style-Generative Adversarial Networks) 是生成对抗网络 (Generative Ad…

基于Docker部署本地ChatGPT环境

基于Docker部署本地ChatGPT环境 一、拉取镜像 docker pull pengzhile/pandora二、运行镜像 docker run -e PANDORA_CLOUDcloud -e PANDORA_SERVER0.0.0.0:8899 -p 8899:8899 -d pengzhile/pandora三、查看容器是否启动成功 docker ps四、登录 http://IP:8899 这里有两种方…

原始手写helloworld并打jar包允许

1.创建文件夹test统一在其中操作 2.创建hello.java文件 【hello.txt改属性为hello.java】并在里面添加代码 public class hello {public static void main(String[] args) {System.out.println("hello world");} } 注意:类名与文件名一致 然后运行…

使用AI创建令人惊叹的3D模型

老子云平台《《《《《 使内容创作者能够在一分钟内毫不费力地将文本和图像转换为引人入胜的 3D 资产。 文本转 3D 我们的文本转 3D 工具使创作者(包括那些没有 3D 经验的创作者)能够使用文本输入在短短一分钟内生成 3D 模型。 一句话生成3D模型 老子…

FPGA-VGA成像原理与时序

什么是VGA: VGA, Video Graphics Array。即视频图形阵列,具有分辨率高、显示速率快、颜色丰富等优点。VGA接口不但是CRT显示设备的标准接口,同样也是LCD液晶显示设备的标准接口,具有广泛的应用范围。在FGPA中,常广泛用于图像处理等领域。 VGA 显示器成像原理 在 VGA 标准刚兴…

Material UI 5 学习02-其它按钮组件

Material UI 5 学习02-其它按钮组件 一、IconButton按钮二、 ButtonGroup按钮组1、最基本的实例2、垂直按钮组 一、IconButton按钮 图标按钮通常适用于切换按钮&#xff0c;允许选择或选择单个选项 取消选择&#xff0c;例如在项目中添加或删除星号。 <IconButton aria-lab…

docker pull 拉取失败,设置docker国内镜像

遇到的问题 最近在拉取nginx时&#xff0c;显示如下错误&#xff1a;Error response from daemon: Get “https://registry-1.docker.io/v2/”: net/http: request canceled (Client.Timeout exceeded while awaiting headers)。 这个的问题是拉取镜像超时&#xff0c;通过检索…

RISC-V特权架构 - 机器模式下的异常处理

RISC-V特权架构 - 机器模式下的异常处理 1 进入异常1.1 从mtvec 定义的PC 地址开始执行1.2 更新CSR 寄存器mcause1.3 更新CSR 寄存器mepc1.4 更新CSR 寄存器mtval1.5 更新CSR 寄存器mstatus 2 退出异常2.1 从mepc 定义的PC 地址开始执行2.2 更新CSR 寄存器mstatus 3 异常服务程…

Docker Protainer可视化平台,忘记登录密码,重置密码。

由于好久没有登录portainer系统&#xff0c;导致忘记了登录密码&#xff0c;试了好多常用的密码都不对&#xff0c;无奈只能重置密码。 一、停止protainer 容器 查看容器ID和COMMAND 用于停止容器 docker ps -a停止容器 docker stop portainer二、查找volume data 宿主机所在…

脉冲电阻器负载、功率和电压降额,选型分析

本文讨论了关键的电阻脉冲负载、功率和电压降额参数&#xff0c;这些参数对于正确选择指南和可靠运行这些无源元件非常重要。 EAK脉冲负载 在许多应用中&#xff0c;电阻器将承受脉冲负载。我们区分周期性/重复性负载和脉冲序列;一方面&#xff0c;脉冲以一定频率重复&#xff…

Spring中最常用的11个扩展点

前言 我们一说到spring&#xff0c;可能第一个想到的是 IOC&#xff08;控制反转&#xff09; 和 AOP&#xff08;面向切面编程&#xff09;。 没错&#xff0c;它们是spring的基石&#xff0c;得益于它们的优秀设计&#xff0c;使得spring能够从众多优秀框架中脱颖而出。 除…

Thingsboard本地源码部署教程

本章将介绍ThingsBoard的本地环境搭建&#xff0c;以及源码的编译安装。本机环境&#xff1a;jdk11、maven 3.6.2、node v12.18.2、idea 2023.1、redis 6.2 环境安装 开发环境要求&#xff1a; Jdk 11 版本 &#xff1b;Postgresql 9 以上&#xff1b;Maven 3.6 以上&#xf…

PaddleOCR CPU 文本文字识别 docker部署

需求&#xff1a; 需要把所有滑块图片的数据文字提取出来 启动服务 mkdir paddle cd paddle docker run -itd --name ppocr -v $PWD:/paddle --networkhost -it registry.baidubce.com/paddlepaddle/paddle:2.1.3-gpu-cuda10.2-cudnn7 /bin/bash docker exec -it ppocr bash …

深入理解Tomcat

目录&#xff1a; TomcatTomcat简介如何下载tomcatTomcat工作原理Tomcat架构图Tomcat组件Server组件Service组件Connector组件Engine组件Host组件Context组件 配置虚拟主机(Host)配置Context Tomcat Tomcat简介 Tomcat服务器是Apache的一个开源免费的Web容器。它实现了JavaEE…

mysql学习笔记7——数据库查询深入

.sql文件 在实际使用数据库时&#xff0c;常常要对数据库文件进行备份&#xff0c;以便在数据库遭到入侵或者非人为因素导致损坏后&#xff0c;快速恢复数据 .sql文件便提供了这种功能&#xff0c;首先.sql文件是由一串串mysql指令组成的&#xff0c;我们插入.sql文件实际相当…

5G工业智能网关保障煤矿安全生产

随着物联网技术发展与煤矿需求的持续激增&#xff0c;矿山矿井的分布范围广泛、户外环境恶劣等管理问题急需解决&#xff0c;而物联网网关工业级设计能够无惧恶劣环境干扰&#xff0c;轻松解决户外网络部署问题。 工业网关通过采集矿井内的各类传感器数据对矿井进行远程监控&a…

[C#]winform部署yolov9的onnx模型

C# WinForms 部署 YOLOv9 ONNX 模型简介 在当今的计算机视觉领域&#xff0c;目标检测是不可或缺的一项技术。YOLO&#xff08;You Only Look Once&#xff09;系列模型以其高效和准确的特点受到了广泛关注。随着YOLOv9的发布&#xff0c;其性能进一步提升&#xff0c;为实际应…

在全志V853平台上成功部署深度学习步态识别算法

北理工通信课题组辛喆同学在本科毕业设计《基于嵌入式系统的步态识别的研究》中&#xff0c;成功将深度步态识别算法GaitSet移植到全志V853开发板上。本研究在CASIA-B数据集上进行测试&#xff0c;正常行走状态下该系统的步态识别准确率达到了94.9%&#xff0c;背包行走和穿外套…

C++输入输出(I\O)

我们知道C是由C语言发展而来的&#xff0c;几乎完全兼容C语言&#xff0c;换句话说&#xff0c;你可以在C里面编译C语言代码。如下图: C语言是面向过程的语言&#xff0c;C在C语言之上增加了面向对象以及泛型编程机制&#xff0c;因此C更适合中大型程序的开发&#xff0c;然而C…

基于MVO优化的Bi-LSTM多输入时序预测(Matlab)多元宇宙算法优化长短期神经网络时序预测

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译&am…