給sprite上增加刷光動效

游戲引擎 —— cocos creator 3.52

此動效給動態修改尺寸的圖片增加一層刷光的效果,直接貼代碼

CCEffect %{techniques:- passes:- vert: sprite-vs:vertfrag: sprite-fs:fragdepthStencilState:depthTest: falsedepthWrite: falseblendState:targets:- blend: trueblendSrc: src_alphablendDst: one_minus_src_alphablendDstAlpha: one_minus_src_alpharasterizerState:cullMode: noneproperties:alphaThreshold: { value: 0.5 }# 自定義參數# 光束顏色lightColor: {value: [1.0, 1.0, 0.0, 1.0], editor: { type: color,tooltip: "光束顏色"} }# 光束中心點坐標lightCenterPoint: {value: [0.2, 0.2],editor: {tooltip: "光束中心點坐標" }}# 光束傾斜角度lightAngle: {value: 36.0,editor: {tooltip: "光束傾斜角度",range: [0.0, 360],} }# 光束寬度lightWidth: {value: 0.2,editor: {tooltip: "光束寬度"}}# 啟用光束漸變enableGradient: {value: 1.0,editor: {tooltip: "是否啟用光束漸變。0:不啟用,非0:啟用"}}# 裁剪掉透明區域上的光cropAlpha: {value: 1.0,editor: {tooltip: "是否裁剪透明區域上的光。0:不啟用,非0:啟用"}}# 是否啟用迷霧效果enableFog: {value: 0.0,editor: {tooltip: "是否啟用迷霧效果。0:不啟用,非0:啟用"}}# 橫向自動掃光速度crossSpeed: {value: 0.0,editor: {tooltip: "橫向自動掃光速度。0:不自動,非0:自動掃光的速度"}}# 縱向自動掃光速度verticalSpeed: {value: 0.0,editor: {tooltip: "縱向自動掃光速度:不自動,非0:自動掃光的速度"}}
}%CCProgram sprite-vs %{precision highp float;#include <cc-global>#include <output>#if USE_LOCAL#include <cc-local>#endifin vec3 a_position;in vec2 a_texCoord;in vec4 a_color;out vec4 v_color;out vec2 v_uv0;#if USE_TEXTUREin vec2 a_uv0;#endifvec4 vert () {vec4 pos = vec4(a_position, 1);#if USE_LOCALpos = cc_matWorld * pos;#endif#if USE_PIXEL_ALIGNMENTpos = cc_matView * pos;pos.xyz = floor(pos.xyz);pos = cc_matProj * pos;#elsepos = cc_matViewProj * pos;#endif#if USE_TEXTUREv_uv0 = a_uv0;#endifv_color = a_color;v_uv0 = a_texCoord;return pos;}
}%CCProgram sprite-fs %{precision highp float;#include <embedded-alpha>#include <alpha-test>#include <cc-global>in vec4 v_color;#if USE_TEXTUREin vec2 v_uv0;#pragma builtin(local)layout(set = 2, binding = 11) uniform sampler2D cc_spriteTexture;#endif#if ENABLE_LIGHTuniform PROPERTIES {// 光束顏色vec4 lightColor;// 光束中心點坐標vec2 lightCenterPoint;// 光束傾斜角度float lightAngle;// 光束寬度float lightWidth;// 啟用光束漸變// ps:編輯器還不支持 bool 類型的樣子,因此用float來定義float enableGradient;// 裁剪掉透明區域上的光// ps:編輯器還不支持 bool 類型的樣子,因此用float來定義float cropAlpha;   // 是否啟用迷霧效果// ps:編輯器還不支持 bool 類型的樣子,因此用float來定義float enableFog;// 橫向自動掃光速度// ps:編輯器還不支持 bool 類型的樣子,因此用float來定義float crossSpeed;// 縱向自動掃光速度// ps:編輯器還不支持 bool 類型的樣子,因此用float來定義float verticalSpeed;};/*** 添加光束顏色*/vec4 addLightColor(vec4 textureColor, vec4 lightColor, vec2 lightCenterPoint, float lightAngle, float lightWidth) {if(crossSpeed > 0.0){float time = cc_time.x * crossSpeed;lightCenterPoint.x = time - floor(time / (1.0 + lightWidth)) * (1.0 + lightWidth);}if(verticalSpeed > 0.0){float time = cc_time.x * verticalSpeed;lightCenterPoint.y = time - floor(time / (1.0 + lightWidth)) * (1.0 + lightWidth);}// 邊界值處理,沒有寬度就返回原始顏色if (lightWidth <= 0.0) {return textureColor;}// 計算當前 uv 到 光束 的距離float angleInRadians = radians(lightAngle);// 角度0與非0不同處理float dis = 0.0;if (mod(lightAngle, 180.0) != 0.0) {// 計算光束中心線下方與X軸交點的X坐標// 1.0 - lightCenterPoint.y 是將轉換為OpenGL坐標系,下文的 1.0 - y 類似float lightOffsetX = lightCenterPoint.x - ((1.0 - lightCenterPoint.y) / tan(angleInRadians));// 以當前點畫一條平行于X軸的線,假設此線和光束中心線相交的點為D點// 那么// D.y = uv0.y// D.x = lightOffsetX + D.y / tan(angle)float dx = lightOffsetX + (1.0 - v_uv0.y) / tan(angleInRadians);// D 到當前 uv0 的距離就是// dis = |uv0.x - D.x|float offsetDis = abs(v_uv0.x - dx);// 當前點到光束中心線的的垂直距離就好算了dis = sin(angleInRadians) * offsetDis;} else {dis = abs(v_uv0.y - lightCenterPoint.y);}float a = 1.0 ;// 裁剪掉透明區域上的點光if (bool(cropAlpha)) {a *= step(0.5, textureColor.a);}// 裁剪掉光束范圍外的uv(迷霧效果)if (!bool(enableFog)) {a *= step(dis, lightWidth * 0.5);}// 加入從中心往外漸變的效果if (bool(enableGradient)) {a *= 1.0 - dis / (lightWidth * 0.5);a*=lightColor.a;}// 計算出擴散范圍內,不同 uv 對應的實際擴散顏色值vec4 finalLightColor = lightColor * a;// 混合顏色:在原始圖像顏色上疊加擴散顏色return textureColor * textureColor.a + finalLightColor;}#endifvec4 frag () {vec4 o = vec4(1, 1, 1, 1);#if USE_TEXTUREo *= CCSampleWithAlphaSeparated(cc_spriteTexture, v_uv0);#if CC_USE_ALPHA_ATLAS_TEXTUREo.a *= CCSampleWithAlphaSeparated(cc_spriteTexture, v_uv0 + vec2(0, 0.5)).r;#endif#endifo *= v_color;ALPHA_TEST(o);#if ENABLE_LIGHTo = addLightColor(o, lightColor, lightCenterPoint, lightAngle, lightWidth);#endifreturn o;}
}%

編輯器:

勾選ENABLE LIGHT開關,可以設置刷光的顏色、位置、角度、刷光的寬度等等屬性,根據實際需求選擇;

增加橫向和縱向自動掃光速度,為0時不會自動,大于0時會根據設置的值播放動畫,代碼中也可以動態修改該參數

代碼播放:

//先獲取到材質,如果是編輯器綁好的只需要獲取cc.Sprite組件下的customMaterial就能獲取到this.sprArrowMat = this.sprArrow.getComponent(cc.Sprite).customMaterial;//在計時器里面動態修改Center Pointupdate(dt){if (this.sprArrowMat ) {if (this.sprArrowChgValue <= -0.1) {this.sprArrowChgValue = 1;}else {this.sprArrowChgValue -= dt / 2;}//動態設置刷光的位置this.sprArrowMat.setProperty("lightCenterPoint", cc.v2(0, this.sprArrowChgValue));//動態設置顏色,漸變效果this.sprArrowMat.setProperty("lightColor", cc.color(255, 200 - 120 * this.sprArrowChgValue ,0));}}

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

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

相關文章

Charles 網絡抓包工具詳解與實戰指南

文章目錄 導讀軟件版本Charles基本原理核心功能下載及安裝界面介紹網絡包展示 常用場景介紹PC 端網絡抓包移動端網絡抓包PC 端配置手機端配置 開啟 SSL 代理PC 端和移動端 CA 證書安裝Charles 直接安裝Charles 下載 CA 文件手動安裝 常用操作請求重發請求改寫、動態改寫斷點&am…

Qt+SQLITE數據庫設計的會員卡管理系統

一、前言 本項目演示在QT中使用SQLITE數據庫存儲數據管理的過程。當前以會員卡管理系統為例,寫了一個界面,完成會員卡的注冊,添加,充值,查詢,注銷,導出顧客信息EXECL表格 等功能的實現。 演示 SQLITE數據庫的建表、增、刪、改、查等語句功能實現。 SQLite是一款輕型的…

計算機網絡——物理層相關習題(計算機專業考研全國統考歷年真題)

目錄 2012-34 原題 答案 解析 2018-34 原題 答案 解析 2009/2011-34 原題 答案 解析 2016-34 原題 答案 解析 2014-35/2017-34 原題 答案 解析 2013-34 原題 答案 解析 2015-34 原題 答案 解析 物理層的協議眾多&#xff0c;這是因為物理層…

為啥 有了錘子,看啥都是釘子?

壞處&#xff1a;有了錘子&#xff0c;看啥都是釘子&#xff0c;有何壞處&#xff1f; 事倍功半&#xff0c;甚至適得其反。比如具有高并發設計經驗的人&#xff0c;在初創系統初期&#xff0c;就設計高并發架構&#xff0c;其復雜度大概率無法支持試點業務快速落地&#xff0…

【DevOps】Git 圖文詳解(九):工作中的 Git 實踐

本系列包含&#xff1a; Git 圖文詳解&#xff08;一&#xff09;&#xff1a;簡介及基礎概念Git 圖文詳解&#xff08;二&#xff09;&#xff1a;Git 安裝及配置Git 圖文詳解&#xff08;三&#xff09;&#xff1a;常用的 Git GUIGit 圖文詳解&#xff08;四&#xff09;&a…

【SpringMVC】 三層架構

一.lombok工具包 中央倉庫查找這個工具包:https://mvnrepository.com/ 給類添加Data注解就可以獲取gettter和setter方法 , 這樣我們就不必寫getter 和 setter 方法. 也可以給成員屬性添加單獨的getter 和 setter , 針對某個成員屬性單獨添加setter或setter方法. 二.如果使用spr…

ORACLE手動建庫

1.確定oracle的實例名,以及數據庫名 實例名稱: ORACLE_SIDtest 數據庫名稱: test 2.手工創建如下目錄&#xff1a; /oracle/admin/test/adump --對應的是spfile里參數audit_file_dest …

一起學docker系列之七docker容器卷技術

目錄 1 為什么使用容器數據卷&#xff1f;2 數據卷的特點和優勢3 使用數據卷的方法3.1 創建容器并掛載數據卷3.2 容器間數據卷的共享與繼承 4 數據卷的權限設置5 注意事項5.1 解決權限問題5.2 路徑自動創建 結語 對于容器化應用程序的數據管理和持久化&#xff0c;Docker 數據卷…

鏈表的回文結構

題目描述 題目鏈接&#xff1a;鏈表的回文結構_牛客題霸_牛客網 (nowcoder.com) 題目分析 我們的思路是&#xff1a; 找到中間結點逆置后半段比對 我們可以簡單畫個圖來表示一下&#xff1a; ‘ 奇數和偶數都是可以的 找中間結點 我們可以用快慢指針來找中&#xff1a;l…

如何實現圖片輪播(python版)

為了實現圖片自動輪播&#xff0c;我們可以使用Python編寫一個簡單的腳本。首先&#xff0c;我們需要安裝一個名為Pillow的庫來處理圖片。在命令行中輸入以下命令進行安裝&#xff1a; pip install Pillow 接下來&#xff0c;我們編寫一個名為image_slideshow.py的腳本&#x…

leetcode.884——字符串分割(substr),哈希(unordered_map)的練習

884. 兩句話中的不常見單詞 句子 是一串由空格分隔的單詞。每個 單詞 僅由小寫字母組成。 如果某個單詞在其中一個句子中恰好出現一次&#xff0c;在另一個句子中卻 沒有出現 &#xff0c;那么這個單詞就是 不常見的 。 給你兩個 句子 s1 和 s2 &#xff0c;返回所有 不常用…

成為AI產品經理——模型構建流程(下)

目錄 1.模型訓練 2.模型驗證 3.模型融合 4.模型部署 上節課我們講了模型設計、特征工程&#xff0c;這節課我們來講模型構建剩下的三個部分&#xff1a;模型訓練、模型驗證和模型融合。 1.模型訓練 模型訓練就是要不斷地訓練、驗證、調優直至讓模型達到最優。 那么怎么達…

Python“牽手”京東商品詳情接口運營場景,京東商品詳情接口調用指南

京東商品詳情接口是一種程序化的接口&#xff0c;通過這個接口&#xff0c;商家或開發者可以使用自己的編程技能&#xff0c;獲取京東平臺上的商品詳細信息。這個接口允許商家根據自身的需求&#xff0c;獲取商品的標題、價格、促銷價、優惠券、庫存、銷量、詳情圖片、SKU屬性、…

YOLOv5分割訓練,從數據集標注到訓練一條龍解決

最近進行了分割標注&#xff0c;感覺非常好玩&#xff0c;也遇到了很多坑&#xff0c;來跟大家分享一下&#xff0c;老樣子有問題評論區留言&#xff0c;我會的就會回答你。 第一步&#xff1a;準備數據集 1、安裝標注軟件labelme如果要在計算機視覺領域深入的同學&#xff0…

TC397 EB MCAL開發從0開始系列 之 [15.2] Fee配置 - QsBlock demo

一、Fee配置1、配置目標2、目標依賴2.1 硬件使用2.2 軟件使用2.3 新增模塊3、EB配置3.1 配置講解3.2 模塊配置3.2.1 MCU配置3.2.2 PORT配置3.2.3 Fls_17_Dmu配置3.2.4 Fee配置3.2.5 Irq配置3.2.6 ResourceM配置4、ADS代碼編寫及調試4.1 工程編譯4.2 測試結果4.3 測例源碼->

基于STC12C5A60S2系列1T 8051單片讀寫掉電保存數據IIC總線器件24C02一字節并顯示在液晶顯示器LCD1602上應用

基于STC12C5A60S2系列1T 8051單片讀寫掉電保存數據IIC總線器件24C02一字節并顯示在液晶顯示器LCD1602上應用 STC12C5A60S2系列1T 8051單片機管腳圖STC12C5A60S2系列1T 8051單片機I/O口各種不同工作模式及配置STC12C5A60S2系列1T 8051單片機I/O口各種不同工作模式介紹IIC通信簡單…

致遠M3 反序列化RCE漏洞復現(XVE-2023-24878)

0x01 產品簡介 M3移動辦公是致遠互聯打造的一站式智能工作平臺&#xff0c;提供全方位的企業移動業務管理&#xff0c;致力于構建以人為中心的智能化移動應用場景&#xff0c;促進人員工作積極性和創造力&#xff0c;提升企業效率和效能&#xff0c;是為企業量身定制的移動智慧…

15.Python 異常處理和程序調試

1. 異常處理 異常就是在程序執行過程中發生的超出預期的事件。一般情況下&#xff0c;當程序無法正常執行時&#xff0c;都會拋出異常。 在開發過程中&#xff0c;由于疏忽或考慮不周&#xff0c;出現的設計錯誤。因此&#xff0c;在后期程序調試中應該根據錯誤信息&#xff…

系統高可用設計-有感

文章目錄 系統設計原則是 冗余 取舍系統運維的原則是規避線上異常 高可用設計通常從 系統設計和 系統運維 2 個層面來著手突破。 系統設計原則是 冗余 取舍 冗余&#xff1a;指集群部署 故障轉移取舍&#xff1a;常見手段包括&#xff1a;超時控制、降級、限流 系統運維…

音視頻項目—基于FFmpeg和SDL的音視頻播放器解析(二十)

介紹 在本系列&#xff0c;我打算花大篇幅講解我的 gitee 項目音視頻播放器&#xff0c;在這個項目&#xff0c;您可以學到音視頻解封裝&#xff0c;解碼&#xff0c;SDL渲染相關的知識。您對源代碼感興趣的話&#xff0c;請查看基于FFmpeg和SDL的音視頻播放器 如果您不理解本…