Three.js 實現材質邊緣通道發光效果

相關API的使用:

1. EffectComposer(渲染后處理的通用框架,用于將多個渲染通道(pass)組合在一起創建特定的視覺效果)

2. RenderPass(是用于渲染場景的通道。它將場景和相機作為輸入,使用Three.js默認的渲染器(renderer)來進行場景渲染,并將結果輸出給下一個渲染通道)

3. OutlinePass(是一個用于創建邊緣線(輪廓)效果的通道。它基于深度信息以及法線信息,將與邊緣相接觸的物體進行描邊,以突出顯示物體的輪廓)

4. ShaderPass(是一個自定義著色器的通道。它允許你指定自定義的著色器代碼,并將其應用于場景的渲染結果。這樣你可以創建各種各樣的圖形效果,如高斯模糊、后處理效果等)

在上一篇 Three.js加載外部glb,fbx,gltf,obj 模型文件 的文章基礎上加入createEffectComposer(創建效果合成器)的方法 和onChangeModelMeaterial(選擇材質)的方法

首先引入相關的api

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 { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js'
import { FXAAShader } from 'three/examples/jsm/shaders/FXAAShader.js'

創建效果合成器方法

	// 創建效果合成器createEffectComposer() {const { clientHeight, clientWidth } = this.containerthis.effectComposer = new EffectComposer(this.renderer)const renderPass = new RenderPass(this.scene, this.camera)this.effectComposer.addPass(renderPass)this.outlinePass = new OutlinePass(new THREE.Vector2(clientWidth, clientHeight), this.scene, this.camera)this.outlinePass.visibleEdgeColor = new THREE.Color('#4d57fd') // 可見邊緣的顏色this.outlinePass.hiddenEdgeColor = new THREE.Color('#8a90f3') // 不可見邊緣的顏色this.outlinePass.edgeGlow = 2.0 // 發光強度this.outlinePass.edgeThickness = 1 // 邊緣濃度this.outlinePass.edgeStrength = 4 // 邊緣的強度,值越高邊框范圍越大this.outlinePass.pulsePeriod = 100 // 閃爍頻率,值越大頻率越低this.effectComposer.addPass(this.outlinePass)// 抗鋸齒let effectFXAA = new ShaderPass(FXAAShader)effectFXAA.uniforms.resolution.value.set(1 / clientWidth, 1 / clientHeight)this.effectComposer.addPass(effectFXAA)}

選擇材質方法,通過getObjectByName傳入材質名稱 獲取到需要設置發光效果的材質,在通過設置效果合成器的 selectedObjects參數 來實現材質發光效果·

  onChangeModelMeaterial(name) {const mesh = this.model.getObjectByName(name)this.outlinePass.selectedObjects = [mesh]	}

將原sceneAnimation(場景動畫幀渲染的方法)中的 renderer.render() 改為 controls.update()

	sceneAnimation() {this.renderAnimation = requestAnimationFrame(() => this.sceneAnimation())this.effectComposer.render()this.controls.update()//this.renderer.render(this.scene, this.camera)}

完整的代碼可參考:https://gitee.com/ZHANG_6666/Three.js3D/blob/master/src/views/renderModel.js

界面效果對比
在這里插入圖片描述
在這里插入圖片描述

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

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

相關文章

使用script標簽解決跨域問題,但是只能使用get請求,且不需要獲取get請求的數據,例如埋點,只需要觸發后發送get請求,而不需要獲取返回的參數

在項目中,使用埋點的時候,因為使用的是外部提供的接口,所以直接請求的時候,前端會報跨域的問題,本著不麻煩后端的想法,怎怎么前端實現跨域而完全不需要后段的配合,這時候就想到了通過script標簽…

【簡單認識zookeeper+kafka分布式消息隊列集群的部署】

文章目錄 一、zookeeper1、定義2、工作機制3、Zookeeper 特點4、Zookeeper 數據結構5、Zookeeper 應用場景6、Zookeeper 選舉機制(1)第一次啟動選舉機制(2)非第一次啟動選舉機制 7、部署zookeeper群集 二、消息隊列概述1、為什么需…

百度云盤發展歷程與影響

摘要: 百度云盤作為中國領先的云存儲與共享服務提供商,自其創立至今經歷了多個階段的發展與變革。本論文通過對百度云盤的歷史回顧與分析,探討了其在技術、商業模式、用戶體驗以及對社會的影響等方面的演變。同時,還分析了在競爭激…

使用luarocks安裝cjson并使用cjson

1.luarocks安裝 wget https://luarocks.org/releases/luarocks-3.3.1.tar.gz --no-check-certificatels -lrthtar -xvf luarocks-3.3.1.tar.gz mv luarocks-3.3.1 /usr/local/cd /usr/local/luarocks-3.3.1/./configure --prefix/usr/local/luarocks-3.3.1 vim /etc/profilePAT…

Mac下??Git如何下載/上傳遠程倉庫

使用終端檢查電腦是否安裝Git git --version 通過此文章安裝Git ?? ???????傳送門🌐 方式1??使用終端操作 1.下載——克隆遠程倉庫到本地 git clone [遠程地址] 例:git clone https://gitee.com/lcannal/movie.git? 2.編…

Windows - UWP - 為UWP應用創建桌面快捷方式

Windows - UWP - 為UWP應用創建桌面快捷方式 前言 這是一個較為簡單的方式,不需要過多的命令行。 How 首先Win R -> shell:AppsFolder -> 回車, 這將顯示電腦上的已安裝應用(Win32 & UWP): 找到想要創建…

【Nginx】Nginx負載均衡

負載均衡:通過反向代理來實現 Nginx的七層代理和四層代理: 七層是最常用的反向代理方式,只能配置在nginx配置文件的http模塊當中 ;配置的方法名稱為:upstream模塊,不能寫在server中也不能寫在location中&a…

ZABBIX 6.4的完全安裝步驟

此安裝文檔是我一步一步的驗證過的,按步驟來可以順暢的安成ZABBIX6.4的部署。 Zabbix 主要有以下幾個組件組成: Zabbix Server6.4:Zabbix 服務端,是 Zabbix 的核心組件。它負責接收監控數據并觸發告警,還負責將監控數…

Leetcode

持續更新中。。。。。。。。。。。。。。 day 20230811 /*** 給你一個正方形矩陣 mat&#xff0c;請你返回矩陣對角線元素的和。* <p>* 請你返回在矩陣主對角線上的元素和副對角線上且不在主對角線上元素的和* <p>* 不包括 相交的元素只計算一次* <p>* 輸入&…

(2023Arxiv)Meta-Transformer: A Unified Framework for Multimodal Learning

論文鏈接&#xff1a;https://arxiv.org/abs/2307.10802 代碼鏈接&#xff1a;https://github.com/invictus717/MetaTransformer 項目主頁&#xff1a;https://kxgong.github.io/meta_transformer/ 【注】&#xff1a;根據實驗結果來看&#xff0c;每次輸入一種數據源進行處…

Java項目初始化ES、MYSQL表結構及表數據

一、初始化MYSQL數據 public boolean initMysql() throws Exception {log.info("initMysql.start");//獲取所連接的數據庫名稱String database systemMapper.getDatabase();if (StringUtils.isBlank(database)) {throw new BusinessException("連接數據庫失敗,…

微信小程序時鐘

微信小程序自定義時鐘&#xff0c;模擬翻牌時鐘。1、頁面布局 <view class"date-time-box"><view class"date-box">{{nowDate}}</view><view class"time-box"><view><image class"pic01 {{move[0]?move…

代碼隨想錄算法訓練營第45天|動態規劃part07

8.11 周五 70. 爬樓梯 &#xff08;進階&#xff09; 322. 零錢兌換 279.完全平方數 詳細布置 70. 爬樓梯 &#xff08;進階&#xff09; 題目&#xff1a;一次可爬1或2個臺階&#xff0c;問n個臺階有多少種方式 題解&#xff1a; 1、轉換為完全背包問題&#xff0c;nums[1…

Ajax-AJAX請求的不同發送方式

&#x1f954;&#xff1a;你一定能成為想要成為的人 發送AJAX請求不同方式 發送AJAX請求不同方式1、jQuery發送AJAX請求2、axios發送AJAX請求&#xff08;重點&#xff09;3、fetch發送AJAX請求 發送AJAX請求不同方式 1、jQuery發送AJAX請求 首先需要jquery的js文件&#xf…

Vc - Qt - QToolButton

QToolButton 是 Qt 框架中的一個類&#xff0c;是 QPushButton 的子類。它可以顯示一個可單擊的按鈕&#xff0c;并且可以與彈出菜單、圖標和文本等進行關聯。 QToolButton的一些常見特性和用法包括&#xff1a; 設置文本&#xff1a;使用 setText() 函數設置按鈕上的文本。設置…

webpack 熱更新的實現原理

webpack 的熱更新?稱熱替換&#xff08;Hot Module Replacement&#xff09;&#xff0c;縮寫為HMR。這個機制可以做到不?刷新瀏覽器?將新變更的模塊替換掉舊的模塊。 原理&#xff1a; ?先要知道 server 端和 client 端都做了處理?作&#xff1a; 在 webpack 的 watch…

uniapp點擊輸入框時鍵盤不上推頁面

adjust-position設置為false&#xff0c;然后監聽鍵盤的高度賦值給輸入框bottom 這里還一個非常重要的地方&#xff0c;在根元素設置touchmove.stop.prevent&#xff0c;這樣在ios上頁面就不會滾動&#xff0c;不影響其他組件內部滾動 onReady() {// 監聽鍵盤高度變化&#x…

Redis集群 (三十九)

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 目錄 前言 一、Redis主從復制 1.1 概念 1.2 作用 1.3 缺點 1.4 流程 1.5 搭建 1.6 驗證 二、Reids哨兵模式 2.1 概念 2.2 作用 2.3 缺點 2.4 結構 2.5 搭建 2.6 驗證 三、Red…

confluent-kafka 和kafka-python操作kafka,并封裝成一個類

為了向Kafka集群生產和消費消息&#xff0c;我們可以使用confluent-kafka庫&#xff0c;它是Confluent為Python提供的官方Kafka客戶端。以下是一個簡化的示例&#xff0c;展示如何將Kafka的生產者和消費者操作封裝到一個類中&#xff1a; 首先&#xff0c;確保你已經安裝了所需…