ThreeJs同一个场景多个相机的显示
在threeJs开发数字孪生中,我们正常是需要使用一个相机,画面显示的内容也就是这个相机拍摄到的内容,但是是否可以添加多个相机,可以同时从不同角度观察模型呢,实际上是可以的,不过多个相机的拍摄到的画面肯定需要在多个容器中显示,也就是需要创建多个渲染器,每个渲染器渲染对应的相机拍摄到的画面,下面是代码实现:
假设我们需要从前后左右四个角度查看,那么我们要先定义四个html标签,以便后期展示不同相机的画面:
<div id="container1"></div><div id="container2"></div><div id="container3"></div><div id="container4"></div>
其次需要定义四个相机,并设置在不同的观察角度:
initCamera(){this.camera1 = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 10000);this.camera1.position.set(1000,1000,1000);this.camera1.lookAt(0,0,0)this.camera2 = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 10000);this.camera2.position.set(-1000,1000,-1000);this.camera2.lookAt(0,0,0)this.camera3 = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 10000);this.camera3.position.set(-1000,1000,1000);this.camera3.lookAt(0,0,0)this.camera4 = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 10000);this.camera4.position.set(1000,1000,-1000);this.camera4.lookAt(0,0,0)},
此时需要在场景中添加一个用于观察的模型:
initModel(){const loader = new GLTFLoader()loader.load("/static/model/agv.gltf", (gltf) => {this.model = gltf.scene;scene.add(this.model) // 加入场景})},
再定义四个渲染器,用于分别渲染四个相机中的内容
initRenderer(){this.renderer1 = new THREE.WebGLRenderer({ antialias: true });this.container1 = document.getElementById("container1")this.renderer1.setSize(this.container1.clientWidth, this.container1.clientHeight);this.renderer1.setClearColor('#FFFFFF', 1.0);this.container1.appendChild(this.renderer1.domElement);this.renderer2 = new THREE.WebGLRenderer({ antialias: true });this.container2 = document.getElementById("container2")this.renderer2.setSize(this.container2.clientWidth, this.container2.clientHeight);this.renderer2.setClearColor('#FFFFFF', 1.0);this.container2.appendChild(this.renderer2.domElement);this.renderer3 = new THREE.WebGLRenderer({ antialias: true });this.container3 = document.getElementById("container3")this.renderer3.setSize(this.container3.clientWidth, this.container3.clientHeight);this.renderer3.setClearColor('#FFFFFF', 1.0);this.container3.appendChild(this.renderer3.domElement);this.renderer4 = new THREE.WebGLRenderer({ antialias: true });this.container4 = document.getElementById("container4")this.renderer4.setSize(this.container4.clientWidth, this.container4.clientHeight);this.renderer4.setClearColor('#FFFFFF', 1.0);this.container4.appendChild(this.renderer4.domElement);},
最后为了证实为同一个模型,我们可以将这个模型设置旋转,并不断更新渲染器
initAnimate() {if(this.model){this.model.rotation.y += 0.03;}requestAnimationFrame(this.initAnimate);this.renderer1.render(scene, this.camera1);this.renderer2.render(scene, this.camera2);this.renderer3.render(scene, this.camera3);this.renderer4.render(scene, this.camera4);},
最终就可以实现了;效果如下
四个相机通过四个角度观察模型
相关文章:
ThreeJs同一个场景多个相机的显示
在threeJs开发数字孪生中,我们正常是需要使用一个相机,画面显示的内容也就是这个相机拍摄到的内容,但是是否可以添加多个相机,可以同时从不同角度观察模型呢,实际上是可以的,不过多个相机的拍摄到的画面肯定…...
Vue基础篇
Vue Vue是一套用于构建用户界面的渐进式JavaScript框架 什么是渐进式? Vue可以自底向上逐层地应用; 当构建简单应用时, 只需一个轻量小巧的核心库; 当构建复杂应用时, 可以引入各式各样的Vue插件 Vue具有以下特点: 采用组件化模式, 提高代码复用率且让代码更好维护 声明式编…...
计算机视觉基础知识(十六)--图像识别
图像识别 信息时代的一门重要技术;目的是让计算机代替人类处理大量的物理信息;随着计算机技术的发展,人类对图像识别技术的认识越来越深刻;图像识别技术利用计算机对图像进行处理\分析\理解,识别不同模式的目标和对象;过程分为信息的获取\预处理\特征抽取和选择\分类器设计\分…...
数仓开发-2023/2/29
1.简单自我介绍 2.介绍下之前的公司离线数仓项目 3.sql和hivesql区别? 4.sql的执行顺序? 5.hive的优化 6.说下你之前公司来,你的技能层次在每个公司?你怎么评价你的技能? 7.你的之前业务主要是做什么?我说了…...
ipv6过渡技术-IPv4 over IPv6隧道示例
实验拓扑如下: 环境概述: PC1和PC2与路由器之间为IPv4网络。两台路由器之间为IPv6网络,通过配置,要求是PC1与PC2能互通。即使IPv4可以在IPv6网络中通信。 配置方法: AR1: # ipv6 # interface Gigabi…...
SpringBoot约定大于配置
什么是约定大于配置 "约定大于配置"(Convention Over Configuration)是一种理念,旨在通过默认约定和规则来减少开发人员需要做的配置工作。在Spring Boot框架中,这一原则得到了充分应用,帮助开发者更快地构…...
DHCP自动获取IP地址实验(华为)
思科设备参考:DHCP自动获取IP地址实验(思科) 一,实验目的 路由器搭载DHCP,让PC通过DHCP自动获取IP地址 二,不划分vlan--全局地址池 实验拓扑 配置命令 Router <Huawei>system-view [Huawei]ip po…...
探索Terraform实践:优化基础设施管理
Terraform 是管理基础设施及代码(IaC)最常用的工具之一,它能使我们安全且可预测地对基础设施应用更改。 Terraform作为一个强大的基础设施即代码工具,为开发人员和运维团队提供了一种简单而强大的方式来定义、部署和管理基础设施。…...
MYSQL高级_目录
2024持续更新中… MYSQL01高级_Linux版安装、各级别字符集、字符集与比较规则、SQL大小写规范 MYSQL02高级_目录结构、默认数据库、表文件、系统独立表空间 MYSQL03高级_新增用户、授予权限、授权底层表结构、角色理解 MYSQL04高级_逻辑架构剖析、查询缓存、解析器、优化器、执…...
MongoDB获评2023年Gartner®云数据库管理系统“领导者”
MongoDB 很荣幸在《2023 年 Gartner 云数据库管理系统 (CDBMS) 魔力象限》报告中被评为领导者。我们相信这一成就让 MongoDB 成为唯一一家连续两年斩获“领导者”称号的纯应用程序数据库服务提供商。 社区及开发者数据平台用户的需求一向是 MongoDB 关注的重点,而这…...
基于FastAPI构造一个AI模型部署应用
前言 fastapi是目前一个比较流行的python web框架,在大模型日益流行的今天,其云端部署和应用大多数都是基于fastapi框架。所以掌握和理解fastapi框架基本代码和用法尤显重要。 需要注意的是,fastapi主要是通过app对象提供了web服务端的实现代…...
【Unity】使用ScriptableObject存储数据
1.为什么要用ScriptableObject? 在游戏开发中,有大量的配置数据需要存储,这个时候就需要ScriptableObject来存储数据了。 很多人会说我可以用json、xml、txt,excel等等 但是你们有没有想过,假设你使用的是json&#x…...
ChatGPT聊天机器人数据隐私和安全问题
ChatGPT是否安全使用? 是的,ChatGPT是安全的,因为它无法对你或你的计算机造成任何直接损害。由于网页浏览器和智能手机操作系统都使用了沙箱技术,因此ChatGPT无法访问你设备的其余部分。换句话说,当你使用ChatGPT应用程…...
MyBatis三个经典问题
1. Mybatis的执行流程 MyBatis 是一个流行的 Java 持久化框架,提供了对象关系映射 (ORM) 和 SQL 映射的功能,使开发者能够更加方便地与数据库交互。MyBatis 的执行流程大致如下: 配置阶段: 加载配置文件: MyBatis 通过读取配置文件ÿ…...
JavaEE+springboot教学仪器设备管理系统o9b00-springmvc
本文旨在设计一款基于Java技术的教学仪器设备销售网站,以提高网站性能、功能完善、用户体验等方面的优势,解决现有教学仪器设备销售网站的问题,并为广大教育工作者和学生提供便捷的教学仪器设备销售渠道。本文首先介绍了Java技术的相关基础知…...
Java项目:37 springboot003图书个性化推荐系统的设计与实现
作者主页:源码空间codegym 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 springboot003图书个性化推荐系统的设计与实现 管理员:首页、个人中心、学生管理、图书分类管理、图书信息管理、图书预约管理、退…...
mysql 8 修改账号密码
一 进入Mysql bin目录 cmd 运行(跳过密码),运行完不要关闭 mysqld --console --skip-grant-tables --shared-memory 二 新打开一个cmd mysql bin 目录下登录,密码输入时,直接回车 mysql -uroot -p 三 修改密码 m…...
拜占庭将军问题与区块链
文章目录 拜占庭将军问题问题背景问题的现实意义将军-副官模型三将军问题四将军问题3m将军问题 口头消息算法基本假设方法介绍正确性证明 签名消息算法 区块链区块链是什么区块链对于拜占庭将军问题的解决方法工作量证明奖励机制最长链原则小结 区块链的意义 总结 拜占庭将军问…...
字节跳动热门的前端开源项目
字节跳动开源官网 Arco Dsign Arco Design 是一套设计系统,主要服务于字节跳动旗下中后台产品的体验设计和技术实现。它的目标在于帮助设计师与开发者解放双手、提升工作效率,并高质量地打造符合业务规范的中后台应用。它拥有系统的设计规范和资源&…...
uniapp+vue基于Android的图书馆借阅系统qb4y3-nodejs-php-pyton
uni-app框架:使用Vue.js开发跨平台应用的前端框架,编写一套代码,可编译到Android、小程序等平台。 框架支持:springboot/django/php/Ssm/flask/express均支持 前端开发:vue 语言:pythonjavanode.jsphp均支持 运行软件:idea/eclip…...
多模态实践:OpenClaw+千问3.5-27B分析截图中的图表数据
多模态实践:OpenClaw千问3.5-27B分析截图中的图表数据 1. 为什么需要自动化图表分析 作为一名数据分析师,我每天需要处理大量来自股票、销售报表的截图。传统做法是手动录入数据到Excel,既耗时又容易出错。直到我发现OpenClaw与千问3.5-27B…...
Instant-NGP实战:5分钟用CUDA加速你的NeRF模型渲染(附代码片段)
Instant-NGP实战:5分钟用CUDA加速你的NeRF模型渲染(附代码片段) 当你在深夜调试NeRF模型,看着进度条缓慢爬行,是否想过——如果能像英伟达演示的那样,在10毫秒内完成一帧高清渲染该多好?去年横空…...
Win11终极IPX协议兼容方案:IPXWrapper完整配置与优化指南
Win11终极IPX协议兼容方案:IPXWrapper完整配置与优化指南 【免费下载链接】ipxwrapper 项目地址: https://gitcode.com/gh_mirrors/ip/ipxwrapper 在现代Windows 11系统上重温《星际争霸》、《魔兽争霸》、《暗黑破坏神2》等经典游戏时,你是否遇…...
别再死记硬背了!用PyTorch图解U-Net中的卷积、反卷积与Skip Connection
从张量视角拆解U-Net:PyTorch实战中的维度魔术与跳跃连接 当你第一次看到U-Net的对称结构图时,是否曾被那些上下翻飞的箭头和不断变化的数字搞得晕头转向?作为医学图像分割领域的标杆架构,U-Net的核心秘密其实藏在三个关键操作里…...
RyTuneX深度实战:Windows系统性能调优与隐私保护最佳实践
RyTuneX深度实战:Windows系统性能调优与隐私保护最佳实践 【免费下载链接】RyTuneX RyTuneX is a cutting-edge optimizer built with the WinUI 3 framework, designed to amplify the performance of Windows devices. Crafted for both Windows 10 and 11. 项目…...
前端CSS样式详细笔记
文章目录一、CSS基础概念1. 什么是CSS2. CSS三大核心特性3. CSS基本语法结构二、CSS引入方式三、CSS选择器详解1. 基础选择器2. 组合选择器3. 属性选择器4. 伪类与伪元素四、选择器优先级规则1. 优先级计算方法2. 优先级实战示例3. 优先级注意事项五、CSS盒模型1. 盒模型组成2.…...
手把手教你用HuggingFace+BGE模型搭建本地向量检索系统(附FAISS实战代码)
从零构建基于BGE模型的本地语义搜索系统:代码级实践指南 在信息爆炸的时代,如何快速从海量文本中精准找到相关内容?语义搜索技术正成为解决这一痛点的利器。不同于传统的关键词匹配,语义搜索能理解查询背后的意图,找到…...
【花雕学编程】代码泄露之后:深度剖析Claude开源对开发者生态的冲击与机遇
导语:2026年3月31日,Anthropic 旗下 Claude Code CLI 客户端源码意外泄露,1906个源文件、51.2万行TypeScript代码被开发者备份至 GitHub 仓库 instructkr/claude-code,标注为“仅供研究”。这场看似偶然的打包失误,并非…...
【IEEE TNNLS 2025】赋予大模型“跨院行医”的能力:基于全局与局部提示的医学图像泛化框架 (GLP) 解析
在医学图像分割的临床落地中,一个长期存在的痛点是**“领域偏移 (Domain Shift)”**。一个在A医院(源域)表现完美的深度学习模型,当部署到使用不同成像设备、不同扫描参数的B医院(未知目标域)时,…...
STM32控制步进电机复位的三种实用方法及适用场景分析
1. 步进电机复位的基本原理与挑战 步进电机作为工业控制和智能硬件中常见的执行元件,其复位功能直接关系到设备的重复定位精度。所谓复位,就是让电机轴回到预设的零位参考点。我在调试3D打印机时发现,哪怕只有0.1mm的复位误差,都…...
