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);},

最終就可以實現了;效果如下

四個相機通過四個角度觀察模型

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/713443.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/713443.shtml
英文地址,請注明出處:http://en.pswp.cn/news/713443.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux uname命令教程:了解系統信息和配置(附實例詳解和注意事項)

Linux uname命令介紹 uname&#xff08;Unix Name&#xff09;命令用于顯示系統信息&#xff0c;包括內核名稱、網絡節點名稱、操作系統名稱、版本號、硬件名稱和處理器類型。它是一個基本的系統管理工具&#xff0c;通常用于識別系統配置。 Linux uname命令適用的Linux版本 …

Linux服務:Nginx反向代理與負載均衡

一、Nginx反向代理 1、什么是反向代理&#xff1f; 代理分為兩類&#xff0c;正向代理和反向代理。 ①正向代理&#xff1a;幫助用戶訪問服務器&#xff0c;緩存服務器內容。 ②反向代理&#xff1a;代理服務器處理用戶的請求&#xff0c;決定轉發請求給誰處理負載均衡的作…

Go 與 Rust:導航編程語言景觀

在當今構建軟件時&#xff0c;開發者在編程語言上有著豐富的選擇。兩種脫穎而出的語言是 Go 和 Rust - 都很強大但卻截然不同。本文將從各種因素比較這兩種語言&#xff0c;以幫助您確定哪種更適合您的需求。 我們將權衡它們在并發、安全性、速度、互操作性等方面的方法。我們將…

Ubuntu篇——crontab修改編輯器

輸入命令: crontab -e 如果你的系統是第一次使用crontab服務&#xff0c;會首先讓你選擇一個編輯器 如果已經選擇過編輯器&#xff0c;后續想要修改默認編輯器&#xff0c;可以輸入sudo select-editor進行修改。

【GPU驅動開發】-GPU架構簡介

前言 不必害怕未知&#xff0c;無需恐懼犯錯&#xff0c;做一個Creator&#xff01; GPU&#xff08;Graphics Processing Unit&#xff0c;圖形處理單元&#xff09;是一種專門用于處理圖形和并行計算的處理器。GPU系統架構通常包括硬件和軟件層面的組件。 一、總體流程 應…

Node.js基礎---Express中間件

1. 概念 1.什么是中間件 中間件(Middleware)&#xff0c;特指業務流程的中間處理環節 2. Express 中間件的調用流程 當一個請求到達 Express 的服務器后&#xff0c;可以連續調用多個中間件&#xff0c;從而對這次請求進行預處理 3. Express 中間件格式 Express 的中間件&…

每周一算法:雙端隊列廣搜

題目鏈接 電路維修 題目描述 達達是來自異世界的魔女&#xff0c;她在漫無目的地四處漂流的時候&#xff0c;遇到了善良的少女翰翰&#xff0c;從而被收留在地球上。翰翰的家里有一輛飛行車。有一天飛行車的電路板突然出現了故障&#xff0c;導致無法啟動。 電路板的整體結…

Java實戰:SpringBoot集成ZXing實現二維碼生成與解析

一、引言 在信息化社會&#xff0c;二維碼已經深入到生活的各個角落&#xff0c;無論是支付、營銷、信息傳遞&#xff0c;甚至防偽溯源&#xff0c;二維碼都發揮了至關重要的作用。作為Java開發者&#xff0c;我們如何在SpringBoot項目中便捷地實現二維碼的生成與解析呢&#…

4、Redis-Set【常用】

目錄 一、Redis-Set特點 二、常用命令與交并差 三、Redis中Set類型應用場景 一、Redis-Set特點 1、無序&#xff1a;添加的是A,B,C&#xff1b;取出的可能是B,A,C 2、唯一&#xff1a;不允許元素重復 二、常用命令與交并差 常用命令 格式含義例子sadd key members[...]往k…

吳恩達機器學習筆記十四 多輸出的分類 多類和多標簽的區別 梯度下降優化 卷積層

這里老師想講的是multiclass classification和multilable classification的區別&#xff0c;下面是我從其他地方找到的說法: Multiclass classification 多類分類 意味著一個分類任務需要對多于兩個類的數據進行分類。比如&#xff0c;對一系列的橘子&#xff0c;蘋果或者梨的…

Stable Diffusion生成式擴散模型代碼實現原理

Stable Diffusion可以使用PyTorch或TensorFlow等深度學習框架來實現。這些框架提供了一系列的工具和函數&#xff0c;使得開發者可以更方便地構建、訓練和部署深度學習模型。因此可以使用PyTorch或TensorFlow來實現Stable Diffusion模型。 安裝PyTorch&#xff1a;確保您已經安…

Linux命令行與shell腳本編程大全-2.2

第二部分 shell腳本編程基礎 第11章構建基礎腳本 第12章結構化命令 第13章更多的結構化命令 第14章處理用戶輸入 第15章呈現數據 第16章腳本控制 第15章 呈現數據 15.1 理解輸入和輸出 15.1.1 標準文件描述符 Linux 系統會將每個對象當作文件來處理&#xff0c;這包括輸入和…

T3SF:一款功能全面的桌面端技術練習模擬框架

關于T3SF T3SF是一款功能全面的桌面端技術練習模擬框架&#xff0c;該工具針對基于主場景事件列表的各種事件提供了模塊化的架構&#xff0c;并包含了針對每一個練習定義的規則集&#xff0c;以及允許為對應平臺參數定義參數的配置文件。 該工具的主模塊能夠執行與其他特定模…

CDN原理探究

來源于百度&#xff1a; https://baike.baidu.com/item/%E5%86%85%E5%AE%B9%E5%88%86%E5%8F%91%E7%BD%91%E7%BB%9C/4034265?frge_ala 通過上圖&#xff0c;我們可以了解到&#xff0c;使用了CDN緩存后的網站的訪問過程變為&#xff1a; 用戶向瀏覽器提供要訪問的域名&#xff…

幻獸帕魯/Palworld服務器的最佳網絡設置、內存和CPU配置是什么?

幻獸帕魯/Palworld服務器的最佳網絡設置、內存和CPU配置是什么&#xff1f; 對于4到8人的玩家&#xff0c;推薦的配置是4核16G的CPU和16G的內存。10到20人的玩家選擇8核32G的CPU和32G或以上的內存。2到4人的玩家則建議選擇4核8G的CPU和8G的內存。對于32人的玩家&#xff0c;推…

YOLOV8介紹

原文鏈接&#xff1a; 1、 詳解YOLOv8網絡結構/環境搭建/數據集獲取/訓練/推理/驗證/導出 2、Yolov8的詳解與實戰 3、YOLOV8模型訓練部署&#xff08;實戰&#xff09;&#xff08;&#xff09;有具體部署和訓練實現代碼YOLOV8模型訓練部署&#xff08;實戰&#xff09;&…

Mybatis plus核心功能-IService

目錄 1 前言 2 使用方法 2.1 繼承ServiceImpl,> 2.2 基礎業務開發的使用 2.3 復雜業務開發的使用 2.3 Lambda查詢 2.4 Lambda更新 1 前言 我本以為Mapper層的類能夠繼承BaseMapper<XXX>&#xff0c;而不用我們手動寫一些mapper方法已經夠離譜了。沒想到海油膏…

linux上pip3 install torch==1.11和pip3 install torch==1.11+cu115區別

在linux上安裝torch時&#xff0c; 如果環境安裝好了CUDA環境&#xff0c; 那么安裝torch時不用刻意指定帶cuda的版本&#xff0c; 最終安裝的也是支持GPU的torch版本。但是仍然有一些小的區別&#xff0c;主要就是支持CUDA版本的不同。 (leo_py37) pinefieldedge-gpu-01:/dat…

Gradle構建項目

1.自己下載對應的gradle版本到本地。 2.maven國內鏡像&#xff08;settings.gradle中進行配置&#xff09; // google()maven { url https://maven.aliyun.com/repository/public/ }maven { url https://maven.aliyun.com/repository/google/}maven { url https://maven.aliyu…

【機器學習300問】25、常見的模型評估指標有哪些?

模型除了從數據劃分的角度來評估&#xff0c;我上一篇文章介紹了數據集劃分的角度&#xff1a; 【機器學習300問】24、模型評估的常見方法有哪些&#xff1f;http://t.csdnimg.cn/LRyEt 還可以從一些指標的角度來評估&#xff0c;這篇文章就帶大家從兩個最經典的任務場景介紹…