3D世界里的“盜夢空間”!在方塊里再造一個世界?高級特效get?

有沒有想過,游戲里的鏡子、傳送門、或者屏幕上播放的實時3D動畫是怎么實現的?

答案就是一項黑科技——渲染目標(Render Targets)。它允許我們不直接渲染到屏幕,而是“偷偷地”渲染到一張幕后的貼圖上,然后再把這張包含了另一個世界畫面的貼圖,應用到我們主場景的任意物體上。


🖼? 核心思想:先畫到“小畫板”上

這個概念聽起來很繞,我們用一個簡單的比喻來理解:

想象一下,你不是直接在房間的墻壁上作畫,而是:

  1. 先拿出一塊小畫板(這就是?WebGLRenderTarget)。
  2. 在這塊小畫板上,精心畫了一幅動態的畫(比如一個獨立旋轉的3D物體)。
  3. 最后,你把這塊已經畫好了動態內容的小畫板,像一張照片一樣,掛到墻上(應用為主場景里某個物體的貼圖)。

于是,你就實現了“畫中畫”的神奇效果!

? 無窮的可能性

掌握了這項技術,你就能解鎖無數種高級特效:

  • 實時監控畫面?📹: 在一面墻上顯示另一個房間的實時3D影像。
  • 神奇的傳送門?🌀: 門的那一頭是另一個動態的世界。
  • 車內后視鏡?🚗: 鏡子里實時反射出身后的場景。
  • 后期處理濾鏡?🎞?: 實現電影級別的調色、模糊、輝光等屏幕特效。

🛠? 盜夢空間:完整代碼

下面的代碼將完整演示這個“盜夢空間”的過程:我們將創建一個主場景,里面有一個立方體;同時,我們還會創建另一個獨立的“內部”場景,里面有一個旋轉的環面紐結。然后,我們會把“內部”場景實時渲染的結果,作為貼圖應用到主場景的立方體上。

代碼亮點

  • 創建了?mainScene?和?rtScene?(Render Target Scene) 兩個獨立的場景。
  • 在動畫循環中,通過?renderer.setRenderTarget()?來回切換渲染目標,實現“先畫到小畫板,再畫到主屏幕”的流程。

<!-- end list -->

HTML

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Three.js Render Targets</title><style>body { margin: 0; }canvas { display: block; }</style>
</head>
<body><script type="importmap">{"imports": {"three": "https://unpkg.com/three@0.165.0/build/three.module.js","three/addons/": "https://unpkg.com/three@0.165.0/examples/jsm/"}}</script><script type="module">import * as THREE from 'three';import { OrbitControls } from 'three/addons/controls/OrbitControls.js';// 1. 主場景設置const mainScene = new THREE.Scene();mainScene.background = new THREE.Color(0x333333);const mainCamera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 100);mainCamera.position.z = 5;const renderer = new THREE.WebGLRenderer({ antialias: true });renderer.setSize(window.innerWidth, window.innerHeight);document.body.appendChild(renderer.domElement);new OrbitControls(mainCamera, renderer.domElement);// 2. 創建一個 Render Target (我們的小畫板)const rt = new THREE.WebGLRenderTarget(512, 512);// 3. 創建 "內部" 場景 (畫板上的內容)const rtScene = new THREE.Scene();rtScene.background = new THREE.Color(0x87CEEB);const rtCamera = new THREE.PerspectiveCamera(75, 1, 0.1, 100); // 寬高比為1,匹配RT尺寸rtCamera.position.z = 3;// 為內部場景添加自己的燈光和物體rtScene.add(new THREE.AmbientLight(0xffffff, 0.5));rtScene.add(new THREE.DirectionalLight(0xffffff, 1));const rtKnot = new THREE.Mesh(new THREE.TorusKnotGeometry(1, 0.3, 100, 16),new THREE.MeshStandardMaterial({ color: 0xff0088, roughness: 0.2 }));rtScene.add(rtKnot);// 4. 在主場景創建一個立方體,并使用Render Target的紋理const cubeMaterial = new THREE.MeshBasicMaterial({ map: rt.texture });const mainCube = new THREE.Mesh(new THREE.BoxGeometry(2, 2, 2), cubeMaterial);mainScene.add(mainCube);// 5. 動畫循環function animate(time) {time *= 0.001;// 讓兩個場景的物體都動起來rtKnot.rotation.x = time;rtKnot.rotation.y = time;mainCube.rotation.x = -time * 0.2;mainCube.rotation.y = -time * 0.2;// 關鍵步驟:先渲染到 Render Targetrenderer.setRenderTarget(rt);renderer.render(rtScene, rtCamera);// 然后再渲染到主屏幕renderer.setRenderTarget(null);renderer.render(mainScene, mainCamera);requestAnimationFrame(animate);}animate();</script>
</body>
</html>
🎬 “盒中世界”誕生

打開頁面,你會看到一個正在旋轉的立方體。但神奇的是,立方體的表面并非純色或普通貼圖,而是一個實時播放的、完全不同的3D動畫(一個旋轉的彩色紐結)!

你正在從主世界,窺探一個被實時渲染出來的“盒中世界”。


渲染目標是Three.js中一個從“會用”到“精通”的分水嶺。它將渲染過程本身變成了創造工具,是實現高級視覺特效的基礎。掌握了它,你的創意將不再受限于單一的場景!

#ThreeJS #特效 #渲染 #WebGPU #Shader #游戲開發 #前端開發 #JavaScript #技術干貨

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

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

相關文章

淺析一種基于深度學習算法的維吾爾文OCR技術的實現原理及其應用場景

維吾爾文OCR技術是一種基于人工智能和深度學習技術的維吾爾文光學字符識別工具&#xff0c;能夠快速、準確地將印刷體或手寫體維吾爾文轉換為可編輯、可搜索的數字化文本。該技術適用于政府、教育、出版、金融等多個行業&#xff0c;助力維吾爾文信息的高效處理與智能化管理。 …

如何使用MQTTX軟件來進行MQTT協議的測試

下載MQTTX軟件 下載地址及說明文檔開始使用 - MQTTX 文檔,比較詳細 為什么使用MQTTX 何時要使用MQTTX軟件呢&#xff1f;用來檢測物聯網模塊上云的數據就很方便&#xff0c;當然云上如果有日志系統的話也是可以用的。 物聯網模塊&#xff0c;以利爾達模塊為例 NT26-KCN系列…

ELK 和 OpenShift 中的 EFK

ELK 和 OpenShift 中的 EFK 確實是同類日志解決方案的不同實現&#xff0c;核心功能相似但組件略有差異。以下是詳細對比和解釋&#xff1a; 1. ELK vs EFK&#xff1a;核心區別 組件ELK 棧EFK 棧&#xff08;OpenShift 默認&#xff09;日志收集Logstash&#xff08;Java 實現…

Python UDP Socket 實時在線刷卡掃碼POS消費機門禁控制服務端示例源碼

本示例使用的設備&#xff1a;https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.1d292c1bk8Qc9r&ftt&id17021194999 一、服務端綁定IP開啟UDP端口接收消費機提交的請求 import sys import os import socket import time import datetimeIpList[] if sys.pl…

對于高考邊界的理解以及未來就業層級的學習與思考

目錄 一、2024年高考全國多少考生&#xff0c;文化課&#xff0c;文科理科&#xff0c;分別總分多少分&#xff1f;清北得多少分能上&#xff1f;二、1342萬人里面&#xff0c;有多少人能上清北&#xff0c;多少能上985&#xff0c;多少能上211&#xff0c;多少能上二本&#x…

JVM調優實戰 Day 4:JVM類加載機制

【JVM調優實戰 Day 4】JVM類加載機制 文章內容 在Java虛擬機&#xff08;JVM&#xff09;的運行過程中&#xff0c;類加載機制是整個程序啟動和運行的基礎。它決定了Java類是如何被動態加載到JVM中&#xff0c;并為后續的字節碼執行做好準備。理解JVM類加載機制不僅有助于我們…

R 語言中的判斷語句

R 語言中的判斷語句 在R語言編程中&#xff0c;判斷語句是執行條件邏輯的基礎。它們允許程序根據特定的條件執行不同的代碼塊。本文將深入探討R語言中的幾種常見判斷語句&#xff0c;包括if語句、if-else語句和switch語句&#xff0c;并探討它們的用法和場景。 1. if語句 if…

從設備自動化到智能管控:MES如何賦能牛奶飲料行業高效生產?

萬界星空科技全新推出的&#xff1a;新一代智能化MES系統&#xff0c;深度融合AI大數據技術&#xff0c;實現生產全流程可視化、智能排產、實時質量追溯與設備互聯&#xff0c;助力企業降本增效30%。 現開放免費試用名額&#xff0c;體驗智能化生產管理的高效與便捷&#xff01…

TDengine 技術參數配置大全

1. 背景 TDengine 的 taos.cfg 中配置項及使用 SQL 命令 alter 修改的系統變量之間的關系如何&#xff0c;哪些是持久存儲項&#xff0c;哪些設置是臨時項&#xff0c;這章將詳細說明。 本文是技術參考資料&#xff0c;請收藏。 2.定義 1. 全局配置參數 全局配置參數&#…

無人機神經網絡模塊運行與技術難點

一、神經網絡模塊的運行方式 1. 分層處理架構 感知層 多模態數據融合&#xff1a;通過八元數卷積網絡&#xff08;OCNN&#xff09;統一處理LiDAR、攝像頭、IMU等異構傳感器數據&#xff0c;將點云坐標&#xff08;x/y/z&#xff09;、圖像RGB與光流信息編碼至8維虛部&#…

前端react框架實現打包時間動態加入配置展示在指定頁面

注意&#xff1a; 當前方法特定為 create-react-app 構建框架&#xff0c;其他的構建流程不同&#xff0c;不能直接照搬 react-scripts 的方式。 ? 目標&#xff1a; 在 React 打包&#xff08;build&#xff09;時&#xff0c;自動將當前時間寫入代碼中某個變量或 console…

原子操作(CAS)

原子操作 原子操作原理什么是原子操作&#xff1f;原子性原子變量相關接口內存序 shared_ptr的實現 原子操作原理 什么是原子操作&#xff1f; 原子操作其實就是指在多線程的環境下&#xff0c;確保對共享變量的操作不會被干擾&#xff0c;從而避免了競態條件。 我們都知道&…

馬克思主義基本原理期末復習下

二十、資本的原始積累 所謂資本原始積累&#xff0c;就是以暴力手段使生產者與生產資料分離資本快速集中于少數人手中&#xff0c;資本主義得以快速發展的歷史過程。具體過程其一&#xff0c;用暴力手段奪取農民的土地&#xff0c;如英國圈地運動在國外建立殖民地&#xff0c;…

體育數據api接口,足球api籃球api電競api,比賽賽事數據api

在體育行業&#xff0c;數據驅動一切&#xff0c;從內容分發到競猜預測&#xff0c;從用戶互動到商業變現&#xff0c;背后少不了一個關鍵詞&#xff1a;數據接口&#xff08;API&#xff09;。無論是實時比分、比賽事件、歷史統計&#xff0c;還是球員詳情、戰績排名&#xff…

Harmony 狀態監聽 @Monitor和@Computed

Monitor與Computed裝飾器在ArkUI狀態管理中的協同應用 一、裝飾器概述 1. Monitor裝飾器 Monitor是ArkUI狀態管理V2中的核心裝飾器&#xff0c;用于深度監聽狀態變量的修改&#xff1a; 支持監聽嵌套類屬性、多維數組項和對象數組中的指定項變化能夠獲取變化前后的值進行比…

同濟大學多模態感知具身導航全面綜述

作者&#xff1a; I-Tak Ieong, Hao Tang 單位&#xff1a;同濟大學計算機學院&#xff0c;北京大學計算機學院 論文標題&#xff1a; Multimodal Perception for Goal-oriented Navigation: A Survey 論文鏈接&#xff1a;https://arxiv.org/pdf/2504.15643 主要貢獻 基于…

2025年CCF先進音頻技術競賽

由中國計算機學會主辦、CCF語音對話與聽覺專委會承辦、語音之家協辦、華為終端有限公司贊助的CCF先進音頻技術大賽正式啟動。大賽旨在推動國內高等院校及科研院所在音頻技術領域的專業人才培養&#xff0c;支持學生科技創新&#xff0c;選拔優秀人才。 賽事官網&#xff1a;ht…

手撕線程池

線程池的目的&#xff1a; 1.復用線程&#xff0c;減少頻繁創建和銷毀的開銷 創建和銷毀線程是昂貴的系統操作&#xff0c;涉及內核調度、內存分配&#xff1b; 使用線程池預先創建一批線程&#xff0c;在多個任務間循環復用&#xff0c;避免資源浪費&#xff0c;提高性能。 …

3DTiles三維模型

1. 3DTiles 介紹? 2016 年&#xff0c;Cesium 團隊借鑒傳統 2DGIS 的地圖規范&#xff1a;WMTS&#xff0c;借鑒圖形學中的層次細節模型&#xff0c;打造出大規模的三維數據標準&#xff1a;3d-Tiles&#xff0c;中文譯名&#xff1a;三維瓦片。 它在模型上利用了 gltf 渲染…

Golang Kratos 系列:業務分層的若干思考(一)

在使用 Kratos 框架開發云服務的過程中&#xff0c;漸漸理解和感受到“領域層”這個概念和抽象的強大之處&#xff0c;它可以將業務和存儲細節解耦、將業務和開發初期頻繁變更的API結構&#xff0c;讓Mock單元測試變得更加容易、對細節的變化更魯棒。讓業務代碼擺脫技術細節依賴…