three.js設置物體輪廓發光和物體發光

設置物體輪廓發光

在這里插入圖片描述

<script setup>
import * as THREE from 'three';
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
// 導入后期合成
import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js';
import { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass.js';
import { OutlinePass } from 'three/examples/jsm/postprocessing/OutlinePass.js';// 場景
const scene = new THREE.Scene();// 模型
// 頂點著色器
const cubeGeometry = new THREE.BoxGeometry(1, 1, 1);
// 片元著色器
const cubeMaterial = new THREE.MeshBasicMaterial({ color: 0xffff00 });
const cube = new THREE.Mesh(cubeGeometry, cubeMaterial);
cube.position.set(5, 0, 0);
scene.add(cube);const torusKnotGeometry = new THREE.TorusKnotGeometry(1, 0.35, 100, 16);
const torusKnotMaterial = new THREE.MeshBasicMaterial({ color: 0x00ffff });
const torusKnot = new THREE.Mesh(torusKnotGeometry, torusKnotMaterial);
torusKnot.position.set(0, 0, 0);
scene.add(torusKnot);// 相機
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
camera.position.set(0, 0, 10);// 輔助線
const axesHelper = new THREE.AxesHelper(5); // 長度
scene.add(axesHelper);// 初始化渲染器
const renderer = new THREE.WebGLRenderer({antialias: true // 鋸齒模糊
});
// renderer.setClearColor(0x444444, 1); // 設置背景顏色
renderer.setSize(window.innerWidth, window.innerHeight); //設置three.js渲染區域的尺寸(像素px)
document.body.appendChild(renderer.domElement);
// renderer.render(scene, camera);// 相機圍繞目標進行軌道運動; 注意OrbitControls會影響 camera.lookAt(x,y,z)失效,需設置controls.target.set(x,y,z)才能生效
const controls = new OrbitControls(camera, renderer.domElement);
// 可設置控制器阻尼,讓控制器更有真實效果,必須在你的動畫循環里調用.update()
controls.enableDamping = true// 添加后期合成
const composer = new EffectComposer(renderer);
const renderPass = new RenderPass(scene, camera);
composer.addPass(renderPass);
// 導入OutlinePass
const outlinePass = new OutlinePass(new THREE.Vector2(window.innerWidth, window.innerHeight),scene,camera
);
outlinePass.edgeStrength = 10; // 描邊的寬度
outlinePass.edgeGlow = 1; // 光暈
outlinePass.edgeThickness = 2; // 光暈粗細度
outlinePass.pulsePeriod = 5; // 閃爍頻率(呼吸燈)
outlinePass.visibleEdgeColor = new THREE.Color(0xff3333); // 描邊顏色
outlinePass.hiddenEdgeColor = new THREE.Color(0x000000); // 光暈顏色
// new THREE.TextureLoader().load('./26ad6804f422468988c3de6fe003bd6a.jpeg', texture => {
//   texture.wrapS = THREE.RepeatWrapping;
//   texture.wrapT = THREE.RepeatWrapping;
//   outlinePass.patternTexture = texture;
//   outlinePass.usePatternTexture = true;
// });
composer.addPass(outlinePass);// 設置發光的物體
outlinePass.selectedObjects = [torusKnot]
window.addEventListener('click', (e) => {outlinePass.selectedObjects = [cube];
})// 瀏覽器動畫
const clock = new THREE.Clock()
function render(time) {controls.update() // 阻尼控制器更新// renderer.render(scene, camera);composer.render(); // 后期合成來渲染requestAnimationFrame(render); // 請求動畫幀
}
render()// 監聽畫面變化,更新渲染畫面
window.addEventListener('resize', () => {// 更新攝像頭camera.aspect = window.innerWidth / window.innerHeight;// 更新攝像機的投影矩陣camera.updateProjectionMatrix();// 更新渲染器renderer.setSize(window.innerWidth, window.innerHeight);// 設置渲染器的像素比renderer.setPixelRatio(window.devicePixelRatio)
})
</script>

設置物體泛光

在這里插入圖片描述

<script setup>
import * as THREE from 'three';
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
// 導入后期合成
import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js';
import { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass.js';
import { OutlinePass } from 'three/examples/jsm/postprocessing/OutlinePass.js';
import { UnrealBloomPass } from 'three/examples/jsm/postprocessing/UnrealBloomPass.js';// 場景
const scene = new THREE.Scene();// 模型
// 頂點著色器
const cubeGeometry = new THREE.BoxGeometry(1, 1, 1);
// 片元著色器
const cubeMaterial = new THREE.MeshBasicMaterial({ color: 0xffff00 });
const cube = new THREE.Mesh(cubeGeometry, cubeMaterial);
cube.position.set(5, 0, 0);
cube.layers.set(1) // 設置物體所在的層級,默認層級為0
scene.add(cube);const torusKnotGeometry = new THREE.TorusKnotGeometry(1, 0.35, 100, 16);
const torusKnotMaterial = new THREE.MeshBasicMaterial({ color: 0x00ffff });
const torusKnot = new THREE.Mesh(torusKnotGeometry, torusKnotMaterial);
torusKnot.position.set(0, 0, 0);
scene.add(torusKnot);// 相機
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
camera.position.set(0, 0, 10);// 輔助線
const axesHelper = new THREE.AxesHelper(5); // 長度
scene.add(axesHelper);// 初始化渲染器
const renderer = new THREE.WebGLRenderer({antialias: true, // 鋸齒模糊
});
// renderer.setClearColor(0x444444, 1); // 設置背景顏色
renderer.setSize(window.innerWidth, window.innerHeight); //設置three.js渲染區域的尺寸(像素px)
renderer.autoClear = false; // 不自動清除顏色和深度緩沖區
document.body.appendChild(renderer.domElement);
// renderer.render(scene, camera);// 相機圍繞目標進行軌道運動; 注意OrbitControls會影響 camera.lookAt(x,y,z)失效,需設置controls.target.set(x,y,z)才能生效
const controls = new OrbitControls(camera, renderer.domElement);
// 可設置控制器阻尼,讓控制器更有真實效果,必須在你的動畫循環里調用.update()
controls.enableDamping = true// 添加后期合成
const composer = new EffectComposer(renderer);
const renderPass = new RenderPass(scene, camera);
composer.addPass(renderPass);// // 描邊,突出物體輪廓
// const outlinePass = new OutlinePass(
//   new THREE.Vector2(window.innerWidth, window.innerHeight),
//   scene,
//   camera
// );
// outlinePass.edgeStrength = 10; // 描邊的寬度
// outlinePass.edgeGlow = 1; // 光暈
// outlinePass.edgeThickness = 2; // 光暈粗細度
// outlinePass.pulsePeriod = 5; // 閃爍頻率(呼吸燈)
// outlinePass.visibleEdgeColor = new THREE.Color(0xff3333); // 描邊顏色
// outlinePass.hiddenEdgeColor = new THREE.Color(0x000000); // 光暈顏色
// // new THREE.TextureLoader().load('./26ad6804f422468988c3de6fe003bd6a.jpeg', texture => {
// //   texture.wrapS = THREE.RepeatWrapping;
// //   texture.wrapT = THREE.RepeatWrapping;
// //   outlinePass.patternTexture = texture;
// //   outlinePass.usePatternTexture = true;
// // });
// composer.addPass(outlinePass);// // 設置發光的物體
// outlinePass.selectedObjects = [torusKnot]
// window.addEventListener('click', (e) => {
//   outlinePass.selectedObjects = [cube];
// })// 泛光(光照氛圍)
const unrealBloomPass = new UnrealBloomPass(new THREE.Vector2(window.innerWidth, window.innerHeight),0.5, // 強度0.5, // 半徑0.5 // > 0.5泛光
)
composer.addPass(unrealBloomPass);// 點擊泛光和不泛光控制
window.addEventListener('click', (e) => {// console.log(cube.layers.mask); // 2的次方,通過set設置if (cube.layers.mask === 1) {cube.layers.set(1);} else {cube.layers.set(0);}
})// 瀏覽器動畫
const clock = new THREE.Clock()
function render(time) {controls.update() // 阻尼控制器更新// 清除顏色和深度緩沖區renderer.clear();// 渲染層級 0 并應用后期處理camera.layers.set(0);composer.render();// 清除深度緩沖區,避免深度沖突renderer.clearDepth();// 渲染層級 1 不應用后期處理camera.layers.set(1);renderer.render(scene, camera);requestAnimationFrame(render); // 請求動畫幀
}
render()// 監聽畫面變化,更新渲染畫面
window.addEventListener('resize', () => {// 更新攝像頭camera.aspect = window.innerWidth / window.innerHeight;// 更新攝像機的投影矩陣camera.updateProjectionMatrix();// 更新渲染器renderer.setSize(window.innerWidth, window.innerHeight);// 設置渲染器的像素比renderer.setPixelRatio(window.devicePixelRatio)
})
</script>

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

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

相關文章

homebrew安裝配置Python(MAC版)

Mac系統自帶python路徑為: /System/Library/Frameworks/Python.framework/Versionbrew 安裝 Python3 在終端輸入以下命令&#xff1a; brew search python3 # 查看支持安裝的版本 brew install python3就可以輕松easy安裝python了&#xff0c;安裝完成后提示 查看 pyth…

如何建設網站?網站建設簡單步驟有哪些?

新手如何開展網站建設&#xff1f;網站建設包括哪些步驟&#xff1f; 在開展網站建設之前先清楚了解網站建設的流程和步驟&#xff1a;注冊域名、租用虛擬主機/服務器、建站工具的選取、網站建設流程詳細流程共計7步&#xff0c;分別是注冊域名、域名實名制、服務器或虛擬主機、…

當K8S容器沒有bash時高階排查手段

遇到容器沒有bash甚至沒有sh的情況&#xff0c;就像被困在沒有門窗的房間。但真正的K8S運維高手&#xff0c;即使面對這種情況也能游刃有余。 一、無Shell容器三大特征 極簡主義&#xff1a;移除所有非必要組件&#xff08;如/bin/sh&#xff09;安全加固&#xff1a;減少攻擊…

Python案例實戰《手勢識別》

目錄 1、效果圖2、手勢識別關鍵步驟&#xff08;1&#xff09; 導入必要的庫&#xff08;2&#xff09;配置 MediaPipe&#xff08;3&#xff09;啟動攝像頭&#xff08;4&#xff09;設置手指張開判斷的距離閾值&#xff08;5&#xff09;計算手指之間的歐幾里得距離&#xff…

5G賦能農業物聯網:智能化種植的新紀元

5G賦能農業物聯網&#xff1a;智能化種植的新紀元 在農業領域&#xff0c;精準化、智能化已成為現代農業發展的方向。而5G的出現&#xff0c;讓農業物聯網&#xff08;Agri-IoT&#xff09;突破了傳統的瓶頸&#xff0c;真正實現了實時監測、高效數據傳輸、智能化決策&#xf…

VIVADO IP核整理(二)——FFT

目錄 IP 核配置IP 核接口s_axis_config_tdata 配置輸入輸出端口描述 仿真 參考&#xff1a;FFT IP核 詳細介紹 參考&#xff1a;官方文檔介紹 IP 核配置 在 IP Catalog 中搜索&#xff1a;Fast Fourier Transform 按照上圖所示進行配置&#xff0c;下文對配置內容進行詳述。 …

【計算機基礎】任意進制轉換方法詳解

文章目錄 一、通用進制轉換(整數部分)1. R進制轉十進制(整數)2. 十進制轉R進制(整數)二、通用進制轉換(小數部分)1. 十進制小數轉R進制2. R進制小數轉十進制三、二進制與十進制互轉(整數部分)1. 二進制轉十進制(整數)2. 十進制轉二進制(整數)四、二進制與十進制互…

鼠標交互初體驗:點擊屏幕生成彩色氣泡(EGE 庫基礎)

在圖形編程領域&#xff0c;實現與用戶的交互是讓程序變得生動有趣的關鍵環節。對于初學者來說&#xff0c;使用合適的圖形庫能大幅降低開發難度&#xff0c;快速實現創意想法。EGE 庫作為一款簡單易用且功能強大的 C/C 圖形庫&#xff0c;特別適合新手入門圖形交互編程。本文將…

Office 三大組件Excel、Word、Access 里 VBA 區別對比

以下是Excel、Word和Access在VBA中的主要區別對比及詳細說明: 核心對象模型 Excel Workbook(工作簿)→ Worksheet(工作表)→ Range(單元格區域) 核心圍繞單元格數據處理,如 Cells(1,1).Value = "數據" Word Document(文檔)→ Range(文本范圍)→ Paragrap…

【上位機——MFC】對象和控件綁定

對象和控件綁定 將控件窗口和類對象綁定具有兩大作用 如果和數據類對象綁定&#xff0c;對象和控件可以進行數據交換。 如果和控件類對象綁定&#xff0c;對象就可以代表整個控件。 與數據類型對象綁定的使用 數據類型對象和控件可實現數據交互重寫父類成員虛函數DoDataExch…

Excel處理控件Aspose.Cells教程:壓縮Excel文件完整指南

Excel 電子表格是管理、分析和可視化數據的有效工具&#xff0c;但隨著文件復雜度的增加&#xff0c;它們很快就會變得臃腫。無論是由于數據集龐大、嵌入圖片、格式過多還是隱藏工作表&#xff0c;Excel 文件的大小都可能迅速膨脹&#xff0c;導致打開速度變慢、難以通過電子郵…

軟考【軟考高級QA】

軟考高級QA 1.操作系統管理和調度進程時&#xff0c;有哪些狀態&#xff1f;&#xff08;5種&#xff09;2.操作系統管理和調度進程時&#xff0c;會進行哪些狀態轉換&#xff1f; 1.操作系統管理和調度進程時&#xff0c;有哪些狀態&#xff1f;&#xff08;5種&#xff09; …

神經網絡基礎-從零開始搭建一個神經網絡

一、什么是神經網絡 人工神經網絡&#xff08;Articial Neural Network&#xff0c;簡寫為ANN&#xff09;也稱為神經網絡&#xff08;NN),是一種模仿生物神經網絡和功能的計算模型&#xff0c;人腦可以看做是一個生物神經網絡&#xff0c;由眾多的神經元連接而成&#xff0c;…

Golang 接口 vs Rust Trait:一場關于抽象的哲學對話

一、引言 在現代編程語言中&#xff0c;接口&#xff08;Interface&#xff09; 和 Trait 是實現多態和抽象行為的關鍵機制。它們允許我們定義行為契約&#xff0c;讓不同的類型共享相同的語義接口&#xff0c;從而提升代碼的復用性和擴展性。 Go 和 Rust 分別代表了兩種截然…

java實現一個操作日志模塊功能,怎么設計

為了設計一個高效、可靠且可擴展的操作日志模塊&#xff0c;可以結合 ?AOP&#xff08;面向切面編程&#xff09;?、異步處理?&#xff08;多線程或MQ&#xff09;以及合理的存儲策略&#xff0c;具體方案如下&#xff1a; ?1. 技術選型與架構設計? ??(1) AOP 實現非侵…

【論文閱讀】HunyuanVideo: A Systematic Framework For Large Video Generative Models

HunyuanVideo: A Systematic Framework For Large Video Generative Models 原文摘要 研究背景與問題 視頻生成的變革性影響&#xff1a;近期視頻生成技術的進步深刻改變了個人生活與行業應用。 閉源模型的壟斷&#xff1a;主流視頻生成模型&#xff08;如Runway Gen-3、Luma …

在ubuntu中brpc框架安裝

下載最新release版本&#xff0c; 穩定性好&#xff0c; 網址鏈接。 一、解壓源碼包 # 解壓到當前目錄 tar -xzvf brpc-1.12.1.tar.gz# 進入解壓后的目錄 cd brpc-1.12.1二、安裝編譯依賴&#xff08;Ubuntu/Debian&#xff09; sudo apt update sudo apt install -y g make…

《深入理解 Java 虛擬機》筆記

文章目錄 最近筆記內存管理執行子系統程序編譯、代碼優化 老版本 最近筆記 內存管理 執行子系統 程序編譯、代碼優化 老版本

【Linuc】深入理解 Linux 文件權限

文章目錄 一、權限基礎解析1. 權限三元組2. 權限類型與數字映射二、查看文件權限三、修改權限實戰1. chmod 命令符號模式數字模式(推薦)2. chown 修改歸屬四、特殊權限機制1. SetUID (Set User ID)2. SetGID (Set Group ID)3. Sticky Bit五、高級權限管理1. 默認權限控制2. A…

RabbitMq學習(第一天)

文章目錄 1、mq(消息隊列)概述2、RabbitMQ環境搭建3、java基于AMQP協議操作RabbitMQ4、基于Spring AMQP操作RabbitMQ5、代碼中創建隊列與交換機①、配置類創建②、基于RabbitListener注解創建 6、RabbitMQ詳解①、work模型②、交換機1、Fanout(廣播)交換機2、Direct(定向)交換機…