Compare commits
86 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
2739eb9391 | ||
|
f673d8c4a0 | ||
|
18d699fcf5 | ||
|
bc952f3083 | ||
|
5b50e4bf0d | ||
|
c86c14c972 | ||
|
04959cdc13 | ||
|
6ea6375fdb | ||
|
1f4110d26f | ||
|
549bbdf5e2 | ||
|
722914d5c4 | ||
|
88c2347889 | ||
|
5529bd341a | ||
|
1fc137c5f8 | ||
|
6b0cd84c99 | ||
|
649d099bbb | ||
|
c897d7f000 | ||
|
261f390687 | ||
|
d967209a71 | ||
|
72f9037fea | ||
|
7cd2edc0df | ||
|
286fa64ba0 | ||
|
500d0a1614 | ||
|
f2d62a70cb | ||
|
20f72cfd27 | ||
|
cbdbc85ef3 | ||
|
b5390ea84f | ||
|
02d94a943d | ||
|
f9198a3b14 | ||
|
75d4d024bf | ||
|
1c5012ab65 | ||
|
c65106941e | ||
|
c2693616d0 | ||
|
b1196e3808 | ||
|
9865eedc34 | ||
|
f109455742 | ||
|
95a7a51357 | ||
|
4ed91e0a3e | ||
|
f3c0ad079a | ||
|
f1256c5185 | ||
|
f58540ead2 | ||
|
bfe61e6494 | ||
|
c64f1ab144 | ||
|
c047efb715 | ||
|
deebc64aa2 | ||
|
af8aa46786 | ||
|
4ca3fe34b0 | ||
|
eff439ef20 | ||
|
e257d1f8b9 | ||
|
70a3b95f10 | ||
|
6402c68fbc | ||
|
dccf05cfde | ||
|
1ff0ee3d40 | ||
|
209e22fcca | ||
|
e7e084b958 | ||
|
acf72e0e4f | ||
|
c95329e7ab | ||
|
9160ad38b7 | ||
|
f6f93bad2c | ||
|
45e22b866a | ||
|
9ca7bd9a02 | ||
|
69b863c490 | ||
|
6286aebb8c | ||
|
ae865a7c5f | ||
|
40e905fc81 | ||
|
9f28ef4305 | ||
|
ba90b2170c | ||
|
7e197c0892 | ||
|
6ac69a841a | ||
|
f39e39e248 | ||
|
27e819fb2c | ||
|
079c16a2e5 | ||
|
6938ad54df | ||
|
a6749d9449 | ||
|
68c2a6f5a6 | ||
|
c60f43400f | ||
|
10b361b92f | ||
|
6ba48af6aa | ||
|
7380cf3292 | ||
|
9e3ca8fce6 | ||
|
6df0bd18fd | ||
|
f97e0d36dc | ||
|
726ebbaa4f | ||
|
3d96f8857f | ||
|
d9d2192fb3 | ||
|
0bbce3b0bf |
29
CHANGELOG.md
29
CHANGELOG.md
@@ -1,5 +1,34 @@
|
|||||||
# ChangeLog
|
# ChangeLog
|
||||||
|
|
||||||
|
## 0.9.0 (2020-02-17)
|
||||||
|
|
||||||
|
- 支持 Cocos Creator v2.3.0
|
||||||
|
- 由于2.3.0和2.2.2,2.2.1差别较大,因此,此Tag的最新项目已经无法在2.2.1,2.2.2中重新打开,如果确实需要在 2.2.1,2.2.2 中打开,请先切换到旧版本的tag(`0.8.0`),才能用 2.2.1,2.2.2打开
|
||||||
|
|
||||||
|
## 0.8.0 (2020-02-07)
|
||||||
|
|
||||||
|
- 支持 Cocos Creator v2.2.2
|
||||||
|
|
||||||
|
## 0.7.0 (2020-02-07)
|
||||||
|
|
||||||
|
- 加入高斯模糊V1版本(纯原理篇)
|
||||||
|
|
||||||
|
## 0.6.0 (2020-01-17)
|
||||||
|
|
||||||
|
- 加入新的圆角裁剪特效 v2 ,支持任意宽高纹理圆角裁剪
|
||||||
|
|
||||||
|
## 0.5.0 (2020-01-13)
|
||||||
|
|
||||||
|
- 加入扫光特效
|
||||||
|
|
||||||
|
## 0.4.0 (2020-01-12)
|
||||||
|
|
||||||
|
- 加入点光特效
|
||||||
|
|
||||||
|
## 0.3.0 (2020-01-09)
|
||||||
|
|
||||||
|
- 加入圆角裁剪特效
|
||||||
|
|
||||||
## 0.2.0 (2020-01-05)
|
## 0.2.0 (2020-01-05)
|
||||||
|
|
||||||
- 加入灰度渐变特效
|
- 加入灰度渐变特效
|
||||||
|
68
README.md
68
README.md
@@ -1,34 +1,47 @@
|
|||||||
# Cocos Creator Shader Effect Demo
|
# Cocos Creator Shader Effect Demo
|
||||||
|
|
||||||
[](CHANGELOG.md)
|
[](CHANGELOG.md)
|
||||||
[](LICENSE)
|
[](LICENSE)
|
||||||
|
[](http://www.cocos.com/creator)
|
||||||
|
[](http://www.cocos.com/creator)
|
||||||
[](http://www.cocos.com/creator)
|
[](http://www.cocos.com/creator)
|
||||||
|
|
||||||
## 项目说明
|
|
||||||
|
## 一、项目说明
|
||||||
|
|
||||||
1. 此项目为我在学习过程中的一些分享和实现,因此项目名字以 **`Demo`** 为后缀。
|
1. 此项目为我在学习过程中的一些分享和实现,因此项目名字以 **`Demo`** 为后缀。
|
||||||
2. 项目重点在于 **「渔」**,不在于 **「鱼」** 。
|
2. 项目重点在于 **「渔」**,不在于 **「鱼」** 。
|
||||||
3. 如果你有意将此Demo中的效果加入到你的项目中,**请认真评估是否适合你的项目使用!**
|
3. 如果你有意将此Demo中的效果加入到你的项目中,**请认真评估是否适合你的项目使用!**
|
||||||
|
4. 本项目支持 Cocos Creator `v2.3.0` 、 ~~`v2.2.2`~~ 、 ~~`v2.2.1`~~
|
||||||
|
1. 项目当前正在使用 v2.3.0 开发
|
||||||
|
2. 由于2.3.0和2.2.2,2.2.1差别较大,因此,`master`分支的最新项目已经无法在2.2.1,2.2.2中重新打开,如果确实需要在 2.2.1,2.2.2 中打开,请先切换到旧版本的tag(`0.8.0`),才能用 2.2.1,2.2.2打开
|
||||||
|
|
||||||
## 系列文章
|
## 二、系列文章
|
||||||
|
|
||||||
* [Cocos Creator Shader Effect 系列 - 0 - 前言](https://www.jianshu.com/p/20b906d7269c)
|
* [Cocos Creator Shader Effect 系列 - 0 - 前言](https://www.jianshu.com/p/20b906d7269c)
|
||||||
* [Cocos Creator Shader Effect 系列 - 1 - 材质,Effect,Inspector,纹理之间的关系](https://www.jianshu.com/p/ca28666d25d2)
|
* [Cocos Creator Shader Effect 系列 - 1 - 材质,Effect,Inspector,纹理之间的关系](https://www.jianshu.com/p/ca28666d25d2)
|
||||||
* [Cocos Creator Shader Effect 系列 - 2 - Effect 文件解读](https://www.jianshu.com/p/bae75612ef48)
|
* [Cocos Creator Shader Effect 系列 - 2 - Effect 文件解读](https://www.jianshu.com/p/bae75612ef48)
|
||||||
* [Cocos Creator Shader Effect 系列 - 3 - Effect 文件调试](https://www.jianshu.com/p/2fd028aa0bb8)
|
* [Cocos Creator Shader Effect 系列 - 3 - Effect 文件调试](https://www.jianshu.com/p/2fd028aa0bb8)
|
||||||
* [Cocos Creator Shader Effect 系列 - 4 - 老照片特效](https://www.jianshu.com/p/711a54ff2fa0)
|
* [Cocos Creator Shader Effect 系列 - 4 - 老照片特效](https://www.jianshu.com/p/711a54ff2fa0)
|
||||||
|
* [Cocos Creator Shader Effect 系列 - 5 - 马赛克/像素化特效](https://www.jianshu.com/p/40e72ab76afd)
|
||||||
|
* [Cocos Creator Shader Effect 系列 - 6 - 内发光特效](https://www.jianshu.com/p/326b73f86ecc)
|
||||||
|
* [Cocos Creator Shader Effect 系列 - 7 - 点光/扫光特效](https://www.jianshu.com/p/8ff03b34b0bd)
|
||||||
|
* [Cocos Creator Shader Effect 系列 - 8 - 高斯模糊](https://www.jianshu.com/p/9e42cbb1d4a8)
|
||||||
|
|
||||||
|
|
||||||
* 编写中...
|
* 编写中...
|
||||||
|
|
||||||
|
|
||||||
## 特效预览
|
|
||||||
|
|
||||||
那么现在,我们先来轻松地看下有哪些特效效果吧~
|
那么现在,我们先来轻松地看下有哪些特效效果吧~
|
||||||
|
|
||||||
### 内发光([实现原理及使用说明]() 编写中... ,催更麻烦移步一下到文末 **激活作者** 😜)
|
## 三、特效预览
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### 内发光([实现原理](https://www.jianshu.com/p/326b73f86ecc))
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 马赛克([实现原理及使用说明]() 编写中... ,催更麻烦移步一下到文末 **激活作者** 😜)
|
### 马赛克/像素化([实现原理](https://www.jianshu.com/p/40e72ab76afd))
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@@ -40,20 +53,51 @@
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
### 点光([实现原理](https://www.jianshu.com/p/8ff03b34b0bd))(2020.01.12更新)
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 扫光(实现原理同点光一样,可参考[点光实现原理文章](https://www.jianshu.com/p/711a54ff2fa0))(2020.01.13更新)
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 圆角裁剪-v1(2020.01.17更新)
|
||||||
|
|
||||||
|
> * 声明:此特效为搬运过来的特效,非原创。
|
||||||
|
> * 修改的地方:搬运后,在原来的主要代码上加入了自己的理解注释
|
||||||
|
> * 实现原理:参考文章 [《圆角计算 Shader》](https://www.cnblogs.com/jqm304775992/p/4987793.html)
|
||||||
|
> * 参考代码:Cocos 论坛帖子[《分享更高效的 creator 裁圆角头像 shader》](https://forum.cocos.org/t/creator-shader-2019-10-22-2-2-0/82548) 和对应的 [实现代码](https://github.com/yanjifa/shaderDemo/blob/master/assets/Effect/CircleAvatar.effect)
|
||||||
|
|
||||||
|
**此版本存在局限性:只有在正方形纹理上,才能裁剪出圆角,在非正方形上,无法裁剪出圆角,具体变现为有拉伸效果**
|
||||||
|
|
||||||
|
如:下面GIF中第3到5秒演示所示,黄色和红色的非正方形纹理的圆角明显被拉伸
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 圆角裁剪-v2(2020.01.17更新)
|
||||||
|
|
||||||
|
在 **圆角裁剪-v1** 的原理基础上,新增支持任意宽高纹理的圆角裁剪
|
||||||
|
|
||||||
|
如:下面Gif中第3到5秒演示所示,黄色和红色的非正方形纹理也能裁剪出圆角效果
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 高斯模糊-V1([实现原理](https://www.jianshu.com/p/9e42cbb1d4a8))2020.02.07更新)
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
### 外发光(完善中...)
|
### 外发光(完善中...)
|
||||||
|
|
||||||
### 外描边(完善中...)
|
### 外描边(完善中...)
|
||||||
|
|
||||||
## TODO
|
## 四、TODO
|
||||||
|
|
||||||
* [ ] 图像裁剪
|
|
||||||
* [ ] 图像模糊
|
* [ ] 图像模糊
|
||||||
* [ ] 闪光
|
|
||||||
* [ ] 波浪
|
* [ ] 波浪
|
||||||
* [ ] 雨滴
|
* [ ] 雨滴
|
||||||
* [ ] ...
|
* [ ] ...
|
||||||
|
|
||||||
## 支持一下作者吧
|
## 五、支持一下作者吧
|
||||||
|
|
||||||
如果此项目对你学习和理解Shader有帮助,不妨支持一下我吧~
|
如果此项目对你学习和理解Shader有帮助,不妨支持一下我吧~
|
||||||
|
|
||||||
|
@@ -1,15 +1,15 @@
|
|||||||
{
|
{
|
||||||
"ver": "1.0.23",
|
"ver": "1.0.25",
|
||||||
"uuid": "8f277982-dc0a-4030-90cc-b336a928a372",
|
"uuid": "8f277982-dc0a-4030-90cc-b336a928a372",
|
||||||
"compiledShaders": [
|
"compiledShaders": [
|
||||||
{
|
{
|
||||||
"glsl1": {
|
"glsl1": {
|
||||||
"vert": "\nprecision highp float;\nuniform mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\n\nattribute vec3 a_position;\n\nattribute vec4 a_color;\n\nvarying vec4 v_color;\n\n#if USE_TEXTURE\n\nattribute vec2 a_uv0;\n\nvarying vec2 v_uv0;\n#endif\n\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n\n v_color = a_color;\n\n gl_Position = pos;\n}\n",
|
"vert": "\nprecision highp float;\nuniform mediump mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\nattribute vec3 a_position;\nattribute vec4 a_color;\nvarying vec4 v_color;\n#if USE_TEXTURE\nattribute vec2 a_uv0;\nvarying vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}",
|
||||||
"frag": "\nprecision highp float;\n\n#if USE_ALPHA_TEST\n \n uniform float alphaThreshold;\n#endif\n\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\n\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\n\nvarying vec4 v_color;\n\n#if USE_TEXTURE\n\nvarying vec2 v_uv0;\n\nuniform sampler2D texture;\n#endif\n\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n\n #if USE_TEXTURE\n o *= texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n\n o *= v_color;\n\n ALPHA_TEST(o);\n\n gl_FragColor = o;\n}\n"
|
"frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvarying vec4 v_color;\n#if USE_TEXTURE\nvarying vec2 v_uv0;\nuniform sampler2D texture;\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n o *= texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n}"
|
||||||
},
|
},
|
||||||
"glsl3": {
|
"glsl3": {
|
||||||
"vert": "\nprecision highp float;\nuniform CCGlobal {\n vec4 cc_time;\n\n vec4 cc_screenSize;\n\n vec4 cc_screenScale;\n\n vec4 cc_nativeSize;\n\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n\n vec4 cc_exposure;\n\n vec4 cc_mainLitDir;\n\n vec4 cc_mainLitColor;\n\n vec4 cc_ambientSky;\n vec4 cc_ambientGround;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\n\nin vec3 a_position;\n\nin vec4 a_color;\n\nout vec4 v_color;\n\n#if USE_TEXTURE\n\nin vec2 a_uv0;\n\nout vec2 v_uv0;\n#endif\n\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n\n v_color = a_color;\n\n gl_Position = pos;\n}\n",
|
"vert": "\nprecision highp float;\nuniform CCGlobal {\n highp vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n mediump vec4 cc_nativeSize;\n highp mat4 cc_matView;\n mediump mat4 cc_matViewInv;\n mediump mat4 cc_matProj;\n mediump mat4 cc_matProjInv;\n mediump mat4 cc_matViewProj;\n mediump mat4 cc_matViewProjInv;\n mediump vec4 cc_cameraPos;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nin vec3 a_position;\nin vec4 a_color;\nout vec4 v_color;\n#if USE_TEXTURE\nin vec2 a_uv0;\nout vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}",
|
||||||
"frag": "\nprecision highp float;\n\n#if USE_ALPHA_TEST\n \n uniform ALPHA_TEST {\n float alphaThreshold;\n }\n#endif\n\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\n\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\n\nin vec4 v_color;\n\n#if USE_TEXTURE\n\nin vec2 v_uv0;\n\nuniform sampler2D texture;\n#endif\n\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n\n #if USE_TEXTURE\n o *= texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n\n o *= v_color;\n\n ALPHA_TEST(o);\n\n gl_FragColor = o;\n}\n"
|
"frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform ALPHA_TEST {\n float alphaThreshold;\n };\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nin vec4 v_color;\n#if USE_TEXTURE\nin vec2 v_uv0;\nuniform sampler2D texture;\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n o *= texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
235
assets/effects/sprite-flash-light.effect
Normal file
235
assets/effects/sprite-flash-light.effect
Normal file
@@ -0,0 +1,235 @@
|
|||||||
|
// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
|
||||||
|
// 闪光(光速扫过)
|
||||||
|
// 原理(和点光的很类似):
|
||||||
|
// 1. 画光束
|
||||||
|
// 2. 圆心中间高亮(透明度=1.0),边缘不亮(透明度=0.0)
|
||||||
|
// 3. 在原图像上方叠加光束
|
||||||
|
|
||||||
|
CCEffect %{
|
||||||
|
techniques:
|
||||||
|
- passes:
|
||||||
|
- vert: vs
|
||||||
|
frag: fs
|
||||||
|
blendState:
|
||||||
|
targets:
|
||||||
|
- blend: true
|
||||||
|
rasterizerState:
|
||||||
|
cullMode: none
|
||||||
|
properties:
|
||||||
|
texture: { value: white }
|
||||||
|
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, 1.0],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# 光束宽度
|
||||||
|
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:启用"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}%
|
||||||
|
|
||||||
|
|
||||||
|
CCProgram vs %{
|
||||||
|
precision highp float;
|
||||||
|
|
||||||
|
#include <cc-global>
|
||||||
|
#include <cc-local>
|
||||||
|
|
||||||
|
in vec3 a_position;
|
||||||
|
in vec4 a_color;
|
||||||
|
out vec4 v_color;
|
||||||
|
|
||||||
|
#if USE_TEXTURE
|
||||||
|
in vec2 a_uv0;
|
||||||
|
out vec2 v_uv0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void main () {
|
||||||
|
vec4 pos = vec4(a_position, 1);
|
||||||
|
|
||||||
|
#if CC_USE_MODEL
|
||||||
|
pos = cc_matViewProj * cc_matWorld * pos;
|
||||||
|
#else
|
||||||
|
pos = cc_matViewProj * pos;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if USE_TEXTURE
|
||||||
|
v_uv0 = a_uv0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
v_color = a_color;
|
||||||
|
|
||||||
|
gl_Position = pos;
|
||||||
|
}
|
||||||
|
}%
|
||||||
|
|
||||||
|
|
||||||
|
CCProgram fs %{
|
||||||
|
precision highp float;
|
||||||
|
|
||||||
|
#include <alpha-test>
|
||||||
|
|
||||||
|
in vec4 v_color;
|
||||||
|
|
||||||
|
#if USE_TEXTURE
|
||||||
|
in vec2 v_uv0;
|
||||||
|
uniform sampler2D texture;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if ENABLE_LIGHT
|
||||||
|
uniform Light {
|
||||||
|
// 光束颜色
|
||||||
|
vec4 lightColor;
|
||||||
|
|
||||||
|
// 光束中心点坐标
|
||||||
|
vec2 lightCenterPoint;
|
||||||
|
|
||||||
|
// 光束倾斜角度
|
||||||
|
float lightAngle;
|
||||||
|
|
||||||
|
// 光束宽度
|
||||||
|
float lightWidth;
|
||||||
|
|
||||||
|
// 启用光束渐变
|
||||||
|
// ps:编辑器还不支持 bool 类型的样子,因此用float来定义
|
||||||
|
float enableGradient;
|
||||||
|
|
||||||
|
// 裁剪掉透明区域上的光
|
||||||
|
// ps:编辑器还不支持 bool 类型的样子,因此用float来定义
|
||||||
|
float cropAlpha;
|
||||||
|
|
||||||
|
// 是否启用迷雾效果
|
||||||
|
// ps:编辑器还不支持 bool 类型的样子,因此用float来定义
|
||||||
|
float enableFog;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加光束颜色
|
||||||
|
*/
|
||||||
|
vec4 addLightColor(vec4 textureColor, vec4 lightColor, vec2 lightCenterPoint, float lightAngle, float 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.01, textureColor.a);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 裁剪掉光束范围外的uv(迷雾效果)
|
||||||
|
if (!bool(enableFog)) {
|
||||||
|
a *= step(dis, lightWidth * 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 加入从中心往外渐变的效果
|
||||||
|
if (bool(enableGradient)) {
|
||||||
|
a *= 1.0 - dis / (lightWidth * 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 计算出扩散范围内,不同 uv 对应的实际扩散颜色值
|
||||||
|
vec4 finalLightColor = lightColor * a;
|
||||||
|
|
||||||
|
// 混合颜色:在原始图像颜色上叠加扩散颜色
|
||||||
|
return textureColor * textureColor.a + finalLightColor;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void main () {
|
||||||
|
vec4 o = vec4(1, 1, 1, 1);
|
||||||
|
|
||||||
|
#if USE_TEXTURE
|
||||||
|
o *= texture(texture, v_uv0);
|
||||||
|
#if CC_USE_ALPHA_ATLAS_TEXTURE
|
||||||
|
o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
o *= v_color;
|
||||||
|
|
||||||
|
ALPHA_TEST(o);
|
||||||
|
|
||||||
|
gl_FragColor = o;
|
||||||
|
|
||||||
|
#if ENABLE_LIGHT
|
||||||
|
gl_FragColor = addLightColor(gl_FragColor, lightColor, lightCenterPoint, lightAngle, lightWidth);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}%
|
17
assets/effects/sprite-flash-light.effect.meta
Normal file
17
assets/effects/sprite-flash-light.effect.meta
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.0.25",
|
||||||
|
"uuid": "e9682cd1-a19c-4fcb-ad8c-cf1783b805e6",
|
||||||
|
"compiledShaders": [
|
||||||
|
{
|
||||||
|
"glsl1": {
|
||||||
|
"vert": "\nprecision highp float;\nuniform mediump mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\nattribute vec3 a_position;\nattribute vec4 a_color;\nvarying vec4 v_color;\n#if USE_TEXTURE\nattribute vec2 a_uv0;\nvarying vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}",
|
||||||
|
"frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvarying vec4 v_color;\n#if USE_TEXTURE\nvarying vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if ENABLE_LIGHT\nuniform vec4 lightColor;\nuniform vec2 lightCenterPoint;\nuniform float lightAngle;\nuniform float lightWidth;\nuniform float enableGradient;\nuniform float cropAlpha;\nuniform float enableFog;\nvec4 addLightColor(vec4 textureColor, vec4 lightColor, vec2 lightCenterPoint, float lightAngle, float lightWidth) {\n if (lightWidth <= 0.0) {\n return textureColor;\n }\n float angleInRadians = radians(lightAngle);\n float dis = 0.0;\n if (mod(lightAngle, 180.0) != 0.0) {\n float lightOffsetX = lightCenterPoint.x - ((1.0 - lightCenterPoint.y) / tan(angleInRadians));\n float dx = lightOffsetX + (1.0 - v_uv0.y) / tan(angleInRadians);\n float offsetDis = abs(v_uv0.x - dx);\n dis = sin(angleInRadians) * offsetDis;\n } else {\n dis = abs(v_uv0.y - lightCenterPoint.y);\n }\n float a = 1.0 ;\n if (bool(cropAlpha)) {\n a *= step(0.01, textureColor.a);\n }\n if (!bool(enableFog)) {\n a *= step(dis, lightWidth * 0.5);\n }\n if (bool(enableGradient)) {\n a *= 1.0 - dis / (lightWidth * 0.5);\n }\n vec4 finalLightColor = lightColor * a;\n return textureColor * textureColor.a + finalLightColor;\n}\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n o *= texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n #if ENABLE_LIGHT\n gl_FragColor = addLightColor(gl_FragColor, lightColor, lightCenterPoint, lightAngle, lightWidth);\n #endif\n}"
|
||||||
|
},
|
||||||
|
"glsl3": {
|
||||||
|
"vert": "\nprecision highp float;\nuniform CCGlobal {\n highp vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n mediump vec4 cc_nativeSize;\n highp mat4 cc_matView;\n mediump mat4 cc_matViewInv;\n mediump mat4 cc_matProj;\n mediump mat4 cc_matProjInv;\n mediump mat4 cc_matViewProj;\n mediump mat4 cc_matViewProjInv;\n mediump vec4 cc_cameraPos;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nin vec3 a_position;\nin vec4 a_color;\nout vec4 v_color;\n#if USE_TEXTURE\nin vec2 a_uv0;\nout vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}",
|
||||||
|
"frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform ALPHA_TEST {\n float alphaThreshold;\n };\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nin vec4 v_color;\n#if USE_TEXTURE\nin vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if ENABLE_LIGHT\nuniform Light {\n vec4 lightColor;\n vec2 lightCenterPoint;\n float lightAngle;\n float lightWidth;\n float enableGradient;\n float cropAlpha;\n float enableFog;\n};\nvec4 addLightColor(vec4 textureColor, vec4 lightColor, vec2 lightCenterPoint, float lightAngle, float lightWidth) {\n if (lightWidth <= 0.0) {\n return textureColor;\n }\n float angleInRadians = radians(lightAngle);\n float dis = 0.0;\n if (mod(lightAngle, 180.0) != 0.0) {\n float lightOffsetX = lightCenterPoint.x - ((1.0 - lightCenterPoint.y) / tan(angleInRadians));\n float dx = lightOffsetX + (1.0 - v_uv0.y) / tan(angleInRadians);\n float offsetDis = abs(v_uv0.x - dx);\n dis = sin(angleInRadians) * offsetDis;\n } else {\n dis = abs(v_uv0.y - lightCenterPoint.y);\n }\n float a = 1.0 ;\n if (bool(cropAlpha)) {\n a *= step(0.01, textureColor.a);\n }\n if (!bool(enableFog)) {\n a *= step(dis, lightWidth * 0.5);\n }\n if (bool(enableGradient)) {\n a *= 1.0 - dis / (lightWidth * 0.5);\n }\n vec4 finalLightColor = lightColor * a;\n return textureColor * textureColor.a + finalLightColor;\n}\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n o *= texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n #if ENABLE_LIGHT\n gl_FragColor = addLightColor(gl_FragColor, lightColor, lightCenterPoint, lightAngle, lightWidth);\n #endif\n}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"subMetas": {}
|
||||||
|
}
|
196
assets/effects/sprite-gaussian-blur-v1.effect
Normal file
196
assets/effects/sprite-gaussian-blur-v1.effect
Normal file
@@ -0,0 +1,196 @@
|
|||||||
|
// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
|
||||||
|
// 高斯模糊
|
||||||
|
//
|
||||||
|
// 参考资料(必读)
|
||||||
|
// * http://www.ruanyifeng.com/blog/2012/11/gaussian_blur.html
|
||||||
|
// * https://zh.wikipedia.org/wiki/%E9%AB%98%E6%96%AF%E6%A8%A1%E7%B3%8A
|
||||||
|
|
||||||
|
|
||||||
|
CCEffect %{
|
||||||
|
techniques:
|
||||||
|
- passes:
|
||||||
|
- vert: vs
|
||||||
|
frag: fs
|
||||||
|
blendState:
|
||||||
|
targets:
|
||||||
|
- blend: true
|
||||||
|
rasterizerState:
|
||||||
|
cullMode: none
|
||||||
|
properties:
|
||||||
|
texture: { value: white }
|
||||||
|
alphaThreshold: { value: 0.5 }
|
||||||
|
# # 标准方差值
|
||||||
|
# stDev: {
|
||||||
|
# value: 0.84089642,
|
||||||
|
# editor: {
|
||||||
|
# tooltip: "标准方差值"
|
||||||
|
# }
|
||||||
|
# }
|
||||||
|
|
||||||
|
# 纹理尺寸
|
||||||
|
textureSize: {
|
||||||
|
value: [100.0, 100.0],
|
||||||
|
editor: {
|
||||||
|
tooltip: "纹理尺寸px(宽 x 高)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}%
|
||||||
|
|
||||||
|
|
||||||
|
CCProgram vs %{
|
||||||
|
precision highp float;
|
||||||
|
|
||||||
|
#include <cc-global>
|
||||||
|
#include <cc-local>
|
||||||
|
|
||||||
|
in vec3 a_position;
|
||||||
|
in vec4 a_color;
|
||||||
|
out vec4 v_color;
|
||||||
|
|
||||||
|
#if USE_TEXTURE
|
||||||
|
in vec2 a_uv0;
|
||||||
|
out vec2 v_uv0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void main () {
|
||||||
|
vec4 pos = vec4(a_position, 1);
|
||||||
|
|
||||||
|
#if CC_USE_MODEL
|
||||||
|
pos = cc_matViewProj * cc_matWorld * pos;
|
||||||
|
#else
|
||||||
|
pos = cc_matViewProj * pos;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if USE_TEXTURE
|
||||||
|
v_uv0 = a_uv0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
v_color = a_color;
|
||||||
|
|
||||||
|
gl_Position = pos;
|
||||||
|
}
|
||||||
|
}%
|
||||||
|
|
||||||
|
|
||||||
|
CCProgram fs %{
|
||||||
|
precision highp float;
|
||||||
|
|
||||||
|
#include <alpha-test>
|
||||||
|
|
||||||
|
in vec4 v_color;
|
||||||
|
|
||||||
|
#if USE_TEXTURE
|
||||||
|
in vec2 v_uv0;
|
||||||
|
uniform sampler2D texture;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if ENABLE_GAUSSIAN_BLUR
|
||||||
|
|
||||||
|
// 定义无理数
|
||||||
|
#define e 2.718281828459045
|
||||||
|
|
||||||
|
// 定义标准方差值(方差值越大,越模糊,但是需要计算的高斯矩阵范围会变大,从而带来巨大的计算量)
|
||||||
|
// #define stDev 0.84089642
|
||||||
|
#define stDev 1.5
|
||||||
|
// #define stDev 5.0
|
||||||
|
// #define stDev 10.0
|
||||||
|
|
||||||
|
// 定义π
|
||||||
|
#define pi 3.141592653589793
|
||||||
|
|
||||||
|
// 接收外部变量
|
||||||
|
uniform GaussianBlur {
|
||||||
|
// 纹理尺寸(宽 x 高)(px)
|
||||||
|
vec2 textureSize;
|
||||||
|
|
||||||
|
// // 标准方差值
|
||||||
|
// float stDev;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取权重(对应二维高斯函数公式,见 https://zh.wikipedia.org/wiki/%E9%AB%98%E6%96%AF%E6%A8%A1%E7%B3%8A )
|
||||||
|
*/
|
||||||
|
float getWeight(float x, float y) {
|
||||||
|
return (1.0 / (2.0 * pi * pow(stDev, 2.0))) * pow(1.0 / e, (pow(x, 2.0) + pow(y, 2.0)) / (2.0 * pow(stDev, 2.0)));
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void main () {
|
||||||
|
vec4 o = vec4(1, 1, 1, 1);
|
||||||
|
|
||||||
|
#if USE_TEXTURE
|
||||||
|
o *= texture(texture, v_uv0);
|
||||||
|
#if CC_USE_ALPHA_ATLAS_TEXTURE
|
||||||
|
o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
o *= v_color;
|
||||||
|
|
||||||
|
ALPHA_TEST(o);
|
||||||
|
|
||||||
|
gl_FragColor = o;
|
||||||
|
#if ENABLE_GAUSSIAN_BLUR
|
||||||
|
|
||||||
|
// 根据高斯分布(也叫正态分布),在3个标准差范围内的分布比例占到99%的权重,因此我们只需要计算矩阵范围 [6 * stDev + 1, 6 * stDev +1] 上的权重
|
||||||
|
const float size = floor(stDev * 6.0 + 1.0);
|
||||||
|
const float halfSize = floor(size / 2.0);
|
||||||
|
|
||||||
|
// 步骤一:计算高斯矩阵上所有权重的和
|
||||||
|
|
||||||
|
// // v1:遍历所有点,每个点都计算权重
|
||||||
|
// float totalWeight = 0.0;
|
||||||
|
// for(float x = -halfSize; x<= halfSize; x++) {
|
||||||
|
// for (float y = -halfSize; y<= halfSize; y++) {
|
||||||
|
// totalWeight += getWeight(x, y);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// v2:因为高斯分布是对称的,所以只计算原点、X轴正方向 * 2 、Y轴正方向 * 2 、第一象限的权重 * 4即可求出所有权重之和,相比起v1版本,减少很多循环计算
|
||||||
|
|
||||||
|
// 原点
|
||||||
|
float totalWeight = getWeight(0.0, 0.0);
|
||||||
|
|
||||||
|
// X轴正方向上的权重 * 2.0 就是整个X轴上的权重
|
||||||
|
for(float x = 1.0; x <= halfSize; x++) {
|
||||||
|
totalWeight += getWeight(x, 0.0) * 2.0;
|
||||||
|
}
|
||||||
|
// Y轴正方向上的权重 * 2.0 就是整个Y轴上的权重
|
||||||
|
for(float y = 1.0; y <= halfSize; y++) {
|
||||||
|
totalWeight += getWeight(0.0, y) * 2.0;
|
||||||
|
}
|
||||||
|
// 第一象限的权重 * 4.0 就是4个象限的权重
|
||||||
|
for(float x = 1.0; x <= halfSize; x++) {
|
||||||
|
for (float y = 1.0; y<= halfSize; y++) {
|
||||||
|
totalWeight += getWeight(x, y) * 4.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO:
|
||||||
|
//
|
||||||
|
// 因为权重矩阵是一次性计算即可不断应用,因此可以将权重矩阵的计算放到CPU计算,并传入到Shader直接渲染,因此有以下优化方案
|
||||||
|
//
|
||||||
|
// v3:原始权重矩阵在CPU计算并传入到Shader
|
||||||
|
// v4:加权平均后的权重矩阵在CPU计算并传入Shader
|
||||||
|
|
||||||
|
|
||||||
|
// 步骤二:采样周边像素并应用加权平均值,得出最终像素值
|
||||||
|
vec4 finalColor = vec4(0.0, 0.0, 0.0, 0.0);
|
||||||
|
// float divider = 0.01;
|
||||||
|
float onePxWidth = 1.0 / textureSize.x;
|
||||||
|
float onePxHeight = 1.0 / textureSize.y;
|
||||||
|
for(float x = -halfSize; x<= halfSize; x++) {
|
||||||
|
for (float y = -halfSize; y<= halfSize; y++) {
|
||||||
|
// 求出对应坐标的真正权重(对应权重矩阵)
|
||||||
|
float weight = getWeight(x, y) / totalWeight;
|
||||||
|
|
||||||
|
// 求出对应坐标像素颜色值的加权值
|
||||||
|
// finalColor += texture(texture, v_uv0 + vec2(divider * x, divider * y)) * weight;
|
||||||
|
finalColor += texture(texture, v_uv0 + vec2(onePxWidth * x, onePxHeight * y)) * weight;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
gl_FragColor = finalColor;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}%
|
17
assets/effects/sprite-gaussian-blur-v1.effect.meta
Normal file
17
assets/effects/sprite-gaussian-blur-v1.effect.meta
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.0.25",
|
||||||
|
"uuid": "41f4d474-d707-45bb-af93-637573f92d54",
|
||||||
|
"compiledShaders": [
|
||||||
|
{
|
||||||
|
"glsl1": {
|
||||||
|
"vert": "\nprecision highp float;\nuniform mediump mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\nattribute vec3 a_position;\nattribute vec4 a_color;\nvarying vec4 v_color;\n#if USE_TEXTURE\nattribute vec2 a_uv0;\nvarying vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}",
|
||||||
|
"frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvarying vec4 v_color;\n#if USE_TEXTURE\nvarying vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if ENABLE_GAUSSIAN_BLUR\nuniform vec2 textureSize;\nfloat getWeight(float x, float y) {\n return (1.0 / (2.0 * 3.141592653589793 * pow(1.5, 2.0))) * pow(1.0 / 2.718281828459045, (pow(x, 2.0) + pow(y, 2.0)) / (2.0 * pow(1.5, 2.0)));\n}\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n o *= texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n #if ENABLE_GAUSSIAN_BLUR\n const float size = floor(1.5 * 6.0 + 1.0);\n const float halfSize = floor(size / 2.0);\n float totalWeight = getWeight(0.0, 0.0);\n for(float x = 1.0; x <= halfSize; x++) {\n totalWeight += getWeight(x, 0.0) * 2.0;\n }\n for(float y = 1.0; y <= halfSize; y++) {\n totalWeight += getWeight(0.0, y) * 2.0;\n }\n for(float x = 1.0; x <= halfSize; x++) {\n for (float y = 1.0; y<= halfSize; y++) {\n totalWeight += getWeight(x, y) * 4.0;\n }\n }\n vec4 finalColor = vec4(0.0, 0.0, 0.0, 0.0);\n float onePxWidth = 1.0 / textureSize.x;\n float onePxHeight = 1.0 / textureSize.y;\n for(float x = -halfSize; x<= halfSize; x++) {\n for (float y = -halfSize; y<= halfSize; y++) {\n float weight = getWeight(x, y) / totalWeight;\n finalColor += texture2D(texture, v_uv0 + vec2(onePxWidth * x, onePxHeight * y)) * weight;\n }\n }\n gl_FragColor = finalColor;\n #endif\n}"
|
||||||
|
},
|
||||||
|
"glsl3": {
|
||||||
|
"vert": "\nprecision highp float;\nuniform CCGlobal {\n highp vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n mediump vec4 cc_nativeSize;\n highp mat4 cc_matView;\n mediump mat4 cc_matViewInv;\n mediump mat4 cc_matProj;\n mediump mat4 cc_matProjInv;\n mediump mat4 cc_matViewProj;\n mediump mat4 cc_matViewProjInv;\n mediump vec4 cc_cameraPos;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nin vec3 a_position;\nin vec4 a_color;\nout vec4 v_color;\n#if USE_TEXTURE\nin vec2 a_uv0;\nout vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}",
|
||||||
|
"frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform ALPHA_TEST {\n float alphaThreshold;\n };\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nin vec4 v_color;\n#if USE_TEXTURE\nin vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if ENABLE_GAUSSIAN_BLUR\nuniform GaussianBlur {\n vec2 textureSize;\n};\nfloat getWeight(float x, float y) {\n return (1.0 / (2.0 * 3.141592653589793 * pow(1.5, 2.0))) * pow(1.0 / 2.718281828459045, (pow(x, 2.0) + pow(y, 2.0)) / (2.0 * pow(1.5, 2.0)));\n}\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n o *= texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n #if ENABLE_GAUSSIAN_BLUR\n const float size = floor(1.5 * 6.0 + 1.0);\n const float halfSize = floor(size / 2.0);\n float totalWeight = getWeight(0.0, 0.0);\n for(float x = 1.0; x <= halfSize; x++) {\n totalWeight += getWeight(x, 0.0) * 2.0;\n }\n for(float y = 1.0; y <= halfSize; y++) {\n totalWeight += getWeight(0.0, y) * 2.0;\n }\n for(float x = 1.0; x <= halfSize; x++) {\n for (float y = 1.0; y<= halfSize; y++) {\n totalWeight += getWeight(x, y) * 4.0;\n }\n }\n vec4 finalColor = vec4(0.0, 0.0, 0.0, 0.0);\n float onePxWidth = 1.0 / textureSize.x;\n float onePxHeight = 1.0 / textureSize.y;\n for(float x = -halfSize; x<= halfSize; x++) {\n for (float y = -halfSize; y<= halfSize; y++) {\n float weight = getWeight(x, y) / totalWeight;\n finalColor += texture(texture, v_uv0 + vec2(onePxWidth * x, onePxHeight * y)) * weight;\n }\n }\n gl_FragColor = finalColor;\n #endif\n}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"subMetas": {}
|
||||||
|
}
|
@@ -1,6 +1,5 @@
|
|||||||
// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
|
// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
|
||||||
// 内发光特效
|
|
||||||
// 原理: 采样周边像素alpha取平均值,叠加发光效果
|
|
||||||
CCEffect %{
|
CCEffect %{
|
||||||
techniques:
|
techniques:
|
||||||
- passes:
|
- passes:
|
||||||
@@ -14,12 +13,11 @@ CCEffect %{
|
|||||||
properties:
|
properties:
|
||||||
texture: { value: white }
|
texture: { value: white }
|
||||||
alphaThreshold: { value: 0.5 }
|
alphaThreshold: { value: 0.5 }
|
||||||
|
|
||||||
# 自定义参数
|
# 自定义参数
|
||||||
# 发光颜色
|
# 发光颜色
|
||||||
glowColor: {
|
glowColor: {
|
||||||
value: [1.0, 1.0, 0.0, 1.0],
|
value: [1.0, 1.0, 0.0, 1.0],
|
||||||
inspector: {
|
editor: {
|
||||||
type: color,
|
type: color,
|
||||||
tooltip: "发光颜色"
|
tooltip: "发光颜色"
|
||||||
}
|
}
|
||||||
@@ -27,7 +25,7 @@ CCEffect %{
|
|||||||
# 发光宽度
|
# 发光宽度
|
||||||
glowColorSize: {
|
glowColorSize: {
|
||||||
value: 0.2,
|
value: 0.2,
|
||||||
inspector: {
|
editor: {
|
||||||
tooltip: "发光宽度",
|
tooltip: "发光宽度",
|
||||||
range: [0.0, 1.0],
|
range: [0.0, 1.0],
|
||||||
}
|
}
|
||||||
@@ -37,7 +35,7 @@ CCEffect %{
|
|||||||
# 一般用于解决图像边缘存在渐变透明的时,决定超过这个透明度阈值的边缘点才点发光,具体可以操作一下
|
# 一般用于解决图像边缘存在渐变透明的时,决定超过这个透明度阈值的边缘点才点发光,具体可以操作一下
|
||||||
glowThreshold: {
|
glowThreshold: {
|
||||||
value: 0.1,
|
value: 0.1,
|
||||||
inspector: {
|
editor: {
|
||||||
tooltip: "发光阈值",
|
tooltip: "发光阈值",
|
||||||
range: [0.0, 1.0]
|
range: [0.0, 1.0]
|
||||||
}
|
}
|
||||||
@@ -136,7 +134,8 @@ CCProgram fs %{
|
|||||||
*/
|
*/
|
||||||
float getColorAlpha(float angle, float dist) {
|
float getColorAlpha(float angle, float dist) {
|
||||||
// 角度转弧度,公式为:弧度 = 角度 * (pi / 180)
|
// 角度转弧度,公式为:弧度 = 角度 * (pi / 180)
|
||||||
float radian = angle * 0.01745329252; // 这个浮点数是 pi / 180
|
// float radian = angle * 0.01745329252; // 这个浮点数是 pi / 180
|
||||||
|
float radian = radians(angle);
|
||||||
vec4 color = getTextureColor(texture, v_uv0 + vec2(dist * cos(radian), dist * sin(radian)));
|
vec4 color = getTextureColor(texture, v_uv0 + vec2(dist * cos(radian), dist * sin(radian)));
|
||||||
return color.a;
|
return color.a;
|
||||||
}
|
}
|
||||||
@@ -149,8 +148,6 @@ CCProgram fs %{
|
|||||||
* @return average alpha [0.0, 1.0]
|
* @return average alpha [0.0, 1.0]
|
||||||
*/
|
*/
|
||||||
float getAverageAlpha(float dist) {
|
float getAverageAlpha(float dist) {
|
||||||
|
|
||||||
|
|
||||||
float totalAlpha = 0.0;
|
float totalAlpha = 0.0;
|
||||||
// 以30度为一个单位,那么「周边一圈」就由0到360度中共计12个点的组成
|
// 以30度为一个单位,那么「周边一圈」就由0到360度中共计12个点的组成
|
||||||
totalAlpha += getColorAlpha(0.0, dist);
|
totalAlpha += getColorAlpha(0.0, dist);
|
||||||
@@ -208,7 +205,7 @@ CCProgram fs %{
|
|||||||
vec4 o = vec4(1, 1, 1, 1);
|
vec4 o = vec4(1, 1, 1, 1);
|
||||||
|
|
||||||
#if USE_TEXTURE
|
#if USE_TEXTURE
|
||||||
o *= getTextureColor(texture, v_uv0);
|
o *= texture(texture, v_uv0);
|
||||||
#if CC_USE_ALPHA_ATLAS_TEXTURE
|
#if CC_USE_ALPHA_ATLAS_TEXTURE
|
||||||
o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;
|
o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;
|
||||||
#endif
|
#endif
|
||||||
|
@@ -1,15 +1,15 @@
|
|||||||
{
|
{
|
||||||
"ver": "1.0.23",
|
"ver": "1.0.25",
|
||||||
"uuid": "90211f16-c00e-4c37-a192-43ec50c9ea35",
|
"uuid": "345a48c3-c00c-45d2-b6c9-b1ac49f46662",
|
||||||
"compiledShaders": [
|
"compiledShaders": [
|
||||||
{
|
{
|
||||||
"glsl1": {
|
"glsl1": {
|
||||||
"vert": "\nprecision highp float;\nuniform mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\n\nattribute vec3 a_position;\nattribute vec4 a_color;\nvarying vec4 v_color;\n\n#if USE_TEXTURE\nattribute vec2 a_uv0;\nvarying vec2 v_uv0;\n#endif\n\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n\n v_color = a_color;\n\n gl_Position = pos;\n}\n",
|
"vert": "\nprecision highp float;\nuniform mediump mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\nattribute vec3 a_position;\nattribute vec4 a_color;\nvarying vec4 v_color;\n#if USE_TEXTURE\nattribute vec2 a_uv0;\nvarying vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}",
|
||||||
"frag": "\nprecision highp float;\n\n#if USE_ALPHA_TEST\n \n uniform float alphaThreshold;\n#endif\n\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\n\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\n\nvarying vec4 v_color;\n\n#if USE_TEXTURE\nvarying vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n\n#if SHOW_INNER_GLOW\n\nuniform vec4 glowColor;\nuniform float glowColorSize;\nuniform float glowThreshold;\n\n/**\n * 获取纹理uv颜色 \n *\n * 主要实现:超出边界的统一返回 vec4(0.0, 0.0, 0.0, 0.0)\n * \n * 在 Cocos Creator 2.2.1 的编辑器中,超出边界的uv并不是返回 vec4(0.0, 0.0, 0.0, 0.0),实际返回为\n * \n * * 超出左边界的uv,返回 v_uv0.x = 0 的颜色\n * * 超出右边界的uv,返回 v_uv0.x = 1 的颜色\n * * 超出上边界的uv,返回 v_uv0.y = 1 的颜色\n * * 超出下边界的uv,返回 v_uv0.y = 0 的颜色\n *\n * 和实际在浏览器上显示(超出边界即为透明)的有区别,为了统一,这里适配一下,这样子,在编辑器上预览的效果就能和实际浏览器的保持一致\n */\nvec4 getTextureColor(sampler2D texture, vec2 v_uv0) {\n if (v_uv0.x > 1.0 || v_uv0.x < 0.0 || v_uv0.y > 1.0 || v_uv0.y < 0.0) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n }\n return texture2D(texture, v_uv0);\n}\n\n/**\n * 获取指定角度方向,距离为xxx的像素的透明度\n *\n * @param angle 角度 [0.0, 360.0]\n * @param dist 距离 [0.0, 1.0]\n *\n * @return alpha [0.0, 1.0]\n */\nfloat getColorAlpha(float angle, float dist) {\n\n float radian = angle * 0.01745329252;\n\n vec4 color = getTextureColor(texture, v_uv0 + vec2(dist * cos(radian), dist * sin(radian))); \n return color.a;\n}\n\n/**\n * 获取指定距离的周边像素的透明度平均值\n *\n * @param dist 距离 [0.0, 1.0]\n *\n * @return average alpha [0.0, 1.0]\n */\nfloat getAverageAlpha(float dist) {\n\n float totalAlpha = 0.0;\n\n totalAlpha += getColorAlpha(0.0, dist);\n totalAlpha += getColorAlpha(30.0, dist);\n totalAlpha += getColorAlpha(60.0, dist);\n totalAlpha += getColorAlpha(90.0, dist);\n totalAlpha += getColorAlpha(120.0, dist);\n totalAlpha += getColorAlpha(150.0, dist);\n totalAlpha += getColorAlpha(180.0, dist);\n totalAlpha += getColorAlpha(210.0, dist);\n totalAlpha += getColorAlpha(240.0, dist);\n totalAlpha += getColorAlpha(270.0, dist);\n totalAlpha += getColorAlpha(300.0, dist);\n totalAlpha += getColorAlpha(330.0, dist);\n return totalAlpha * 0.0833;\n\n}\n\n/**\n * 获取发光的透明度\n */\nfloat getGlowAlpha() {\n\n if (glowColorSize == 0.0) {\n return 0.0;\n }\n\n vec4 srcColor = getTextureColor(texture, v_uv0);\n if (srcColor.a <= glowThreshold) {\n return srcColor.a;\n }\n\n float totalAlpha = 0.0;\n totalAlpha += getAverageAlpha(glowColorSize * 0.1);\n totalAlpha += getAverageAlpha(glowColorSize * 0.2);\n totalAlpha += getAverageAlpha(glowColorSize * 0.3);\n totalAlpha += getAverageAlpha(glowColorSize * 0.4);\n totalAlpha += getAverageAlpha(glowColorSize * 0.5);\n totalAlpha += getAverageAlpha(glowColorSize * 0.6);\n totalAlpha += getAverageAlpha(glowColorSize * 0.7);\n totalAlpha += getAverageAlpha(glowColorSize * 0.8);\n totalAlpha += getAverageAlpha(glowColorSize * 0.9);\n totalAlpha += getAverageAlpha(glowColorSize * 1.0);\n return totalAlpha * 0.1;\n}\n\n#endif\n\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n\n #if USE_TEXTURE\n o *= getTextureColor(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n\n o *= v_color;\n\n ALPHA_TEST(o);\n\n gl_FragColor = o;\n\n #if SHOW_INNER_GLOW\n\n vec4 color_dest = o;\n\n float alpha = getGlowAlpha();\n\n if (alpha > glowThreshold) {\n\n alpha = 1.0 - alpha;\n\n alpha = -1.0 * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) + 1.0;\n }\n\n vec4 color_src = glowColor * alpha;\n\n gl_FragColor = color_src * color_src.a + color_dest;\n #endif\n}\n"
|
"frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvarying vec4 v_color;\n#if USE_TEXTURE\nvarying vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if SHOW_INNER_GLOW\nuniform vec4 glowColor;\nuniform float glowColorSize;\nuniform float glowThreshold;\nvec4 getTextureColor(sampler2D texture, vec2 v_uv0) {\n if (v_uv0.x > 1.0 || v_uv0.x < 0.0 || v_uv0.y > 1.0 || v_uv0.y < 0.0) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n }\n return texture2D(texture, v_uv0);\n}\nfloat getColorAlpha(float angle, float dist) {\n float radian = radians(angle);\n vec4 color = getTextureColor(texture, v_uv0 + vec2(dist * cos(radian), dist * sin(radian)));\n return color.a;\n}\nfloat getAverageAlpha(float dist) {\n float totalAlpha = 0.0;\n totalAlpha += getColorAlpha(0.0, dist);\n totalAlpha += getColorAlpha(30.0, dist);\n totalAlpha += getColorAlpha(60.0, dist);\n totalAlpha += getColorAlpha(90.0, dist);\n totalAlpha += getColorAlpha(120.0, dist);\n totalAlpha += getColorAlpha(150.0, dist);\n totalAlpha += getColorAlpha(180.0, dist);\n totalAlpha += getColorAlpha(210.0, dist);\n totalAlpha += getColorAlpha(240.0, dist);\n totalAlpha += getColorAlpha(270.0, dist);\n totalAlpha += getColorAlpha(300.0, dist);\n totalAlpha += getColorAlpha(330.0, dist);\n return totalAlpha * 0.0833;\n}\nfloat getGlowAlpha() {\n if (glowColorSize == 0.0) {\n return 0.0;\n }\n vec4 srcColor = getTextureColor(texture, v_uv0);\n if (srcColor.a <= glowThreshold) {\n return srcColor.a;\n }\n float totalAlpha = 0.0;\n totalAlpha += getAverageAlpha(glowColorSize * 0.1);\n totalAlpha += getAverageAlpha(glowColorSize * 0.2);\n totalAlpha += getAverageAlpha(glowColorSize * 0.3);\n totalAlpha += getAverageAlpha(glowColorSize * 0.4);\n totalAlpha += getAverageAlpha(glowColorSize * 0.5);\n totalAlpha += getAverageAlpha(glowColorSize * 0.6);\n totalAlpha += getAverageAlpha(glowColorSize * 0.7);\n totalAlpha += getAverageAlpha(glowColorSize * 0.8);\n totalAlpha += getAverageAlpha(glowColorSize * 0.9);\n totalAlpha += getAverageAlpha(glowColorSize * 1.0);\n return totalAlpha * 0.1;\n}\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n o *= texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n #if SHOW_INNER_GLOW\n vec4 color_dest = o;\n float alpha = getGlowAlpha();\n if (alpha > glowThreshold) {\n alpha = 1.0 - alpha;\n alpha = -1.0 * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) + 1.0;\n }\n vec4 color_src = glowColor * alpha;\n gl_FragColor = color_src * color_src.a + color_dest;\n #endif\n}"
|
||||||
},
|
},
|
||||||
"glsl3": {
|
"glsl3": {
|
||||||
"vert": "\nprecision highp float;\nuniform CCGlobal {\n vec4 cc_time;\n\n vec4 cc_screenSize;\n\n vec4 cc_screenScale;\n\n vec4 cc_nativeSize;\n\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n\n vec4 cc_exposure;\n\n vec4 cc_mainLitDir;\n\n vec4 cc_mainLitColor;\n\n vec4 cc_ambientSky;\n vec4 cc_ambientGround;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\n\nin vec3 a_position;\nin vec4 a_color;\nout vec4 v_color;\n\n#if USE_TEXTURE\nin vec2 a_uv0;\nout vec2 v_uv0;\n#endif\n\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n\n v_color = a_color;\n\n gl_Position = pos;\n}\n",
|
"vert": "\nprecision highp float;\nuniform CCGlobal {\n highp vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n mediump vec4 cc_nativeSize;\n highp mat4 cc_matView;\n mediump mat4 cc_matViewInv;\n mediump mat4 cc_matProj;\n mediump mat4 cc_matProjInv;\n mediump mat4 cc_matViewProj;\n mediump mat4 cc_matViewProjInv;\n mediump vec4 cc_cameraPos;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nin vec3 a_position;\nin vec4 a_color;\nout vec4 v_color;\n#if USE_TEXTURE\nin vec2 a_uv0;\nout vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}",
|
||||||
"frag": "\nprecision highp float;\n\n#if USE_ALPHA_TEST\n \n uniform ALPHA_TEST {\n float alphaThreshold;\n }\n#endif\n\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\n\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\n\nin vec4 v_color;\n\n#if USE_TEXTURE\nin vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n\n#if SHOW_INNER_GLOW\n\nuniform glow {\n\n vec4 glowColor;\n\n float glowColorSize;\n\n float glowThreshold;\n\n};\n\n/**\n * 获取纹理uv颜色 \n *\n * 主要实现:超出边界的统一返回 vec4(0.0, 0.0, 0.0, 0.0)\n * \n * 在 Cocos Creator 2.2.1 的编辑器中,超出边界的uv并不是返回 vec4(0.0, 0.0, 0.0, 0.0),实际返回为\n * \n * * 超出左边界的uv,返回 v_uv0.x = 0 的颜色\n * * 超出右边界的uv,返回 v_uv0.x = 1 的颜色\n * * 超出上边界的uv,返回 v_uv0.y = 1 的颜色\n * * 超出下边界的uv,返回 v_uv0.y = 0 的颜色\n *\n * 和实际在浏览器上显示(超出边界即为透明)的有区别,为了统一,这里适配一下,这样子,在编辑器上预览的效果就能和实际浏览器的保持一致\n */\nvec4 getTextureColor(sampler2D texture, vec2 v_uv0) {\n if (v_uv0.x > 1.0 || v_uv0.x < 0.0 || v_uv0.y > 1.0 || v_uv0.y < 0.0) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n }\n return texture(texture, v_uv0);\n}\n\n/**\n * 获取指定角度方向,距离为xxx的像素的透明度\n *\n * @param angle 角度 [0.0, 360.0]\n * @param dist 距离 [0.0, 1.0]\n *\n * @return alpha [0.0, 1.0]\n */\nfloat getColorAlpha(float angle, float dist) {\n\n float radian = angle * 0.01745329252;\n\n vec4 color = getTextureColor(texture, v_uv0 + vec2(dist * cos(radian), dist * sin(radian))); \n return color.a;\n}\n\n/**\n * 获取指定距离的周边像素的透明度平均值\n *\n * @param dist 距离 [0.0, 1.0]\n *\n * @return average alpha [0.0, 1.0]\n */\nfloat getAverageAlpha(float dist) {\n\n float totalAlpha = 0.0;\n\n totalAlpha += getColorAlpha(0.0, dist);\n totalAlpha += getColorAlpha(30.0, dist);\n totalAlpha += getColorAlpha(60.0, dist);\n totalAlpha += getColorAlpha(90.0, dist);\n totalAlpha += getColorAlpha(120.0, dist);\n totalAlpha += getColorAlpha(150.0, dist);\n totalAlpha += getColorAlpha(180.0, dist);\n totalAlpha += getColorAlpha(210.0, dist);\n totalAlpha += getColorAlpha(240.0, dist);\n totalAlpha += getColorAlpha(270.0, dist);\n totalAlpha += getColorAlpha(300.0, dist);\n totalAlpha += getColorAlpha(330.0, dist);\n return totalAlpha * 0.0833;\n\n}\n\n/**\n * 获取发光的透明度\n */\nfloat getGlowAlpha() {\n\n if (glowColorSize == 0.0) {\n return 0.0;\n }\n\n vec4 srcColor = getTextureColor(texture, v_uv0);\n if (srcColor.a <= glowThreshold) {\n return srcColor.a;\n }\n\n float totalAlpha = 0.0;\n totalAlpha += getAverageAlpha(glowColorSize * 0.1);\n totalAlpha += getAverageAlpha(glowColorSize * 0.2);\n totalAlpha += getAverageAlpha(glowColorSize * 0.3);\n totalAlpha += getAverageAlpha(glowColorSize * 0.4);\n totalAlpha += getAverageAlpha(glowColorSize * 0.5);\n totalAlpha += getAverageAlpha(glowColorSize * 0.6);\n totalAlpha += getAverageAlpha(glowColorSize * 0.7);\n totalAlpha += getAverageAlpha(glowColorSize * 0.8);\n totalAlpha += getAverageAlpha(glowColorSize * 0.9);\n totalAlpha += getAverageAlpha(glowColorSize * 1.0);\n return totalAlpha * 0.1;\n}\n\n#endif\n\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n\n #if USE_TEXTURE\n o *= getTextureColor(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n\n o *= v_color;\n\n ALPHA_TEST(o);\n\n gl_FragColor = o;\n\n #if SHOW_INNER_GLOW\n\n vec4 color_dest = o;\n\n float alpha = getGlowAlpha();\n\n if (alpha > glowThreshold) {\n\n alpha = 1.0 - alpha;\n\n alpha = -1.0 * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) + 1.0;\n }\n\n vec4 color_src = glowColor * alpha;\n\n gl_FragColor = color_src * color_src.a + color_dest;\n #endif\n}\n"
|
"frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform ALPHA_TEST {\n float alphaThreshold;\n };\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nin vec4 v_color;\n#if USE_TEXTURE\nin vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if SHOW_INNER_GLOW\nuniform glow {\n vec4 glowColor;\n float glowColorSize;\n float glowThreshold;\n};\nvec4 getTextureColor(sampler2D texture, vec2 v_uv0) {\n if (v_uv0.x > 1.0 || v_uv0.x < 0.0 || v_uv0.y > 1.0 || v_uv0.y < 0.0) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n }\n return texture(texture, v_uv0);\n}\nfloat getColorAlpha(float angle, float dist) {\n float radian = radians(angle);\n vec4 color = getTextureColor(texture, v_uv0 + vec2(dist * cos(radian), dist * sin(radian)));\n return color.a;\n}\nfloat getAverageAlpha(float dist) {\n float totalAlpha = 0.0;\n totalAlpha += getColorAlpha(0.0, dist);\n totalAlpha += getColorAlpha(30.0, dist);\n totalAlpha += getColorAlpha(60.0, dist);\n totalAlpha += getColorAlpha(90.0, dist);\n totalAlpha += getColorAlpha(120.0, dist);\n totalAlpha += getColorAlpha(150.0, dist);\n totalAlpha += getColorAlpha(180.0, dist);\n totalAlpha += getColorAlpha(210.0, dist);\n totalAlpha += getColorAlpha(240.0, dist);\n totalAlpha += getColorAlpha(270.0, dist);\n totalAlpha += getColorAlpha(300.0, dist);\n totalAlpha += getColorAlpha(330.0, dist);\n return totalAlpha * 0.0833;\n}\nfloat getGlowAlpha() {\n if (glowColorSize == 0.0) {\n return 0.0;\n }\n vec4 srcColor = getTextureColor(texture, v_uv0);\n if (srcColor.a <= glowThreshold) {\n return srcColor.a;\n }\n float totalAlpha = 0.0;\n totalAlpha += getAverageAlpha(glowColorSize * 0.1);\n totalAlpha += getAverageAlpha(glowColorSize * 0.2);\n totalAlpha += getAverageAlpha(glowColorSize * 0.3);\n totalAlpha += getAverageAlpha(glowColorSize * 0.4);\n totalAlpha += getAverageAlpha(glowColorSize * 0.5);\n totalAlpha += getAverageAlpha(glowColorSize * 0.6);\n totalAlpha += getAverageAlpha(glowColorSize * 0.7);\n totalAlpha += getAverageAlpha(glowColorSize * 0.8);\n totalAlpha += getAverageAlpha(glowColorSize * 0.9);\n totalAlpha += getAverageAlpha(glowColorSize * 1.0);\n return totalAlpha * 0.1;\n}\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n o *= texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n #if SHOW_INNER_GLOW\n vec4 color_dest = o;\n float alpha = getGlowAlpha();\n if (alpha > glowThreshold) {\n alpha = 1.0 - alpha;\n alpha = -1.0 * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) + 1.0;\n }\n vec4 color_src = glowColor * alpha;\n gl_FragColor = color_src * color_src.a + color_dest;\n #endif\n}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@@ -1,6 +1,5 @@
|
|||||||
// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
|
// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
|
||||||
// 外发光特效
|
|
||||||
// 原理:采样周边像素alpha取平均值,给外部加发光效果(1-col.a可避免内部发光)
|
|
||||||
CCEffect %{
|
CCEffect %{
|
||||||
techniques:
|
techniques:
|
||||||
- passes:
|
- passes:
|
||||||
@@ -14,12 +13,11 @@ CCEffect %{
|
|||||||
properties:
|
properties:
|
||||||
texture: { value: white }
|
texture: { value: white }
|
||||||
alphaThreshold: { value: 0.5 }
|
alphaThreshold: { value: 0.5 }
|
||||||
|
|
||||||
# 自定义参数
|
# 自定义参数
|
||||||
# 发光颜色
|
# 发光颜色
|
||||||
glowColor: {
|
glowColor: {
|
||||||
value: [1.0, 1.0, 0.0, 1.0],
|
value: [1.0, 1.0, 0.0, 1.0],
|
||||||
inspector: {
|
editor: {
|
||||||
type: color,
|
type: color,
|
||||||
tooltip: "发光颜色"
|
tooltip: "发光颜色"
|
||||||
}
|
}
|
||||||
@@ -27,7 +25,7 @@ CCEffect %{
|
|||||||
# 发光宽度
|
# 发光宽度
|
||||||
glowColorSize: {
|
glowColorSize: {
|
||||||
value: 0.15,
|
value: 0.15,
|
||||||
inspector: {
|
editor: {
|
||||||
tooltip: "发光宽度",
|
tooltip: "发光宽度",
|
||||||
range: [0.0, 1.0],
|
range: [0.0, 1.0],
|
||||||
}
|
}
|
||||||
@@ -36,7 +34,7 @@ CCEffect %{
|
|||||||
# 只有小于等于这个透明度的点才会发光
|
# 只有小于等于这个透明度的点才会发光
|
||||||
glowThreshold: {
|
glowThreshold: {
|
||||||
value: 1.0,
|
value: 1.0,
|
||||||
inspector: {
|
editor: {
|
||||||
tooltip: "发光阈值",
|
tooltip: "发光阈值",
|
||||||
range: [0.0, 1.0]
|
range: [0.0, 1.0]
|
||||||
}
|
}
|
||||||
@@ -50,20 +48,17 @@ CCProgram vs %{
|
|||||||
#include <cc-global>
|
#include <cc-global>
|
||||||
#include <cc-local>
|
#include <cc-local>
|
||||||
|
|
||||||
// a_position 是笛卡尔坐标右手系,也是OpenGL的坐标系,原点在左下角,X轴正方向往右,Y轴正方向往上,Z轴正方向往外
|
|
||||||
in vec3 a_position;
|
in vec3 a_position;
|
||||||
in vec4 a_color;
|
in vec4 a_color;
|
||||||
out vec4 v_color;
|
out vec4 v_color;
|
||||||
|
|
||||||
#if USE_TEXTURE
|
#if USE_TEXTURE
|
||||||
// a_uv0 是标准屏幕坐标系,即原点在左上角,X轴正方向往右,Y轴正方向往下
|
|
||||||
in vec2 a_uv0;
|
in vec2 a_uv0;
|
||||||
out vec2 v_uv0;
|
out vec2 v_uv0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void main () {
|
void main () {
|
||||||
vec4 pos = vec4(a_position, 1);
|
vec4 pos = vec4(a_position, 1);
|
||||||
// vec4 pos = vec4(a_position * vec3(1.0, 1.0, 1.0), 1);
|
|
||||||
|
|
||||||
#if CC_USE_MODEL
|
#if CC_USE_MODEL
|
||||||
pos = cc_matViewProj * cc_matWorld * pos;
|
pos = cc_matViewProj * cc_matWorld * pos;
|
||||||
@@ -239,7 +234,7 @@ CCProgram fs %{
|
|||||||
vec4 o = vec4(1, 1, 1, 1);
|
vec4 o = vec4(1, 1, 1, 1);
|
||||||
|
|
||||||
#if USE_TEXTURE
|
#if USE_TEXTURE
|
||||||
o *= getTextureColor(texture, v_uv0);
|
o *= texture(texture, v_uv0);
|
||||||
#if CC_USE_ALPHA_ATLAS_TEXTURE
|
#if CC_USE_ALPHA_ATLAS_TEXTURE
|
||||||
o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;
|
o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;
|
||||||
#endif
|
#endif
|
||||||
|
@@ -1,15 +1,15 @@
|
|||||||
{
|
{
|
||||||
"ver": "1.0.23",
|
"ver": "1.0.25",
|
||||||
"uuid": "89f30b2e-b75e-49b1-9dfc-cb341cadd30a",
|
"uuid": "67e9833e-aa43-427a-ba89-d7bdd1ef0aed",
|
||||||
"compiledShaders": [
|
"compiledShaders": [
|
||||||
{
|
{
|
||||||
"glsl1": {
|
"glsl1": {
|
||||||
"vert": "\nprecision highp float;\nuniform mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\n\nattribute vec3 a_position;\nattribute vec4 a_color;\nvarying vec4 v_color;\n\n#if USE_TEXTURE\n\nattribute vec2 a_uv0;\nvarying vec2 v_uv0;\n#endif\n\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n\n #endif\n\n v_color = a_color;\n\n gl_Position = pos;\n}\n",
|
"vert": "\nprecision highp float;\nuniform mediump mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\nattribute vec3 a_position;\nattribute vec4 a_color;\nvarying vec4 v_color;\n#if USE_TEXTURE\nattribute vec2 a_uv0;\nvarying vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}",
|
||||||
"frag": "\nprecision highp float;\n\n#if USE_ALPHA_TEST\n \n uniform float alphaThreshold;\n#endif\n\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\n\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\n\nvarying vec4 v_color;\n\n#if USE_TEXTURE\nvarying vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n\n/**\n * 获取纹理uv颜色 \n *\n * 主要实现:超出边界的统一返回 vec4(0.0, 0.0, 0.0, 0.0)\n * \n * 在 Cocos Creator 2.2.1 的编辑器中,超出边界的uv并不是返回 vec4(0.0, 0.0, 0.0, 0.0),实际返回为\n * \n * * 超出左边界的uv,返回 v_uv0.x = 0 的颜色\n * * 超出右边界的uv,返回 v_uv0.x = 1 的颜色\n * * 超出上边界的uv,返回 v_uv0.y = 1 的颜色\n * * 超出下边界的uv,返回 v_uv0.y = 0 的颜色\n *\n * 和实际在浏览器上显示(超出边界即为透明)的有区别,为了统一,这里适配一下,这样子,在编辑器上预览的效果就能和实际浏览器的保持一致\n */\nvec4 getTextureColor(sampler2D texture, vec2 v_uv0) {\n if (v_uv0.x > 1.0 || v_uv0.x < 0.0 || v_uv0.y > 1.0 || v_uv0.y < 0.0) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n }\n return texture2D(texture, v_uv0);\n}\n\n#if SHOW_OUTTER_GLOW\n\nuniform vec4 glowColor;\nuniform float glowColorSize;\nuniform float glowThreshold;\n\n/**\n * 获取指定角度方向,距离为xxx的像素的透明度\n *\n * @param angle 角度 [0.0, 360.0]\n * @param dist 距离 [0.0, 1.0]\n *\n * @return alpha [0.0, 1.0]\n */\nfloat getColorAlpha(float angle, float dist) {\n\n float radian = angle * 0.01745329252;\n\n vec4 color = getTextureColor(texture, v_uv0 + vec2(dist * cos(radian), dist * sin(radian))); \n return color.a;\n}\n\n/**\n * 获取指定距离的周边像素的透明度平均值\n *\n * @param dist 距离 [0.0, 1.0]\n *\n * @return average alpha [0.0, 1.0]\n */\nfloat getAverageAlpha(float dist) {\n float totalAlpha = 0.0;\n\n totalAlpha += getColorAlpha(0.0, dist);\n totalAlpha += getColorAlpha(30.0, dist);\n totalAlpha += getColorAlpha(60.0, dist);\n totalAlpha += getColorAlpha(90.0, dist);\n totalAlpha += getColorAlpha(120.0, dist);\n totalAlpha += getColorAlpha(150.0, dist);\n totalAlpha += getColorAlpha(180.0, dist);\n totalAlpha += getColorAlpha(210.0, dist);\n totalAlpha += getColorAlpha(240.0, dist);\n totalAlpha += getColorAlpha(270.0, dist);\n totalAlpha += getColorAlpha(300.0, dist);\n totalAlpha += getColorAlpha(330.0, dist);\n return totalAlpha * 0.0833;\n\n}\n\n/**\n * 获取发光的透明度\n */\nfloat getGlowAlpha() {\n\n if (glowColorSize == 0.0) {\n return 0.0;\n }\n\n float totalAlpha = 0.0;\n totalAlpha += getAverageAlpha(glowColorSize * 0.1);\n totalAlpha += getAverageAlpha(glowColorSize * 0.2);\n totalAlpha += getAverageAlpha(glowColorSize * 0.3);\n totalAlpha += getAverageAlpha(glowColorSize * 0.4);\n totalAlpha += getAverageAlpha(glowColorSize * 0.5);\n totalAlpha += getAverageAlpha(glowColorSize * 0.6);\n totalAlpha += getAverageAlpha(glowColorSize * 0.7);\n totalAlpha += getAverageAlpha(glowColorSize * 0.8);\n totalAlpha += getAverageAlpha(glowColorSize * 0.9);\n totalAlpha += getAverageAlpha(glowColorSize * 1.0);\n return totalAlpha * 0.1;\n}\n\n#endif\n\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n\n #if USE_TEXTURE\n o *= getTextureColor(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n\n o *= v_color;\n\n ALPHA_TEST(o);\n\n gl_FragColor = o;\n\n #if SHOW_OUTTER_GLOW\n\n float alpha = getGlowAlpha();\n\n if (alpha <= glowThreshold) {\n\n alpha = alpha / glowThreshold;\n\n alpha = -1.0 * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) + 1.0;\n } else {\n\n alpha = 0.0;\n }\n\n vec4 color_dest = glowColor * alpha;\n vec4 color_src = o;\n\n gl_FragColor = color_src * color_src.a + color_dest * (1.0 - color_src.a);\n #endif\n}\n"
|
"frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvarying vec4 v_color;\n#if USE_TEXTURE\nvarying vec2 v_uv0;\nuniform sampler2D texture;\n#endif\nvec4 getTextureColor(sampler2D texture, vec2 v_uv0) {\n if (v_uv0.x > 1.0 || v_uv0.x < 0.0 || v_uv0.y > 1.0 || v_uv0.y < 0.0) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n }\n return texture2D(texture, v_uv0);\n}\n#if SHOW_OUTTER_GLOW\nuniform vec4 glowColor;\nuniform float glowColorSize;\nuniform float glowThreshold;\nfloat getColorAlpha(float angle, float dist) {\n float radian = angle * 0.01745329252;\n vec4 color = getTextureColor(texture, v_uv0 + vec2(dist * cos(radian), dist * sin(radian)));\n return color.a;\n}\nfloat getAverageAlpha(float dist) {\n float totalAlpha = 0.0;\n totalAlpha += getColorAlpha(0.0, dist);\n totalAlpha += getColorAlpha(30.0, dist);\n totalAlpha += getColorAlpha(60.0, dist);\n totalAlpha += getColorAlpha(90.0, dist);\n totalAlpha += getColorAlpha(120.0, dist);\n totalAlpha += getColorAlpha(150.0, dist);\n totalAlpha += getColorAlpha(180.0, dist);\n totalAlpha += getColorAlpha(210.0, dist);\n totalAlpha += getColorAlpha(240.0, dist);\n totalAlpha += getColorAlpha(270.0, dist);\n totalAlpha += getColorAlpha(300.0, dist);\n totalAlpha += getColorAlpha(330.0, dist);\n return totalAlpha * 0.0833;\n}\nfloat getGlowAlpha() {\n if (glowColorSize == 0.0) {\n return 0.0;\n }\n float totalAlpha = 0.0;\n totalAlpha += getAverageAlpha(glowColorSize * 0.1);\n totalAlpha += getAverageAlpha(glowColorSize * 0.2);\n totalAlpha += getAverageAlpha(glowColorSize * 0.3);\n totalAlpha += getAverageAlpha(glowColorSize * 0.4);\n totalAlpha += getAverageAlpha(glowColorSize * 0.5);\n totalAlpha += getAverageAlpha(glowColorSize * 0.6);\n totalAlpha += getAverageAlpha(glowColorSize * 0.7);\n totalAlpha += getAverageAlpha(glowColorSize * 0.8);\n totalAlpha += getAverageAlpha(glowColorSize * 0.9);\n totalAlpha += getAverageAlpha(glowColorSize * 1.0);\n return totalAlpha * 0.1;\n}\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n o *= texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n #if SHOW_OUTTER_GLOW\n float alpha = getGlowAlpha();\n if (alpha <= glowThreshold) {\n alpha = alpha / glowThreshold;\n alpha = -1.0 * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) + 1.0;\n } else {\n alpha = 0.0;\n }\n vec4 color_dest = glowColor * alpha;\n vec4 color_src = o;\n gl_FragColor = color_src * color_src.a + color_dest * (1.0 - color_src.a);\n #endif\n}"
|
||||||
},
|
},
|
||||||
"glsl3": {
|
"glsl3": {
|
||||||
"vert": "\nprecision highp float;\nuniform CCGlobal {\n vec4 cc_time;\n\n vec4 cc_screenSize;\n\n vec4 cc_screenScale;\n\n vec4 cc_nativeSize;\n\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n\n vec4 cc_exposure;\n\n vec4 cc_mainLitDir;\n\n vec4 cc_mainLitColor;\n\n vec4 cc_ambientSky;\n vec4 cc_ambientGround;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\n\nin vec3 a_position;\nin vec4 a_color;\nout vec4 v_color;\n\n#if USE_TEXTURE\n\nin vec2 a_uv0;\nout vec2 v_uv0;\n#endif\n\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n\n #endif\n\n v_color = a_color;\n\n gl_Position = pos;\n}\n",
|
"vert": "\nprecision highp float;\nuniform CCGlobal {\n highp vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n mediump vec4 cc_nativeSize;\n highp mat4 cc_matView;\n mediump mat4 cc_matViewInv;\n mediump mat4 cc_matProj;\n mediump mat4 cc_matProjInv;\n mediump mat4 cc_matViewProj;\n mediump mat4 cc_matViewProjInv;\n mediump vec4 cc_cameraPos;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nin vec3 a_position;\nin vec4 a_color;\nout vec4 v_color;\n#if USE_TEXTURE\nin vec2 a_uv0;\nout vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}",
|
||||||
"frag": "\nprecision highp float;\n\n#if USE_ALPHA_TEST\n \n uniform ALPHA_TEST {\n float alphaThreshold;\n }\n#endif\n\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\n\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\n\nin vec4 v_color;\n\n#if USE_TEXTURE\nin vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n\n/**\n * 获取纹理uv颜色 \n *\n * 主要实现:超出边界的统一返回 vec4(0.0, 0.0, 0.0, 0.0)\n * \n * 在 Cocos Creator 2.2.1 的编辑器中,超出边界的uv并不是返回 vec4(0.0, 0.0, 0.0, 0.0),实际返回为\n * \n * * 超出左边界的uv,返回 v_uv0.x = 0 的颜色\n * * 超出右边界的uv,返回 v_uv0.x = 1 的颜色\n * * 超出上边界的uv,返回 v_uv0.y = 1 的颜色\n * * 超出下边界的uv,返回 v_uv0.y = 0 的颜色\n *\n * 和实际在浏览器上显示(超出边界即为透明)的有区别,为了统一,这里适配一下,这样子,在编辑器上预览的效果就能和实际浏览器的保持一致\n */\nvec4 getTextureColor(sampler2D texture, vec2 v_uv0) {\n if (v_uv0.x > 1.0 || v_uv0.x < 0.0 || v_uv0.y > 1.0 || v_uv0.y < 0.0) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n }\n return texture(texture, v_uv0);\n}\n\n#if SHOW_OUTTER_GLOW\n\nuniform glow {\n\n vec4 glowColor;\n\n float glowColorSize;\n\n float glowThreshold;\n\n};\n\n/**\n * 获取指定角度方向,距离为xxx的像素的透明度\n *\n * @param angle 角度 [0.0, 360.0]\n * @param dist 距离 [0.0, 1.0]\n *\n * @return alpha [0.0, 1.0]\n */\nfloat getColorAlpha(float angle, float dist) {\n\n float radian = angle * 0.01745329252;\n\n vec4 color = getTextureColor(texture, v_uv0 + vec2(dist * cos(radian), dist * sin(radian))); \n return color.a;\n}\n\n/**\n * 获取指定距离的周边像素的透明度平均值\n *\n * @param dist 距离 [0.0, 1.0]\n *\n * @return average alpha [0.0, 1.0]\n */\nfloat getAverageAlpha(float dist) {\n float totalAlpha = 0.0;\n\n totalAlpha += getColorAlpha(0.0, dist);\n totalAlpha += getColorAlpha(30.0, dist);\n totalAlpha += getColorAlpha(60.0, dist);\n totalAlpha += getColorAlpha(90.0, dist);\n totalAlpha += getColorAlpha(120.0, dist);\n totalAlpha += getColorAlpha(150.0, dist);\n totalAlpha += getColorAlpha(180.0, dist);\n totalAlpha += getColorAlpha(210.0, dist);\n totalAlpha += getColorAlpha(240.0, dist);\n totalAlpha += getColorAlpha(270.0, dist);\n totalAlpha += getColorAlpha(300.0, dist);\n totalAlpha += getColorAlpha(330.0, dist);\n return totalAlpha * 0.0833;\n\n}\n\n/**\n * 获取发光的透明度\n */\nfloat getGlowAlpha() {\n\n if (glowColorSize == 0.0) {\n return 0.0;\n }\n\n float totalAlpha = 0.0;\n totalAlpha += getAverageAlpha(glowColorSize * 0.1);\n totalAlpha += getAverageAlpha(glowColorSize * 0.2);\n totalAlpha += getAverageAlpha(glowColorSize * 0.3);\n totalAlpha += getAverageAlpha(glowColorSize * 0.4);\n totalAlpha += getAverageAlpha(glowColorSize * 0.5);\n totalAlpha += getAverageAlpha(glowColorSize * 0.6);\n totalAlpha += getAverageAlpha(glowColorSize * 0.7);\n totalAlpha += getAverageAlpha(glowColorSize * 0.8);\n totalAlpha += getAverageAlpha(glowColorSize * 0.9);\n totalAlpha += getAverageAlpha(glowColorSize * 1.0);\n return totalAlpha * 0.1;\n}\n\n#endif\n\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n\n #if USE_TEXTURE\n o *= getTextureColor(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n\n o *= v_color;\n\n ALPHA_TEST(o);\n\n gl_FragColor = o;\n\n #if SHOW_OUTTER_GLOW\n\n float alpha = getGlowAlpha();\n\n if (alpha <= glowThreshold) {\n\n alpha = alpha / glowThreshold;\n\n alpha = -1.0 * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) + 1.0;\n } else {\n\n alpha = 0.0;\n }\n\n vec4 color_dest = glowColor * alpha;\n vec4 color_src = o;\n\n gl_FragColor = color_src * color_src.a + color_dest * (1.0 - color_src.a);\n #endif\n}\n"
|
"frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform ALPHA_TEST {\n float alphaThreshold;\n };\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nin vec4 v_color;\n#if USE_TEXTURE\nin vec2 v_uv0;\nuniform sampler2D texture;\n#endif\nvec4 getTextureColor(sampler2D texture, vec2 v_uv0) {\n if (v_uv0.x > 1.0 || v_uv0.x < 0.0 || v_uv0.y > 1.0 || v_uv0.y < 0.0) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n }\n return texture(texture, v_uv0);\n}\n#if SHOW_OUTTER_GLOW\nuniform glow {\n vec4 glowColor;\n float glowColorSize;\n float glowThreshold;\n};\nfloat getColorAlpha(float angle, float dist) {\n float radian = angle * 0.01745329252;\n vec4 color = getTextureColor(texture, v_uv0 + vec2(dist * cos(radian), dist * sin(radian)));\n return color.a;\n}\nfloat getAverageAlpha(float dist) {\n float totalAlpha = 0.0;\n totalAlpha += getColorAlpha(0.0, dist);\n totalAlpha += getColorAlpha(30.0, dist);\n totalAlpha += getColorAlpha(60.0, dist);\n totalAlpha += getColorAlpha(90.0, dist);\n totalAlpha += getColorAlpha(120.0, dist);\n totalAlpha += getColorAlpha(150.0, dist);\n totalAlpha += getColorAlpha(180.0, dist);\n totalAlpha += getColorAlpha(210.0, dist);\n totalAlpha += getColorAlpha(240.0, dist);\n totalAlpha += getColorAlpha(270.0, dist);\n totalAlpha += getColorAlpha(300.0, dist);\n totalAlpha += getColorAlpha(330.0, dist);\n return totalAlpha * 0.0833;\n}\nfloat getGlowAlpha() {\n if (glowColorSize == 0.0) {\n return 0.0;\n }\n float totalAlpha = 0.0;\n totalAlpha += getAverageAlpha(glowColorSize * 0.1);\n totalAlpha += getAverageAlpha(glowColorSize * 0.2);\n totalAlpha += getAverageAlpha(glowColorSize * 0.3);\n totalAlpha += getAverageAlpha(glowColorSize * 0.4);\n totalAlpha += getAverageAlpha(glowColorSize * 0.5);\n totalAlpha += getAverageAlpha(glowColorSize * 0.6);\n totalAlpha += getAverageAlpha(glowColorSize * 0.7);\n totalAlpha += getAverageAlpha(glowColorSize * 0.8);\n totalAlpha += getAverageAlpha(glowColorSize * 0.9);\n totalAlpha += getAverageAlpha(glowColorSize * 1.0);\n return totalAlpha * 0.1;\n}\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n o *= texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n #if SHOW_OUTTER_GLOW\n float alpha = getGlowAlpha();\n if (alpha <= glowThreshold) {\n alpha = alpha / glowThreshold;\n alpha = -1.0 * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) * (alpha - 1.0) + 1.0;\n } else {\n alpha = 0.0;\n }\n vec4 color_dest = glowColor * alpha;\n vec4 color_src = o;\n gl_FragColor = color_src * color_src.a + color_dest * (1.0 - color_src.a);\n #endif\n}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@@ -21,7 +21,7 @@ CCEffect %{
|
|||||||
# 灰化程度
|
# 灰化程度
|
||||||
grayLevel: {
|
grayLevel: {
|
||||||
value: 1.0,
|
value: 1.0,
|
||||||
inspector: {
|
editor: {
|
||||||
tooltip: "灰化程度",
|
tooltip: "灰化程度",
|
||||||
range: [0.0, 1.0]
|
range: [0.0, 1.0]
|
||||||
}
|
}
|
||||||
@@ -80,7 +80,7 @@ CCProgram fs %{
|
|||||||
uniform GrayPhoto {
|
uniform GrayPhoto {
|
||||||
// 灰化程度
|
// 灰化程度
|
||||||
float grayLevel;
|
float grayLevel;
|
||||||
}
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void main () {
|
void main () {
|
||||||
|
@@ -1,15 +1,15 @@
|
|||||||
{
|
{
|
||||||
"ver": "1.0.23",
|
"ver": "1.0.25",
|
||||||
"uuid": "2e5b29d9-dd5e-4f3d-92e9-e580745b3bc8",
|
"uuid": "2e5b29d9-dd5e-4f3d-92e9-e580745b3bc8",
|
||||||
"compiledShaders": [
|
"compiledShaders": [
|
||||||
{
|
{
|
||||||
"glsl1": {
|
"glsl1": {
|
||||||
"vert": "\nprecision highp float;\nuniform mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\n\nattribute vec3 a_position;\nattribute vec4 a_color;\nvarying vec4 v_color;\n\n#if USE_TEXTURE\nattribute vec2 a_uv0;\nvarying vec2 v_uv0;\n#endif\n\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n\n v_color = a_color;\n\n gl_Position = pos;\n}\n",
|
"vert": "\nprecision highp float;\nuniform mediump mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\nattribute vec3 a_position;\nattribute vec4 a_color;\nvarying vec4 v_color;\n#if USE_TEXTURE\nattribute vec2 a_uv0;\nvarying vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}",
|
||||||
"frag": "\nprecision highp float;\n\n#if USE_ALPHA_TEST\n \n uniform float alphaThreshold;\n#endif\n\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\n\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\n\nvarying vec4 v_color;\n\n#if USE_TEXTURE\nvarying vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n\n#if USE_GRAY\nuniform float grayLevel;\n#endif\n\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n\n #if USE_TEXTURE\n o *= texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n\n o *= v_color;\n\n ALPHA_TEST(o);\n\n #if USE_GRAY\n vec4 srcColor = o;\n\n float gray = 0.2126 * o.r + 0.7152 * o.g + 0.0722 * o.b;\n vec4 grayColor = vec4(gray, gray, gray, o.a);\n\n o = srcColor + (grayColor - srcColor) * grayLevel;\n #endif\n gl_FragColor = o;\n}\n"
|
"frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvarying vec4 v_color;\n#if USE_TEXTURE\nvarying vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if USE_GRAY\nuniform float grayLevel;\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n o *= texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n #if USE_GRAY\n vec4 srcColor = o;\n float gray = 0.2126 * o.r + 0.7152 * o.g + 0.0722 * o.b;\n vec4 grayColor = vec4(gray, gray, gray, o.a);\n o = srcColor + (grayColor - srcColor) * grayLevel;\n #endif\n gl_FragColor = o;\n}"
|
||||||
},
|
},
|
||||||
"glsl3": {
|
"glsl3": {
|
||||||
"vert": "\nprecision highp float;\nuniform CCGlobal {\n vec4 cc_time;\n\n vec4 cc_screenSize;\n\n vec4 cc_screenScale;\n\n vec4 cc_nativeSize;\n\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n\n vec4 cc_exposure;\n\n vec4 cc_mainLitDir;\n\n vec4 cc_mainLitColor;\n\n vec4 cc_ambientSky;\n vec4 cc_ambientGround;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\n\nin vec3 a_position;\nin vec4 a_color;\nout vec4 v_color;\n\n#if USE_TEXTURE\nin vec2 a_uv0;\nout vec2 v_uv0;\n#endif\n\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n\n v_color = a_color;\n\n gl_Position = pos;\n}\n",
|
"vert": "\nprecision highp float;\nuniform CCGlobal {\n highp vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n mediump vec4 cc_nativeSize;\n highp mat4 cc_matView;\n mediump mat4 cc_matViewInv;\n mediump mat4 cc_matProj;\n mediump mat4 cc_matProjInv;\n mediump mat4 cc_matViewProj;\n mediump mat4 cc_matViewProjInv;\n mediump vec4 cc_cameraPos;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nin vec3 a_position;\nin vec4 a_color;\nout vec4 v_color;\n#if USE_TEXTURE\nin vec2 a_uv0;\nout vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}",
|
||||||
"frag": "\nprecision highp float;\n\n#if USE_ALPHA_TEST\n \n uniform ALPHA_TEST {\n float alphaThreshold;\n }\n#endif\n\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\n\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\n\nin vec4 v_color;\n\n#if USE_TEXTURE\nin vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n\n#if USE_GRAY\nuniform GrayPhoto {\n\n float grayLevel;\n}\n#endif\n\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n\n #if USE_TEXTURE\n o *= texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n\n o *= v_color;\n\n ALPHA_TEST(o);\n\n #if USE_GRAY\n vec4 srcColor = o;\n\n float gray = 0.2126 * o.r + 0.7152 * o.g + 0.0722 * o.b;\n vec4 grayColor = vec4(gray, gray, gray, o.a);\n\n o = srcColor + (grayColor - srcColor) * grayLevel;\n #endif\n gl_FragColor = o;\n}\n"
|
"frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform ALPHA_TEST {\n float alphaThreshold;\n };\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nin vec4 v_color;\n#if USE_TEXTURE\nin vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if USE_GRAY\nuniform GrayPhoto {\n float grayLevel;\n};\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n o *= texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n #if USE_GRAY\n vec4 srcColor = o;\n float gray = 0.2126 * o.r + 0.7152 * o.g + 0.0722 * o.b;\n vec4 grayColor = vec4(gray, gray, gray, o.a);\n o = srcColor + (grayColor - srcColor) * grayLevel;\n #endif\n gl_FragColor = o;\n}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@@ -18,14 +18,14 @@ CCEffect %{
|
|||||||
# X轴方块数量
|
# X轴方块数量
|
||||||
xBlockCount: {
|
xBlockCount: {
|
||||||
value: 30.0,
|
value: 30.0,
|
||||||
inspector: {
|
editor: {
|
||||||
tooltip: "X轴方向马赛克方块数量"
|
tooltip: "X轴方向马赛克方块数量"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
# Y轴方块数量
|
# Y轴方块数量
|
||||||
yBlockCount: {
|
yBlockCount: {
|
||||||
value: 30.0,
|
value: 30.0,
|
||||||
inspector: {
|
editor: {
|
||||||
tooltip: "Y轴方向马赛克方块数量"
|
tooltip: "Y轴方向马赛克方块数量"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -85,7 +85,7 @@ CCProgram fs %{
|
|||||||
float xBlockCount;
|
float xBlockCount;
|
||||||
// Y轴方块数量
|
// Y轴方块数量
|
||||||
float yBlockCount;
|
float yBlockCount;
|
||||||
}
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取v_uv0最终映射的马赛格格子的坐标
|
* 获取v_uv0最终映射的马赛格格子的坐标
|
||||||
|
@@ -1,15 +1,15 @@
|
|||||||
{
|
{
|
||||||
"ver": "1.0.23",
|
"ver": "1.0.25",
|
||||||
"uuid": "9638979d-62b3-4e5b-adea-7ad706e66e65",
|
"uuid": "9638979d-62b3-4e5b-adea-7ad706e66e65",
|
||||||
"compiledShaders": [
|
"compiledShaders": [
|
||||||
{
|
{
|
||||||
"glsl1": {
|
"glsl1": {
|
||||||
"vert": "\nprecision highp float;\nuniform mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\n\nattribute vec3 a_position;\nattribute vec4 a_color;\nvarying vec4 v_color;\n\n#if USE_TEXTURE\nattribute vec2 a_uv0;\nvarying vec2 v_uv0;\n#endif\n\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n\n v_color = a_color;\n\n gl_Position = pos;\n}\n",
|
"vert": "\nprecision highp float;\nuniform mediump mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\nattribute vec3 a_position;\nattribute vec4 a_color;\nvarying vec4 v_color;\n#if USE_TEXTURE\nattribute vec2 a_uv0;\nvarying vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}",
|
||||||
"frag": "\nprecision highp float;\n\n#if USE_ALPHA_TEST\n \n uniform float alphaThreshold;\n#endif\n\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\n\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\n\nvarying vec4 v_color;\n\n#if USE_TEXTURE\nvarying vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n\n#if USE_MOSAIC\nuniform float xBlockCount;\nuniform float yBlockCount;\n/**\n * 获取v_uv0最终映射的马赛格格子的坐标\n *\n * @return 映射后坐标\n */\nvec2 getUvMapPos() {\n\n float xCount;\n if (xBlockCount <= 0.0) {\n xCount = 1.0;\n } else {\n xCount = xBlockCount;\n }\n float blockWidth = 1.0 / xCount;\n\n float blockXIndex = floor(v_uv0.x / blockWidth);\n\n float yCount; \n if (yBlockCount <= 0.0) {\n yCount = 1.0;\n } else {\n yCount = yBlockCount;\n }\n float blockHeight = 1.0 / yCount;\n float blockYIndex = floor(v_uv0.y / blockHeight);\n\n return vec2(blockWidth * (blockXIndex + 0.5), blockHeight * (blockYIndex + 0.5));\n}\n\n#endif\n\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n\n vec2 realPos = v_uv0;\n #if USE_MOSAIC\n realPos = getUvMapPos();\n #endif\n\n #if USE_TEXTURE\n o *= texture2D(texture, realPos);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, realPos + vec2(0, 0.5)).r;\n #endif\n #endif\n\n o *= v_color;\n\n ALPHA_TEST(o);\n\n gl_FragColor = o;\n}\n"
|
"frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvarying vec4 v_color;\n#if USE_TEXTURE\nvarying vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if USE_MOSAIC\nuniform float xBlockCount;\nuniform float yBlockCount;\nvec2 getUvMapPos() {\n float xCount;\n if (xBlockCount <= 0.0) {\n xCount = 1.0;\n } else {\n xCount = xBlockCount;\n }\n float blockWidth = 1.0 / xCount;\n float blockXIndex = floor(v_uv0.x / blockWidth);\n float yCount;\n if (yBlockCount <= 0.0) {\n yCount = 1.0;\n } else {\n yCount = yBlockCount;\n }\n float blockHeight = 1.0 / yCount;\n float blockYIndex = floor(v_uv0.y / blockHeight);\n return vec2(blockWidth * (blockXIndex + 0.5), blockHeight * (blockYIndex + 0.5));\n}\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n vec2 realPos = v_uv0;\n #if USE_MOSAIC\n realPos = getUvMapPos();\n #endif\n #if USE_TEXTURE\n o *= texture2D(texture, realPos);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, realPos + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n}"
|
||||||
},
|
},
|
||||||
"glsl3": {
|
"glsl3": {
|
||||||
"vert": "\nprecision highp float;\nuniform CCGlobal {\n vec4 cc_time;\n\n vec4 cc_screenSize;\n\n vec4 cc_screenScale;\n\n vec4 cc_nativeSize;\n\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n\n vec4 cc_exposure;\n\n vec4 cc_mainLitDir;\n\n vec4 cc_mainLitColor;\n\n vec4 cc_ambientSky;\n vec4 cc_ambientGround;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\n\nin vec3 a_position;\nin vec4 a_color;\nout vec4 v_color;\n\n#if USE_TEXTURE\nin vec2 a_uv0;\nout vec2 v_uv0;\n#endif\n\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n\n v_color = a_color;\n\n gl_Position = pos;\n}\n",
|
"vert": "\nprecision highp float;\nuniform CCGlobal {\n highp vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n mediump vec4 cc_nativeSize;\n highp mat4 cc_matView;\n mediump mat4 cc_matViewInv;\n mediump mat4 cc_matProj;\n mediump mat4 cc_matProjInv;\n mediump mat4 cc_matViewProj;\n mediump mat4 cc_matViewProjInv;\n mediump vec4 cc_cameraPos;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nin vec3 a_position;\nin vec4 a_color;\nout vec4 v_color;\n#if USE_TEXTURE\nin vec2 a_uv0;\nout vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}",
|
||||||
"frag": "\nprecision highp float;\n\n#if USE_ALPHA_TEST\n \n uniform ALPHA_TEST {\n float alphaThreshold;\n }\n#endif\n\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\n\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\n\nin vec4 v_color;\n\n#if USE_TEXTURE\nin vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n\n#if USE_MOSAIC\nuniform Mosaic {\n\n float xBlockCount;\n\n float yBlockCount;\n}\n\n/**\n * 获取v_uv0最终映射的马赛格格子的坐标\n *\n * @return 映射后坐标\n */\nvec2 getUvMapPos() {\n\n float xCount;\n if (xBlockCount <= 0.0) {\n xCount = 1.0;\n } else {\n xCount = xBlockCount;\n }\n float blockWidth = 1.0 / xCount;\n\n float blockXIndex = floor(v_uv0.x / blockWidth);\n\n float yCount; \n if (yBlockCount <= 0.0) {\n yCount = 1.0;\n } else {\n yCount = yBlockCount;\n }\n float blockHeight = 1.0 / yCount;\n float blockYIndex = floor(v_uv0.y / blockHeight);\n\n return vec2(blockWidth * (blockXIndex + 0.5), blockHeight * (blockYIndex + 0.5));\n}\n\n#endif\n\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n\n vec2 realPos = v_uv0;\n #if USE_MOSAIC\n realPos = getUvMapPos();\n #endif\n\n #if USE_TEXTURE\n o *= texture(texture, realPos);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, realPos + vec2(0, 0.5)).r;\n #endif\n #endif\n\n o *= v_color;\n\n ALPHA_TEST(o);\n\n gl_FragColor = o;\n}\n"
|
"frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform ALPHA_TEST {\n float alphaThreshold;\n };\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nin vec4 v_color;\n#if USE_TEXTURE\nin vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if USE_MOSAIC\nuniform Mosaic {\n float xBlockCount;\n float yBlockCount;\n};\nvec2 getUvMapPos() {\n float xCount;\n if (xBlockCount <= 0.0) {\n xCount = 1.0;\n } else {\n xCount = xBlockCount;\n }\n float blockWidth = 1.0 / xCount;\n float blockXIndex = floor(v_uv0.x / blockWidth);\n float yCount;\n if (yBlockCount <= 0.0) {\n yCount = 1.0;\n } else {\n yCount = yBlockCount;\n }\n float blockHeight = 1.0 / yCount;\n float blockYIndex = floor(v_uv0.y / blockHeight);\n return vec2(blockWidth * (blockXIndex + 0.5), blockHeight * (blockYIndex + 0.5));\n}\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n vec2 realPos = v_uv0;\n #if USE_MOSAIC\n realPos = getUvMapPos();\n #endif\n #if USE_TEXTURE\n o *= texture(texture, realPos);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, realPos + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@@ -21,7 +21,7 @@ CCEffect %{
|
|||||||
# 老化程度
|
# 老化程度
|
||||||
oldLevel: {
|
oldLevel: {
|
||||||
value: 1.0,
|
value: 1.0,
|
||||||
inspector: {
|
editor: {
|
||||||
tooltip: "老化程度",
|
tooltip: "老化程度",
|
||||||
range: [0.0, 1.0]
|
range: [0.0, 1.0]
|
||||||
}
|
}
|
||||||
@@ -80,7 +80,7 @@ CCProgram fs %{
|
|||||||
uniform OldPhoto {
|
uniform OldPhoto {
|
||||||
// 老化程度
|
// 老化程度
|
||||||
float oldLevel;
|
float oldLevel;
|
||||||
}
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取老化颜色
|
* 获取老化颜色
|
||||||
|
@@ -1,15 +1,15 @@
|
|||||||
{
|
{
|
||||||
"ver": "1.0.23",
|
"ver": "1.0.25",
|
||||||
"uuid": "211eddf3-c53d-46e3-8c09-c1bf38e644e2",
|
"uuid": "211eddf3-c53d-46e3-8c09-c1bf38e644e2",
|
||||||
"compiledShaders": [
|
"compiledShaders": [
|
||||||
{
|
{
|
||||||
"glsl1": {
|
"glsl1": {
|
||||||
"vert": "\nprecision highp float;\nuniform mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\n\nattribute vec3 a_position;\nattribute vec4 a_color;\nvarying vec4 v_color;\n\n#if USE_TEXTURE\nattribute vec2 a_uv0;\nvarying vec2 v_uv0;\n#endif\n\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n\n v_color = a_color;\n\n gl_Position = pos;\n}\n",
|
"vert": "\nprecision highp float;\nuniform mediump mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\nattribute vec3 a_position;\nattribute vec4 a_color;\nvarying vec4 v_color;\n#if USE_TEXTURE\nattribute vec2 a_uv0;\nvarying vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}",
|
||||||
"frag": "\nprecision highp float;\n\n#if USE_ALPHA_TEST\n \n uniform float alphaThreshold;\n#endif\n\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\n\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\n\nvarying vec4 v_color;\n\n#if USE_TEXTURE\nvarying vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n\n#if USE_OLD_PHOTO\nuniform float oldLevel;\n/**\n * 获取老化颜色\n * \n * @param color 原始颜色 \n *\n * @return 老化后的颜色\n */\nvec4 getOldPhotoColor(vec4 color) {\n float r = 0.393 * color.r + 0.769 * color.g + 0.189 * color.b; \n float g = 0.349 * color.r + 0.686 * color.g + 0.168 * color.b; \n float b = 0.272 * color.r + 0.534 * color.g + 0.131 * color.b;\n return vec4(r, g, b, color.a);\n}\n#endif\n\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n\n #if USE_TEXTURE\n o *= texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n\n o *= v_color;\n\n ALPHA_TEST(o);\n\n #if USE_OLD_PHOTO\n vec4 srcColor = o;\n vec4 oldColor = getOldPhotoColor(srcColor);\n\n o = srcColor + (oldColor - srcColor) * oldLevel;\n #endif\n gl_FragColor = o;\n}\n"
|
"frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvarying vec4 v_color;\n#if USE_TEXTURE\nvarying vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if USE_OLD_PHOTO\nuniform float oldLevel;\nvec4 getOldPhotoColor(vec4 color) {\n float r = 0.393 * color.r + 0.769 * color.g + 0.189 * color.b;\n float g = 0.349 * color.r + 0.686 * color.g + 0.168 * color.b;\n float b = 0.272 * color.r + 0.534 * color.g + 0.131 * color.b;\n return vec4(r, g, b, color.a);\n}\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n o *= texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n #if USE_OLD_PHOTO\n vec4 srcColor = o;\n vec4 oldColor = getOldPhotoColor(srcColor);\n o = srcColor + (oldColor - srcColor) * oldLevel;\n #endif\n gl_FragColor = o;\n}"
|
||||||
},
|
},
|
||||||
"glsl3": {
|
"glsl3": {
|
||||||
"vert": "\nprecision highp float;\nuniform CCGlobal {\n vec4 cc_time;\n\n vec4 cc_screenSize;\n\n vec4 cc_screenScale;\n\n vec4 cc_nativeSize;\n\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n\n vec4 cc_exposure;\n\n vec4 cc_mainLitDir;\n\n vec4 cc_mainLitColor;\n\n vec4 cc_ambientSky;\n vec4 cc_ambientGround;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\n\nin vec3 a_position;\nin vec4 a_color;\nout vec4 v_color;\n\n#if USE_TEXTURE\nin vec2 a_uv0;\nout vec2 v_uv0;\n#endif\n\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n\n v_color = a_color;\n\n gl_Position = pos;\n}\n",
|
"vert": "\nprecision highp float;\nuniform CCGlobal {\n highp vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n mediump vec4 cc_nativeSize;\n highp mat4 cc_matView;\n mediump mat4 cc_matViewInv;\n mediump mat4 cc_matProj;\n mediump mat4 cc_matProjInv;\n mediump mat4 cc_matViewProj;\n mediump mat4 cc_matViewProjInv;\n mediump vec4 cc_cameraPos;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nin vec3 a_position;\nin vec4 a_color;\nout vec4 v_color;\n#if USE_TEXTURE\nin vec2 a_uv0;\nout vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}",
|
||||||
"frag": "\nprecision highp float;\n\n#if USE_ALPHA_TEST\n \n uniform ALPHA_TEST {\n float alphaThreshold;\n }\n#endif\n\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\n\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\n\nin vec4 v_color;\n\n#if USE_TEXTURE\nin vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n\n#if USE_OLD_PHOTO\nuniform OldPhoto {\n\n float oldLevel;\n}\n\n/**\n * 获取老化颜色\n * \n * @param color 原始颜色 \n *\n * @return 老化后的颜色\n */\nvec4 getOldPhotoColor(vec4 color) {\n float r = 0.393 * color.r + 0.769 * color.g + 0.189 * color.b; \n float g = 0.349 * color.r + 0.686 * color.g + 0.168 * color.b; \n float b = 0.272 * color.r + 0.534 * color.g + 0.131 * color.b;\n return vec4(r, g, b, color.a);\n}\n#endif\n\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n\n #if USE_TEXTURE\n o *= texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n\n o *= v_color;\n\n ALPHA_TEST(o);\n\n #if USE_OLD_PHOTO\n vec4 srcColor = o;\n vec4 oldColor = getOldPhotoColor(srcColor);\n\n o = srcColor + (oldColor - srcColor) * oldLevel;\n #endif\n gl_FragColor = o;\n}\n"
|
"frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform ALPHA_TEST {\n float alphaThreshold;\n };\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nin vec4 v_color;\n#if USE_TEXTURE\nin vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if USE_OLD_PHOTO\nuniform OldPhoto {\n float oldLevel;\n};\nvec4 getOldPhotoColor(vec4 color) {\n float r = 0.393 * color.r + 0.769 * color.g + 0.189 * color.b;\n float g = 0.349 * color.r + 0.686 * color.g + 0.168 * color.b;\n float b = 0.272 * color.r + 0.534 * color.g + 0.131 * color.b;\n return vec4(r, g, b, color.a);\n}\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n o *= texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n #if USE_OLD_PHOTO\n vec4 srcColor = o;\n vec4 oldColor = getOldPhotoColor(srcColor);\n o = srcColor + (oldColor - srcColor) * oldLevel;\n #endif\n gl_FragColor = o;\n}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
|
// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
|
||||||
// 描边特效
|
|
||||||
CCEffect %{
|
CCEffect %{
|
||||||
techniques:
|
techniques:
|
||||||
- passes:
|
- passes:
|
||||||
@@ -17,7 +17,7 @@ CCEffect %{
|
|||||||
# 描边颜色
|
# 描边颜色
|
||||||
outlineColor: {
|
outlineColor: {
|
||||||
value: [1.0, 0.0, 0.0, 1.0],
|
value: [1.0, 0.0, 0.0, 1.0],
|
||||||
inspector: {
|
editor: {
|
||||||
type: color,
|
type: color,
|
||||||
tooltip: "描边颜色",
|
tooltip: "描边颜色",
|
||||||
}
|
}
|
||||||
@@ -26,11 +26,12 @@ CCEffect %{
|
|||||||
# 描边宽度
|
# 描边宽度
|
||||||
outlineWidth: {
|
outlineWidth: {
|
||||||
value: 0.002,
|
value: 0.002,
|
||||||
inspector: {
|
editor: {
|
||||||
tooltip: "描边宽度",
|
tooltip: "描边宽度",
|
||||||
range: [0.0, 1.0]
|
range: [0.0, 1.0]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}%
|
}%
|
||||||
|
|
||||||
|
|
||||||
@@ -109,7 +110,6 @@ CCProgram fs %{
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void main () {
|
void main () {
|
||||||
vec4 o = vec4(1, 1, 1, 1);
|
vec4 o = vec4(1, 1, 1, 1);
|
||||||
|
|
||||||
|
@@ -1,15 +1,15 @@
|
|||||||
{
|
{
|
||||||
"ver": "1.0.23",
|
"ver": "1.0.25",
|
||||||
"uuid": "559dcd1e-233b-4e1f-b1da-733c9232f06f",
|
"uuid": "34c2ed47-4d59-41c4-b91c-157c32e9d0eb",
|
||||||
"compiledShaders": [
|
"compiledShaders": [
|
||||||
{
|
{
|
||||||
"glsl1": {
|
"glsl1": {
|
||||||
"vert": "\nprecision highp float;\nuniform mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\n\nattribute vec3 a_position;\nattribute vec4 a_color;\nvarying vec4 v_color;\n\n#if USE_TEXTURE\nattribute vec2 a_uv0;\nvarying vec2 v_uv0;\n#endif\n\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n\n v_color = a_color;\n\n gl_Position = pos;\n}\n",
|
"vert": "\nprecision highp float;\nuniform mediump mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\nattribute vec3 a_position;\nattribute vec4 a_color;\nvarying vec4 v_color;\n#if USE_TEXTURE\nattribute vec2 a_uv0;\nvarying vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}",
|
||||||
"frag": "\nprecision highp float;\n\n#if USE_ALPHA_TEST\n \n uniform float alphaThreshold;\n#endif\n\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\n\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\n\nvarying vec4 v_color;\n\n#if USE_TEXTURE\nvarying vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n\n#if SHOW_OUT_LINE\n\nuniform vec4 outlineColor;\nuniform float outlineWidth;\n\nfloat getBgAlpha() {\n vec4 color_up = texture2D(texture, v_uv0 + vec2(0, outlineWidth)); \n vec4 color_down = texture2D(texture, v_uv0 - vec2(0, outlineWidth)); \n vec4 color_left = texture2D(texture, v_uv0 - vec2(outlineWidth, 0)); \n vec4 color_right = texture2D(texture, v_uv0 + vec2(outlineWidth, 0)); \n vec4 color_up_left = texture2D(texture, v_uv0 + vec2(outlineWidth, -outlineWidth)); \n vec4 color_up_right = texture2D(texture, v_uv0 + vec2(outlineWidth, outlineWidth)); \n vec4 color_down_left = texture2D(texture, v_uv0 + vec2(-outlineWidth, -outlineWidth)); \n vec4 color_down_right = texture2D(texture, v_uv0 + vec2(-outlineWidth, outlineWidth)); \n float total = color_right.a + color_left.a + color_down.a + color_up.a + color_up_left.a + color_up_right.a + color_down_left.a + color_down_right.a; \n return clamp(total, 0.0, 1.0);\n}\n\n#endif\n\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n\n #if USE_TEXTURE\n o *= texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n\n o *= v_color;\n\n ALPHA_TEST(o);\n\n gl_FragColor = o;\n\n #if SHOW_OUT_LINE\n\n if (outlineWidth == 0.0) {\n return;\n }\n\n vec4 color_dest = outlineColor * getBgAlpha();\n\n vec4 color_src = o;\n\n gl_FragColor = color_src * color_src.a + color_dest * (1.0 - color_src.a);\n #endif\n}\n"
|
"frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvarying vec4 v_color;\n#if USE_TEXTURE\nvarying vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if SHOW_OUT_LINE\nuniform vec4 outlineColor;\nuniform float outlineWidth;\nfloat getBgAlpha() {\n vec4 color_up = texture2D(texture, v_uv0 + vec2(0, outlineWidth));\n vec4 color_down = texture2D(texture, v_uv0 - vec2(0, outlineWidth));\n vec4 color_left = texture2D(texture, v_uv0 - vec2(outlineWidth, 0));\n vec4 color_right = texture2D(texture, v_uv0 + vec2(outlineWidth, 0));\n vec4 color_up_left = texture2D(texture, v_uv0 + vec2(outlineWidth, -outlineWidth));\n vec4 color_up_right = texture2D(texture, v_uv0 + vec2(outlineWidth, outlineWidth));\n vec4 color_down_left = texture2D(texture, v_uv0 + vec2(-outlineWidth, -outlineWidth));\n vec4 color_down_right = texture2D(texture, v_uv0 + vec2(-outlineWidth, outlineWidth));\n float total = color_right.a + color_left.a + color_down.a + color_up.a + color_up_left.a + color_up_right.a + color_down_left.a + color_down_right.a;\n return clamp(total, 0.0, 1.0);\n}\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n o *= texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n #if SHOW_OUT_LINE\n if (outlineWidth == 0.0) {\n return;\n }\n vec4 color_dest = outlineColor * getBgAlpha();\n vec4 color_src = o;\n gl_FragColor = color_src * color_src.a + color_dest * (1.0 - color_src.a);\n #endif\n}"
|
||||||
},
|
},
|
||||||
"glsl3": {
|
"glsl3": {
|
||||||
"vert": "\nprecision highp float;\nuniform CCGlobal {\n vec4 cc_time;\n\n vec4 cc_screenSize;\n\n vec4 cc_screenScale;\n\n vec4 cc_nativeSize;\n\n mat4 cc_matView;\n mat4 cc_matViewInv;\n mat4 cc_matProj;\n mat4 cc_matProjInv;\n mat4 cc_matViewProj;\n mat4 cc_matViewProjInv;\n vec4 cc_cameraPos;\n\n vec4 cc_exposure;\n\n vec4 cc_mainLitDir;\n\n vec4 cc_mainLitColor;\n\n vec4 cc_ambientSky;\n vec4 cc_ambientGround;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\n\nin vec3 a_position;\nin vec4 a_color;\nout vec4 v_color;\n\n#if USE_TEXTURE\nin vec2 a_uv0;\nout vec2 v_uv0;\n#endif\n\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n\n v_color = a_color;\n\n gl_Position = pos;\n}\n",
|
"vert": "\nprecision highp float;\nuniform CCGlobal {\n highp vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n mediump vec4 cc_nativeSize;\n highp mat4 cc_matView;\n mediump mat4 cc_matViewInv;\n mediump mat4 cc_matProj;\n mediump mat4 cc_matProjInv;\n mediump mat4 cc_matViewProj;\n mediump mat4 cc_matViewProjInv;\n mediump vec4 cc_cameraPos;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nin vec3 a_position;\nin vec4 a_color;\nout vec4 v_color;\n#if USE_TEXTURE\nin vec2 a_uv0;\nout vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}",
|
||||||
"frag": "\nprecision highp float;\n\n#if USE_ALPHA_TEST\n \n uniform ALPHA_TEST {\n float alphaThreshold;\n }\n#endif\n\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\n\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\n\nin vec4 v_color;\n\n#if USE_TEXTURE\nin vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n\n#if SHOW_OUT_LINE\n\nuniform Outline {\n\n vec4 outlineColor;\n\n float outlineWidth;\n\n};\n\nfloat getBgAlpha() {\n vec4 color_up = texture(texture, v_uv0 + vec2(0, outlineWidth)); \n vec4 color_down = texture(texture, v_uv0 - vec2(0, outlineWidth)); \n vec4 color_left = texture(texture, v_uv0 - vec2(outlineWidth, 0)); \n vec4 color_right = texture(texture, v_uv0 + vec2(outlineWidth, 0)); \n vec4 color_up_left = texture(texture, v_uv0 + vec2(outlineWidth, -outlineWidth)); \n vec4 color_up_right = texture(texture, v_uv0 + vec2(outlineWidth, outlineWidth)); \n vec4 color_down_left = texture(texture, v_uv0 + vec2(-outlineWidth, -outlineWidth)); \n vec4 color_down_right = texture(texture, v_uv0 + vec2(-outlineWidth, outlineWidth)); \n float total = color_right.a + color_left.a + color_down.a + color_up.a + color_up_left.a + color_up_right.a + color_down_left.a + color_down_right.a; \n return clamp(total, 0.0, 1.0);\n}\n\n#endif\n\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n\n #if USE_TEXTURE\n o *= texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n\n o *= v_color;\n\n ALPHA_TEST(o);\n\n gl_FragColor = o;\n\n #if SHOW_OUT_LINE\n\n if (outlineWidth == 0.0) {\n return;\n }\n\n vec4 color_dest = outlineColor * getBgAlpha();\n\n vec4 color_src = o;\n\n gl_FragColor = color_src * color_src.a + color_dest * (1.0 - color_src.a);\n #endif\n}\n"
|
"frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform ALPHA_TEST {\n float alphaThreshold;\n };\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nin vec4 v_color;\n#if USE_TEXTURE\nin vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if SHOW_OUT_LINE\nuniform Outline {\n vec4 outlineColor;\n float outlineWidth;\n};\nfloat getBgAlpha() {\n vec4 color_up = texture(texture, v_uv0 + vec2(0, outlineWidth));\n vec4 color_down = texture(texture, v_uv0 - vec2(0, outlineWidth));\n vec4 color_left = texture(texture, v_uv0 - vec2(outlineWidth, 0));\n vec4 color_right = texture(texture, v_uv0 + vec2(outlineWidth, 0));\n vec4 color_up_left = texture(texture, v_uv0 + vec2(outlineWidth, -outlineWidth));\n vec4 color_up_right = texture(texture, v_uv0 + vec2(outlineWidth, outlineWidth));\n vec4 color_down_left = texture(texture, v_uv0 + vec2(-outlineWidth, -outlineWidth));\n vec4 color_down_right = texture(texture, v_uv0 + vec2(-outlineWidth, outlineWidth));\n float total = color_right.a + color_left.a + color_down.a + color_up.a + color_up_left.a + color_up_right.a + color_down_left.a + color_down_right.a;\n return clamp(total, 0.0, 1.0);\n}\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n o *= texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n #if SHOW_OUT_LINE\n if (outlineWidth == 0.0) {\n return;\n }\n vec4 color_dest = outlineColor * getBgAlpha();\n vec4 color_src = o;\n gl_FragColor = color_src * color_src.a + color_dest * (1.0 - color_src.a);\n #endif\n}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
182
assets/effects/sprite-point-light.effect
Normal file
182
assets/effects/sprite-point-light.effect
Normal file
@@ -0,0 +1,182 @@
|
|||||||
|
// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
|
||||||
|
// 点光/点扩散
|
||||||
|
// 原理:
|
||||||
|
// 1. 画圆
|
||||||
|
// 2. 圆心高亮(透明度=1.0),圆边缘不亮(透明度=0.0)
|
||||||
|
// 3. 在原图像上方叠加圆
|
||||||
|
|
||||||
|
CCEffect %{
|
||||||
|
techniques:
|
||||||
|
- passes:
|
||||||
|
- vert: vs
|
||||||
|
frag: fs
|
||||||
|
blendState:
|
||||||
|
targets:
|
||||||
|
- blend: true
|
||||||
|
rasterizerState:
|
||||||
|
cullMode: none
|
||||||
|
properties:
|
||||||
|
texture: { value: white }
|
||||||
|
alphaThreshold: { value: 0.5 }
|
||||||
|
|
||||||
|
# 扩散颜色
|
||||||
|
centerColor: {
|
||||||
|
value: [1.0, 1.0, 0.0, 1.0],
|
||||||
|
editor: {
|
||||||
|
type: color,
|
||||||
|
tooltip: "发光颜色"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# 扩散起点坐标
|
||||||
|
centerPoint: {
|
||||||
|
value: [0.2, 0.2],
|
||||||
|
editor: {
|
||||||
|
tooltip: "扩散起点坐标"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# 扩散半径
|
||||||
|
radius: {
|
||||||
|
value: 0.4,
|
||||||
|
editor: {
|
||||||
|
tooltip: "扩散半径"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# 裁剪掉透明区域上的光
|
||||||
|
cropAlpha: {
|
||||||
|
value: 1.0,
|
||||||
|
editor: {
|
||||||
|
tooltip: "是否裁剪透明区域上的光。0:不启用,非0:启用"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# 是否启用迷雾效果
|
||||||
|
enableFog: {
|
||||||
|
value: 0.0,
|
||||||
|
editor: {
|
||||||
|
tooltip: "是否启用迷雾效果。0:不启用,非0:启用"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}%
|
||||||
|
|
||||||
|
|
||||||
|
CCProgram vs %{
|
||||||
|
precision highp float;
|
||||||
|
|
||||||
|
#include <cc-global>
|
||||||
|
#include <cc-local>
|
||||||
|
|
||||||
|
in vec3 a_position;
|
||||||
|
in vec4 a_color;
|
||||||
|
out vec4 v_color;
|
||||||
|
|
||||||
|
#if USE_TEXTURE
|
||||||
|
in vec2 a_uv0;
|
||||||
|
out vec2 v_uv0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void main () {
|
||||||
|
vec4 pos = vec4(a_position, 1);
|
||||||
|
|
||||||
|
#if CC_USE_MODEL
|
||||||
|
pos = cc_matViewProj * cc_matWorld * pos;
|
||||||
|
#else
|
||||||
|
pos = cc_matViewProj * pos;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if USE_TEXTURE
|
||||||
|
v_uv0 = a_uv0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
v_color = a_color;
|
||||||
|
|
||||||
|
gl_Position = pos;
|
||||||
|
}
|
||||||
|
}%
|
||||||
|
|
||||||
|
|
||||||
|
CCProgram fs %{
|
||||||
|
precision highp float;
|
||||||
|
|
||||||
|
#include <alpha-test>
|
||||||
|
|
||||||
|
in vec4 v_color;
|
||||||
|
|
||||||
|
#if USE_TEXTURE
|
||||||
|
in vec2 v_uv0;
|
||||||
|
uniform sampler2D texture;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if ENABLE_DIFFUSION
|
||||||
|
uniform Diffusion {
|
||||||
|
// 扩散颜色
|
||||||
|
vec4 centerColor;
|
||||||
|
|
||||||
|
// 扩散起点坐标
|
||||||
|
vec2 centerPoint;
|
||||||
|
|
||||||
|
// 扩展半径
|
||||||
|
float radius;
|
||||||
|
|
||||||
|
// 裁剪掉透明区域上的光
|
||||||
|
// ps:编辑器还不支持 bool 类型的样子,因此用float来定义
|
||||||
|
float cropAlpha;
|
||||||
|
|
||||||
|
// 是否启用迷雾效果
|
||||||
|
// ps:编辑器还不支持 bool 类型的样子,因此用float来定义
|
||||||
|
float enableFog;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加某个扩散点后混合后的纹理颜色
|
||||||
|
*/
|
||||||
|
vec4 addLightColor(vec4 textureColor, vec2 centerPoint, float radius, vec4 centerColor) {
|
||||||
|
// 计算当前 uv 到圆心起点的距离
|
||||||
|
float dis = distance(v_uv0, centerPoint);
|
||||||
|
|
||||||
|
float a = 1.0 ;
|
||||||
|
|
||||||
|
// 裁剪掉透明区域上的点光
|
||||||
|
if (bool(cropAlpha)) {
|
||||||
|
a *= step(0.01, textureColor.a);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 裁剪掉光束范围外的uv(迷雾效果)
|
||||||
|
if (!bool(enableFog)) {
|
||||||
|
a *= step(dis, radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 加入从中心往外渐变的效果
|
||||||
|
a *= 1.0 - (dis / radius);
|
||||||
|
|
||||||
|
// 计算出圆范围内,不同 uv 对应的实际颜色值
|
||||||
|
vec4 lightColor = centerColor * a;
|
||||||
|
|
||||||
|
// 混合颜色:在原始图像颜色上叠加圆颜色
|
||||||
|
return textureColor * textureColor.a + lightColor;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void main () {
|
||||||
|
vec4 o = vec4(1, 1, 1, 1);
|
||||||
|
|
||||||
|
#if USE_TEXTURE
|
||||||
|
o *= texture(texture, v_uv0);
|
||||||
|
#if CC_USE_ALPHA_ATLAS_TEXTURE
|
||||||
|
o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
o *= v_color;
|
||||||
|
|
||||||
|
ALPHA_TEST(o);
|
||||||
|
|
||||||
|
gl_FragColor = o;
|
||||||
|
|
||||||
|
#if ENABLE_DIFFUSION
|
||||||
|
gl_FragColor = addLightColor(gl_FragColor, centerPoint, radius, centerColor);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}%
|
17
assets/effects/sprite-point-light.effect.meta
Normal file
17
assets/effects/sprite-point-light.effect.meta
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.0.25",
|
||||||
|
"uuid": "72a182fc-08a6-4faa-8e36-8bd84b4a0b53",
|
||||||
|
"compiledShaders": [
|
||||||
|
{
|
||||||
|
"glsl1": {
|
||||||
|
"vert": "\nprecision highp float;\nuniform mediump mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\nattribute vec3 a_position;\nattribute vec4 a_color;\nvarying vec4 v_color;\n#if USE_TEXTURE\nattribute vec2 a_uv0;\nvarying vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}",
|
||||||
|
"frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvarying vec4 v_color;\n#if USE_TEXTURE\nvarying vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if ENABLE_DIFFUSION\nuniform vec4 centerColor;\nuniform vec2 centerPoint;\nuniform float radius;\nuniform float cropAlpha;\nuniform float enableFog;\nvec4 addLightColor(vec4 textureColor, vec2 centerPoint, float radius, vec4 centerColor) {\n float dis = distance(v_uv0, centerPoint);\n float a = 1.0 ;\n if (bool(cropAlpha)) {\n a *= step(0.01, textureColor.a);\n }\n if (!bool(enableFog)) {\n a *= step(dis, radius);\n }\n a *= 1.0 - (dis / radius);\n vec4 lightColor = centerColor * a;\n return textureColor * textureColor.a + lightColor;\n}\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n o *= texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n #if ENABLE_DIFFUSION\n gl_FragColor = addLightColor(gl_FragColor, centerPoint, radius, centerColor);\n #endif\n}"
|
||||||
|
},
|
||||||
|
"glsl3": {
|
||||||
|
"vert": "\nprecision highp float;\nuniform CCGlobal {\n highp vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n mediump vec4 cc_nativeSize;\n highp mat4 cc_matView;\n mediump mat4 cc_matViewInv;\n mediump mat4 cc_matProj;\n mediump mat4 cc_matProjInv;\n mediump mat4 cc_matViewProj;\n mediump mat4 cc_matViewProjInv;\n mediump vec4 cc_cameraPos;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nin vec3 a_position;\nin vec4 a_color;\nout vec4 v_color;\n#if USE_TEXTURE\nin vec2 a_uv0;\nout vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}",
|
||||||
|
"frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform ALPHA_TEST {\n float alphaThreshold;\n };\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nin vec4 v_color;\n#if USE_TEXTURE\nin vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if ENABLE_DIFFUSION\nuniform Diffusion {\n vec4 centerColor;\n vec2 centerPoint;\n float radius;\n float cropAlpha;\n float enableFog;\n};\nvec4 addLightColor(vec4 textureColor, vec2 centerPoint, float radius, vec4 centerColor) {\n float dis = distance(v_uv0, centerPoint);\n float a = 1.0 ;\n if (bool(cropAlpha)) {\n a *= step(0.01, textureColor.a);\n }\n if (!bool(enableFog)) {\n a *= step(dis, radius);\n }\n a *= 1.0 - (dis / radius);\n vec4 lightColor = centerColor * a;\n return textureColor * textureColor.a + lightColor;\n}\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n o *= texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n gl_FragColor = o;\n #if ENABLE_DIFFUSION\n gl_FragColor = addLightColor(gl_FragColor, centerPoint, radius, centerColor);\n #endif\n}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"subMetas": {}
|
||||||
|
}
|
145
assets/effects/sprite-round-corner-crop-v1.effect
Normal file
145
assets/effects/sprite-round-corner-crop-v1.effect
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
|
||||||
|
//
|
||||||
|
// 圆角裁剪(仅支持正方形纹理)
|
||||||
|
//
|
||||||
|
// 原理:https://www.cnblogs.com/jqm304775992/p/4987793.html
|
||||||
|
// 代码:复制 yanjifa/shaderDemor 的 https://github.com/yanjifa/shaderDemo/blob/master/assets/Effect/CircleAvatar.effect
|
||||||
|
|
||||||
|
CCEffect %{
|
||||||
|
techniques:
|
||||||
|
- passes:
|
||||||
|
- vert: vs
|
||||||
|
frag: fs
|
||||||
|
blendState:
|
||||||
|
targets:
|
||||||
|
- blend: true
|
||||||
|
rasterizerState:
|
||||||
|
cullMode: none
|
||||||
|
properties:
|
||||||
|
texture: { value: white }
|
||||||
|
alphaThreshold: { value: 0.5 }
|
||||||
|
# 圆角半径
|
||||||
|
radius: {
|
||||||
|
value: 0.4,
|
||||||
|
editor: {
|
||||||
|
tooltip: "圆角半径"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}%
|
||||||
|
|
||||||
|
|
||||||
|
CCProgram vs %{
|
||||||
|
precision highp float;
|
||||||
|
|
||||||
|
#include <cc-global>
|
||||||
|
#include <cc-local>
|
||||||
|
|
||||||
|
in vec3 a_position;
|
||||||
|
in vec4 a_color;
|
||||||
|
out vec4 v_color;
|
||||||
|
|
||||||
|
#if USE_TEXTURE
|
||||||
|
in vec2 a_uv0;
|
||||||
|
out vec2 v_uv0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void main () {
|
||||||
|
vec4 pos = vec4(a_position, 1);
|
||||||
|
|
||||||
|
#if CC_USE_MODEL
|
||||||
|
pos = cc_matViewProj * cc_matWorld * pos;
|
||||||
|
#else
|
||||||
|
pos = cc_matViewProj * pos;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if USE_TEXTURE
|
||||||
|
v_uv0 = a_uv0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
v_color = a_color;
|
||||||
|
|
||||||
|
gl_Position = pos;
|
||||||
|
}
|
||||||
|
}%
|
||||||
|
|
||||||
|
|
||||||
|
CCProgram fs %{
|
||||||
|
precision highp float;
|
||||||
|
|
||||||
|
#include <alpha-test>
|
||||||
|
|
||||||
|
in vec4 v_color;
|
||||||
|
|
||||||
|
#if USE_TEXTURE
|
||||||
|
in vec2 v_uv0;
|
||||||
|
uniform sampler2D texture;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if ENABLE_ROUNDCORNER
|
||||||
|
uniform RoundCorner {
|
||||||
|
// 圆角半径
|
||||||
|
float radius;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void main () {
|
||||||
|
vec4 o = vec4(1, 1, 1, 1);
|
||||||
|
|
||||||
|
#if USE_TEXTURE
|
||||||
|
o *= texture(texture, v_uv0);
|
||||||
|
#if CC_USE_ALPHA_ATLAS_TEXTURE
|
||||||
|
o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
o *= v_color;
|
||||||
|
|
||||||
|
ALPHA_TEST(o);
|
||||||
|
|
||||||
|
#if ENABLE_ROUNDCORNER
|
||||||
|
// 约束圆角半径范围在 [0.0, 0.5]
|
||||||
|
float circleRadius = clamp(0.0, 0.5, radius);
|
||||||
|
|
||||||
|
// 将纹理uv往左上偏移,实现偏移后的坐标系原点在纹理中心
|
||||||
|
vec2 uv = v_uv0.xy - vec2(0.5, 0.5);
|
||||||
|
|
||||||
|
// uv.x , uv.y : 为偏移后的的uv
|
||||||
|
// abs(uv.x) , abs(uv.y) : 将第二、三、四象限的点都投影到第一象限上,这样子只需要处理第一象限的情况就可以,简化判断
|
||||||
|
// 0.5 - radius : 计算出第一象限的圆角所在圆的圆心坐标
|
||||||
|
// (rx, ry) : 偏移映射后的 新的uv 坐标,相对于 第一象限圆角坐在圆心坐标 的相对坐标
|
||||||
|
float rx = abs(uv.x) - (0.5 - circleRadius);
|
||||||
|
float ry = abs(uv.y) - (0.5 - circleRadius);
|
||||||
|
|
||||||
|
// 区分 以第一象限圆角所在圆心坐标为原点的坐标的四个象限
|
||||||
|
//
|
||||||
|
// 第一象限 mx = 1, my = 1
|
||||||
|
// 第二象限 mx = 0, my = 1
|
||||||
|
// 第三象限 mx = 0, my = 0
|
||||||
|
// 第四象限 mx = 1, my = 0
|
||||||
|
//
|
||||||
|
// 当 mx * my 时,只要等于1,那就是标识第一象限(实际对应圆角区域所在矩形),否则就是第二、三、四象限
|
||||||
|
float mx = step(0.5 - circleRadius, abs(uv.x));
|
||||||
|
float my = step(0.5 - circleRadius, abs(uv.y));
|
||||||
|
|
||||||
|
// 计算相对uv坐标到圆心的距离
|
||||||
|
float len = length(vec2(rx, ry));
|
||||||
|
|
||||||
|
// mx * my = 0 时,代表非圆角区域,a 值为1,代表完全采用原始纹理的透明度
|
||||||
|
// mx * my = 1 时,代表园所所在矩形区域
|
||||||
|
// step(circleRadius, len) 可以区分出圆角所在矩形区域的 圆角区域 和 非圆角区域
|
||||||
|
// 其中圆角区域值为0,非圆角区域值为1
|
||||||
|
// 当为圆角区域时,a 值为1,代表完全采用原始纹理透明度
|
||||||
|
// 当为非圆角区域时,a 值为0,代表完全透明
|
||||||
|
// 至此已经实现圆角裁剪
|
||||||
|
//
|
||||||
|
// smoothstep(0., circleRadius * 0.01, len - circleRadius) 是用于抗锯齿优化
|
||||||
|
// 原理:针对点在非圆角区域的情况,针对点在大于「圆半径一点点」地方的区域,进行平滑过渡,以实现抗锯齿
|
||||||
|
// 其中,
|
||||||
|
// 「圆半径一点点」用 circleRadius * 0.01 表示(0.01 可自行改变)
|
||||||
|
// 点在大于圆半径的区域用 len - circleRadius ,此值会在 [0.0, circleRadius * 0.01] 之间时会平滑过渡
|
||||||
|
float a = 1.0 - mx * my * step(circleRadius, len) * smoothstep(0., circleRadius * 0.01, len - circleRadius);
|
||||||
|
o = vec4(o.rgb, o.a * a);
|
||||||
|
#endif
|
||||||
|
gl_FragColor = o;
|
||||||
|
}
|
||||||
|
}%
|
17
assets/effects/sprite-round-corner-crop-v1.effect.meta
Normal file
17
assets/effects/sprite-round-corner-crop-v1.effect.meta
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.0.25",
|
||||||
|
"uuid": "a4afedba-5234-44d7-9031-cba83051d521",
|
||||||
|
"compiledShaders": [
|
||||||
|
{
|
||||||
|
"glsl1": {
|
||||||
|
"vert": "\nprecision highp float;\nuniform mediump mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\nattribute vec3 a_position;\nattribute vec4 a_color;\nvarying vec4 v_color;\n#if USE_TEXTURE\nattribute vec2 a_uv0;\nvarying vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}",
|
||||||
|
"frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvarying vec4 v_color;\n#if USE_TEXTURE\nvarying vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if ENABLE_ROUNDCORNER\nuniform float radius;\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n o *= texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n #if ENABLE_ROUNDCORNER\n float circleRadius = clamp(0.0, 0.5, radius);\n vec2 uv = v_uv0.xy - vec2(0.5, 0.5);\n float rx = abs(uv.x) - (0.5 - circleRadius);\n float ry = abs(uv.y) - (0.5 - circleRadius);\n float mx = step(0.5 - circleRadius, abs(uv.x));\n float my = step(0.5 - circleRadius, abs(uv.y));\n float len = length(vec2(rx, ry));\n float a = 1.0 - mx * my * step(circleRadius, len) * smoothstep(0., circleRadius * 0.01, len - circleRadius);\n o = vec4(o.rgb, o.a * a);\n #endif\n gl_FragColor = o;\n}"
|
||||||
|
},
|
||||||
|
"glsl3": {
|
||||||
|
"vert": "\nprecision highp float;\nuniform CCGlobal {\n highp vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n mediump vec4 cc_nativeSize;\n highp mat4 cc_matView;\n mediump mat4 cc_matViewInv;\n mediump mat4 cc_matProj;\n mediump mat4 cc_matProjInv;\n mediump mat4 cc_matViewProj;\n mediump mat4 cc_matViewProjInv;\n mediump vec4 cc_cameraPos;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nin vec3 a_position;\nin vec4 a_color;\nout vec4 v_color;\n#if USE_TEXTURE\nin vec2 a_uv0;\nout vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}",
|
||||||
|
"frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform ALPHA_TEST {\n float alphaThreshold;\n };\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nin vec4 v_color;\n#if USE_TEXTURE\nin vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if ENABLE_ROUNDCORNER\nuniform RoundCorner {\n float radius;\n};\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n o *= texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n #if ENABLE_ROUNDCORNER\n float circleRadius = clamp(0.0, 0.5, radius);\n vec2 uv = v_uv0.xy - vec2(0.5, 0.5);\n float rx = abs(uv.x) - (0.5 - circleRadius);\n float ry = abs(uv.y) - (0.5 - circleRadius);\n float mx = step(0.5 - circleRadius, abs(uv.x));\n float my = step(0.5 - circleRadius, abs(uv.y));\n float len = length(vec2(rx, ry));\n float a = 1.0 - mx * my * step(circleRadius, len) * smoothstep(0., circleRadius * 0.01, len - circleRadius);\n o = vec4(o.rgb, o.a * a);\n #endif\n gl_FragColor = o;\n}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"subMetas": {}
|
||||||
|
}
|
192
assets/effects/sprite-round-corner-crop-v2.effect
Normal file
192
assets/effects/sprite-round-corner-crop-v2.effect
Normal file
@@ -0,0 +1,192 @@
|
|||||||
|
// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
|
||||||
|
//
|
||||||
|
// 圆角裁剪(支持任意宽高纹理)
|
||||||
|
//
|
||||||
|
// 原理:
|
||||||
|
// 1. 正方形纹理的圆角原理参考 https://www.cnblogs.com/jqm304775992/p/4987793.html
|
||||||
|
// 2. 正方形纹理的圆角代码参考 yanjifa/shaderDemor 的 https://github.com/yanjifa/shaderDemo/blob/master/assets/Effect/CircleAvatar.effect
|
||||||
|
// 3. 上述皆为只针对正方形纹理做的操作,如果是长方形的纹理,那么圆角就会有拉伸后的效果,最后变成看起来就不是圆角了,本特效支持任意长方形做圆角
|
||||||
|
|
||||||
|
CCEffect %{
|
||||||
|
techniques:
|
||||||
|
- passes:
|
||||||
|
- vert: vs
|
||||||
|
frag: fs
|
||||||
|
blendState:
|
||||||
|
targets:
|
||||||
|
- blend: true
|
||||||
|
rasterizerState:
|
||||||
|
cullMode: none
|
||||||
|
properties:
|
||||||
|
texture: { value: white }
|
||||||
|
alphaThreshold: { value: 0.5 }
|
||||||
|
|
||||||
|
# 圆角x轴半径长度(相对于纹理宽度)
|
||||||
|
xRadius: {
|
||||||
|
value: 0.4,
|
||||||
|
editor: {
|
||||||
|
tooltip: "圆角x轴半径长度(相对于纹理宽度)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# 圆角y轴半径长度(相对于纹理高度)
|
||||||
|
yRadius: {
|
||||||
|
value: 0.4,
|
||||||
|
editor: {
|
||||||
|
tooltip: "圆角y轴半径长度(相对于纹理高度)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}%
|
||||||
|
|
||||||
|
|
||||||
|
CCProgram vs %{
|
||||||
|
precision highp float;
|
||||||
|
|
||||||
|
#include <cc-global>
|
||||||
|
#include <cc-local>
|
||||||
|
|
||||||
|
in vec3 a_position;
|
||||||
|
in vec4 a_color;
|
||||||
|
out vec4 v_color;
|
||||||
|
|
||||||
|
#if USE_TEXTURE
|
||||||
|
in vec2 a_uv0;
|
||||||
|
out vec2 v_uv0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void main () {
|
||||||
|
vec4 pos = vec4(a_position, 1);
|
||||||
|
|
||||||
|
#if CC_USE_MODEL
|
||||||
|
pos = cc_matViewProj * cc_matWorld * pos;
|
||||||
|
#else
|
||||||
|
pos = cc_matViewProj * pos;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if USE_TEXTURE
|
||||||
|
v_uv0 = a_uv0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
v_color = a_color;
|
||||||
|
|
||||||
|
gl_Position = pos;
|
||||||
|
}
|
||||||
|
}%
|
||||||
|
|
||||||
|
|
||||||
|
CCProgram fs %{
|
||||||
|
precision highp float;
|
||||||
|
|
||||||
|
#include <alpha-test>
|
||||||
|
|
||||||
|
in vec4 v_color;
|
||||||
|
|
||||||
|
#if USE_TEXTURE
|
||||||
|
in vec2 v_uv0;
|
||||||
|
uniform sampler2D texture;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if ENABLE_ROUNDCORNER
|
||||||
|
uniform RoundCorner {
|
||||||
|
// 圆角x轴半径长度(相对于纹理宽度)
|
||||||
|
float xRadius;
|
||||||
|
|
||||||
|
// 圆角y轴半径长度(相对于纹理高度)
|
||||||
|
float yRadius;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void main () {
|
||||||
|
vec4 o = vec4(1, 1, 1, 1);
|
||||||
|
|
||||||
|
#if USE_TEXTURE
|
||||||
|
o *= texture(texture, v_uv0);
|
||||||
|
#if CC_USE_ALPHA_ATLAS_TEXTURE
|
||||||
|
o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
o *= v_color;
|
||||||
|
|
||||||
|
ALPHA_TEST(o);
|
||||||
|
|
||||||
|
#if ENABLE_ROUNDCORNER
|
||||||
|
|
||||||
|
// 约束圆角半径范围在 [0.0, 0.5]
|
||||||
|
//
|
||||||
|
// 请注意这里我是用椭圆前缀去命名的半径
|
||||||
|
//
|
||||||
|
// 为什么是椭圆?
|
||||||
|
//
|
||||||
|
// 因为圆角,相对于长方形的纹理的宽高来说,归一化后值并不一样,不是圆,而是一个椭圆
|
||||||
|
//
|
||||||
|
// 比如:
|
||||||
|
//
|
||||||
|
// 纹理是 200 x 100 的像素,圆角半径是20像素,那么归一化后
|
||||||
|
// X轴上的半径就是 20 / 200 = 0.1
|
||||||
|
// Y轴上的半径就是 20 / 100 = 0.2
|
||||||
|
//
|
||||||
|
// 这就会变成是椭圆,而不是圆
|
||||||
|
float ellipseXRadius = clamp(0.0, 0.5, xRadius);
|
||||||
|
float ellipseYRadius = clamp(0.0, 0.5, yRadius);
|
||||||
|
|
||||||
|
// 将纹理uv往左上偏移,实现偏移后的坐标系原点在纹理中心
|
||||||
|
vec2 uv = v_uv0.xy - vec2(0.5, 0.5);
|
||||||
|
|
||||||
|
// uv.x , uv.y : 为偏移后的的uv
|
||||||
|
// abs(uv.x) , abs(uv.y) : 将第二、三、四象限的点都投影到第一象限上,这样子只需要处理第一象限的情况就可以,简化判断
|
||||||
|
// 0.5 - radius : 计算出第一象限的圆角所在圆的圆心坐标
|
||||||
|
// (rx, ry) : 偏移映射后的 新的uv 坐标,相对于 第一象限圆角坐在圆心坐标 的相对坐标
|
||||||
|
float rx = abs(uv.x) - (0.5 - ellipseXRadius);
|
||||||
|
float ry = abs(uv.y) - (0.5 - ellipseYRadius);
|
||||||
|
|
||||||
|
// 区分 以第一象限圆角所在圆心坐标为原点的坐标的四个象限
|
||||||
|
//
|
||||||
|
// 第一象限 mx = 1, my = 1
|
||||||
|
// 第二象限 mx = 0, my = 1
|
||||||
|
// 第三象限 mx = 0, my = 0
|
||||||
|
// 第四象限 mx = 1, my = 0
|
||||||
|
//
|
||||||
|
// 当 mx * my 时,只要等于1,那就是标识第一象限(实际对应圆角区域所在矩形),否则就是第二、三、四象限
|
||||||
|
float mx = step(0.5 - ellipseXRadius, abs(uv.x));
|
||||||
|
float my = step(0.5 - ellipseYRadius, abs(uv.y));
|
||||||
|
|
||||||
|
// 判断点(rx, ry)是否在椭圆外部(应用椭圆公式)
|
||||||
|
float isOutOfEllipse = step(1.0, pow(rx, 2.0) / pow(xRadius, 2.0) + pow(ry, 2.0) / pow(yRadius, 2.0));
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// 抗锯齿
|
||||||
|
// 1. 先计算当前点到椭圆中心的角度
|
||||||
|
float angleInRadian = atan(ry / rx);
|
||||||
|
|
||||||
|
// 2. 计算这个角度下,对于对应圆角(椭圆)上的点
|
||||||
|
vec2 pointInEllipse = vec2(xRadius * cos(angleInRadian), yRadius * sin(angleInRadian));
|
||||||
|
|
||||||
|
// 3. 计算这个角度下,比当前圆角大一点椭圆上的点
|
||||||
|
vec2 pointInBigEllipse = vec2((xRadius * 1.01) * cos(angleInRadian), (yRadius * 1.01)* sin(angleInRadian));
|
||||||
|
|
||||||
|
// 4. 计算最远点到当前椭圆的距离
|
||||||
|
float maxDis = distance(pointInBigEllipse, pointInEllipse);
|
||||||
|
|
||||||
|
// 5. 计算当前点到当前椭圆的距离
|
||||||
|
float curDis = distance(vec2(rx, ry), pointInEllipse);
|
||||||
|
|
||||||
|
// 6. 生成插值
|
||||||
|
float smo = smoothstep(0.0, maxDis, curDis);
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// mx * my = 0 时,代表非椭圆角区域,alpha 值为1,代表完全采用原始纹理的透明度
|
||||||
|
// mx * my = 1 时,代表椭圆角所在矩形区域
|
||||||
|
// isOutOfEllipse:
|
||||||
|
// 当点在椭圆外部时,此值为1,导致 alpha 最终值为0.0,即表示不显示椭圆外部的像素
|
||||||
|
// 当点在椭圆内部时,此值为0,导致 alpha 最终值为1.0,即表示显示椭圆内部的像素
|
||||||
|
// smo : 抗锯齿实现
|
||||||
|
// float alpha = 1.0 - mx * my * isOutOfEllipse;
|
||||||
|
float alpha = 1.0 - mx * my * isOutOfEllipse * smo;
|
||||||
|
|
||||||
|
o = vec4(o.rgb, o.a * alpha);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
gl_FragColor = o;
|
||||||
|
}
|
||||||
|
}%
|
17
assets/effects/sprite-round-corner-crop-v2.effect.meta
Normal file
17
assets/effects/sprite-round-corner-crop-v2.effect.meta
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.0.25",
|
||||||
|
"uuid": "7c24b57e-e819-4fc9-a8d2-b06cf61b782d",
|
||||||
|
"compiledShaders": [
|
||||||
|
{
|
||||||
|
"glsl1": {
|
||||||
|
"vert": "\nprecision highp float;\nuniform mediump mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\nattribute vec3 a_position;\nattribute vec4 a_color;\nvarying vec4 v_color;\n#if USE_TEXTURE\nattribute vec2 a_uv0;\nvarying vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}",
|
||||||
|
"frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nvarying vec4 v_color;\n#if USE_TEXTURE\nvarying vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if ENABLE_ROUNDCORNER\nuniform float xRadius;\nuniform float yRadius;\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n o *= texture2D(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n #if ENABLE_ROUNDCORNER\n float ellipseXRadius = clamp(0.0, 0.5, xRadius);\n float ellipseYRadius = clamp(0.0, 0.5, yRadius);\n vec2 uv = v_uv0.xy - vec2(0.5, 0.5);\n float rx = abs(uv.x) - (0.5 - ellipseXRadius);\n float ry = abs(uv.y) - (0.5 - ellipseYRadius);\n float mx = step(0.5 - ellipseXRadius, abs(uv.x));\n float my = step(0.5 - ellipseYRadius, abs(uv.y));\n float isOutOfEllipse = step(1.0, pow(rx, 2.0) / pow(xRadius, 2.0) + pow(ry, 2.0) / pow(yRadius, 2.0));\n float angleInRadian = atan(ry / rx);\n vec2 pointInEllipse = vec2(xRadius * cos(angleInRadian), yRadius * sin(angleInRadian));\n vec2 pointInBigEllipse = vec2((xRadius * 1.01) * cos(angleInRadian), (yRadius * 1.01)* sin(angleInRadian));\n float maxDis = distance(pointInBigEllipse, pointInEllipse);\n float curDis = distance(vec2(rx, ry), pointInEllipse);\n float smo = smoothstep(0.0, maxDis, curDis);\n float alpha = 1.0 - mx * my * isOutOfEllipse * smo;\n o = vec4(o.rgb, o.a * alpha);\n #endif\n gl_FragColor = o;\n}"
|
||||||
|
},
|
||||||
|
"glsl3": {
|
||||||
|
"vert": "\nprecision highp float;\nuniform CCGlobal {\n highp vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_screenScale;\n mediump vec4 cc_nativeSize;\n highp mat4 cc_matView;\n mediump mat4 cc_matViewInv;\n mediump mat4 cc_matProj;\n mediump mat4 cc_matProjInv;\n mediump mat4 cc_matViewProj;\n mediump mat4 cc_matViewProjInv;\n mediump vec4 cc_cameraPos;\n};\nuniform CCLocal {\n mat4 cc_matWorld;\n mat4 cc_matWorldIT;\n};\nin vec3 a_position;\nin vec4 a_color;\nout vec4 v_color;\n#if USE_TEXTURE\nin vec2 a_uv0;\nout vec2 v_uv0;\n#endif\nvoid main () {\n vec4 pos = vec4(a_position, 1);\n #if CC_USE_MODEL\n pos = cc_matViewProj * cc_matWorld * pos;\n #else\n pos = cc_matViewProj * pos;\n #endif\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n v_color = a_color;\n gl_Position = pos;\n}",
|
||||||
|
"frag": "\nprecision highp float;\n#if USE_ALPHA_TEST\n uniform ALPHA_TEST {\n float alphaThreshold;\n };\n#endif\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\nin vec4 v_color;\n#if USE_TEXTURE\nin vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n#if ENABLE_ROUNDCORNER\nuniform RoundCorner {\n float xRadius;\n float yRadius;\n};\n#endif\nvoid main () {\n vec4 o = vec4(1, 1, 1, 1);\n #if USE_TEXTURE\n o *= texture(texture, v_uv0);\n #if CC_USE_ALPHA_ATLAS_TEXTURE\n o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n #endif\n #endif\n o *= v_color;\n ALPHA_TEST(o);\n #if ENABLE_ROUNDCORNER\n float ellipseXRadius = clamp(0.0, 0.5, xRadius);\n float ellipseYRadius = clamp(0.0, 0.5, yRadius);\n vec2 uv = v_uv0.xy - vec2(0.5, 0.5);\n float rx = abs(uv.x) - (0.5 - ellipseXRadius);\n float ry = abs(uv.y) - (0.5 - ellipseYRadius);\n float mx = step(0.5 - ellipseXRadius, abs(uv.x));\n float my = step(0.5 - ellipseYRadius, abs(uv.y));\n float isOutOfEllipse = step(1.0, pow(rx, 2.0) / pow(xRadius, 2.0) + pow(ry, 2.0) / pow(yRadius, 2.0));\n float angleInRadian = atan(ry / rx);\n vec2 pointInEllipse = vec2(xRadius * cos(angleInRadian), yRadius * sin(angleInRadian));\n vec2 pointInBigEllipse = vec2((xRadius * 1.01) * cos(angleInRadian), (yRadius * 1.01)* sin(angleInRadian));\n float maxDis = distance(pointInBigEllipse, pointInEllipse);\n float curDis = distance(vec2(rx, ry), pointInEllipse);\n float smo = smoothstep(0.0, maxDis, curDis);\n float alpha = 1.0 - mx * my * isOutOfEllipse * smo;\n o = vec4(o.rgb, o.a * alpha);\n #endif\n gl_FragColor = o;\n}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"subMetas": {}
|
||||||
|
}
|
@@ -1,13 +1,16 @@
|
|||||||
{
|
{
|
||||||
"__type__": "cc.Material",
|
"__type__": "cc.Material",
|
||||||
"_name": "",
|
"_name": "builtin-2d-sprite-explain",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"_native": "",
|
"_native": "",
|
||||||
"_effectAsset": {
|
"_effectAsset": {
|
||||||
"__uuid__": "8f277982-dc0a-4030-90cc-b336a928a372"
|
"__uuid__": "8f277982-dc0a-4030-90cc-b336a928a372"
|
||||||
},
|
},
|
||||||
"_defines": {
|
"_techniqueData": {
|
||||||
|
"0": {
|
||||||
|
"defines": {
|
||||||
"USE_TEXTURE": true
|
"USE_TEXTURE": true
|
||||||
},
|
}
|
||||||
"_props": {}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ver": "1.0.2",
|
"ver": "1.0.3",
|
||||||
"uuid": "ca058f99-941b-40f2-b208-d776de59abed",
|
"uuid": "ca058f99-941b-40f2-b208-d776de59abed",
|
||||||
"dataAsSubAsset": null,
|
"dataAsSubAsset": null,
|
||||||
"subMetas": {}
|
"subMetas": {}
|
||||||
|
29
assets/materials/sprite-flash-light.mtl
Normal file
29
assets/materials/sprite-flash-light.mtl
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"__type__": "cc.Material",
|
||||||
|
"_name": "sprite-flash-light",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"_native": "",
|
||||||
|
"_effectAsset": {
|
||||||
|
"__uuid__": "e9682cd1-a19c-4fcb-ad8c-cf1783b805e6"
|
||||||
|
},
|
||||||
|
"_techniqueIndex": 0,
|
||||||
|
"_techniqueData": {
|
||||||
|
"0": {
|
||||||
|
"props": {
|
||||||
|
"lightColor": {
|
||||||
|
"__type__": "cc.Color",
|
||||||
|
"r": 255,
|
||||||
|
"g": 245,
|
||||||
|
"b": 0,
|
||||||
|
"a": 255
|
||||||
|
},
|
||||||
|
"lightAngle": 36,
|
||||||
|
"lightWidth": 0.2
|
||||||
|
},
|
||||||
|
"defines": {
|
||||||
|
"USE_TEXTURE": true,
|
||||||
|
"ENABLE_LIGHT": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
6
assets/materials/sprite-flash-light.mtl.meta
Normal file
6
assets/materials/sprite-flash-light.mtl.meta
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.0.3",
|
||||||
|
"uuid": "43a22f18-72fc-4399-b5ae-8305705861f4",
|
||||||
|
"dataAsSubAsset": null,
|
||||||
|
"subMetas": {}
|
||||||
|
}
|
18
assets/materials/sprite-gaussian-blur-v1.mtl
Normal file
18
assets/materials/sprite-gaussian-blur-v1.mtl
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"__type__": "cc.Material",
|
||||||
|
"_name": "sprite-gaussian-blur-v1",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"_native": "",
|
||||||
|
"_effectAsset": {
|
||||||
|
"__uuid__": "41f4d474-d707-45bb-af93-637573f92d54"
|
||||||
|
},
|
||||||
|
"_techniqueIndex": 0,
|
||||||
|
"_techniqueData": {
|
||||||
|
"0": {
|
||||||
|
"defines": {
|
||||||
|
"USE_TEXTURE": true,
|
||||||
|
"ENABLE_GAUSSIAN_BLUR": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
6
assets/materials/sprite-gaussian-blur-v1.mtl.meta
Normal file
6
assets/materials/sprite-gaussian-blur-v1.mtl.meta
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.0.3",
|
||||||
|
"uuid": "dd3d8f78-9b79-4ca7-9bf7-7a09f7b34108",
|
||||||
|
"dataAsSubAsset": null,
|
||||||
|
"subMetas": {}
|
||||||
|
}
|
@@ -1,26 +1,18 @@
|
|||||||
{
|
{
|
||||||
"__type__": "cc.Material",
|
"__type__": "cc.Material",
|
||||||
"_name": "",
|
"_name": "New Material",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"_native": "",
|
"_native": "",
|
||||||
"_effectAsset": {
|
"_effectAsset": {
|
||||||
"__uuid__": "90211f16-c00e-4c37-a192-43ec50c9ea35"
|
"__uuid__": "345a48c3-c00c-45d2-b6c9-b1ac49f46662"
|
||||||
},
|
},
|
||||||
"_defines": {
|
"_techniqueIndex": 0,
|
||||||
|
"_techniqueData": {
|
||||||
|
"0": {
|
||||||
|
"defines": {
|
||||||
"USE_TEXTURE": true,
|
"USE_TEXTURE": true,
|
||||||
"USE_ALPHA_TEST": false,
|
|
||||||
"SHOW_INNER_GLOW": true
|
"SHOW_INNER_GLOW": true
|
||||||
},
|
}
|
||||||
"_props": {
|
}
|
||||||
"texture": null,
|
|
||||||
"glowColor": {
|
|
||||||
"__type__": "cc.Color",
|
|
||||||
"r": 255,
|
|
||||||
"g": 0,
|
|
||||||
"b": 0,
|
|
||||||
"a": 255
|
|
||||||
},
|
|
||||||
"glowColorSize": 0.2,
|
|
||||||
"glowThreshold": 0.1
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"ver": "1.0.2",
|
"ver": "1.0.3",
|
||||||
"uuid": "2c760728-404d-4553-a1d0-7ab18263845c",
|
"uuid": "647e873f-e0ed-4ce7-84cb-9e4d4f8a211f",
|
||||||
"dataAsSubAsset": null,
|
"dataAsSubAsset": null,
|
||||||
"subMetas": {}
|
"subMetas": {}
|
||||||
}
|
}
|
@@ -1,26 +1,18 @@
|
|||||||
{
|
{
|
||||||
"__type__": "cc.Material",
|
"__type__": "cc.Material",
|
||||||
"_name": "",
|
"_name": "New Material",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"_native": "",
|
"_native": "",
|
||||||
"_effectAsset": {
|
"_effectAsset": {
|
||||||
"__uuid__": "89f30b2e-b75e-49b1-9dfc-cb341cadd30a"
|
"__uuid__": "67e9833e-aa43-427a-ba89-d7bdd1ef0aed"
|
||||||
},
|
},
|
||||||
"_defines": {
|
"_techniqueIndex": 0,
|
||||||
|
"_techniqueData": {
|
||||||
|
"0": {
|
||||||
|
"defines": {
|
||||||
"USE_TEXTURE": true,
|
"USE_TEXTURE": true,
|
||||||
"USE_ALPHA_TEST": false,
|
|
||||||
"SHOW_OUTTER_GLOW": true
|
"SHOW_OUTTER_GLOW": true
|
||||||
},
|
}
|
||||||
"_props": {
|
}
|
||||||
"texture": null,
|
|
||||||
"glowColor": {
|
|
||||||
"__type__": "cc.Color",
|
|
||||||
"r": 255,
|
|
||||||
"g": 0,
|
|
||||||
"b": 0,
|
|
||||||
"a": 255
|
|
||||||
},
|
|
||||||
"glowColorSize": 0.15,
|
|
||||||
"glowThreshold": 1
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"ver": "1.0.2",
|
"ver": "1.0.3",
|
||||||
"uuid": "16dd0f06-6280-4d74-8483-a50e23c00733",
|
"uuid": "b82b2ec7-1bf3-4840-b9af-66d2a0250c14",
|
||||||
"dataAsSubAsset": null,
|
"dataAsSubAsset": null,
|
||||||
"subMetas": {}
|
"subMetas": {}
|
||||||
}
|
}
|
@@ -1,14 +1,18 @@
|
|||||||
{
|
{
|
||||||
"__type__": "cc.Material",
|
"__type__": "cc.Material",
|
||||||
"_name": "",
|
"_name": "sprite-gray",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"_native": "",
|
"_native": "",
|
||||||
"_effectAsset": {
|
"_effectAsset": {
|
||||||
"__uuid__": "2e5b29d9-dd5e-4f3d-92e9-e580745b3bc8"
|
"__uuid__": "2e5b29d9-dd5e-4f3d-92e9-e580745b3bc8"
|
||||||
},
|
},
|
||||||
"_defines": {
|
"_techniqueIndex": 0,
|
||||||
|
"_techniqueData": {
|
||||||
|
"0": {
|
||||||
|
"defines": {
|
||||||
"USE_TEXTURE": true,
|
"USE_TEXTURE": true,
|
||||||
"USE_GRAY": true
|
"USE_GRAY": true
|
||||||
},
|
}
|
||||||
"_props": {}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ver": "1.0.2",
|
"ver": "1.0.3",
|
||||||
"uuid": "ee9df2cd-dc1c-4fa7-9ef6-b253eee81746",
|
"uuid": "ee9df2cd-dc1c-4fa7-9ef6-b253eee81746",
|
||||||
"dataAsSubAsset": null,
|
"dataAsSubAsset": null,
|
||||||
"subMetas": {}
|
"subMetas": {}
|
||||||
|
@@ -1,17 +1,22 @@
|
|||||||
{
|
{
|
||||||
"__type__": "cc.Material",
|
"__type__": "cc.Material",
|
||||||
"_name": "",
|
"_name": "sprite-mosaic",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"_native": "",
|
"_native": "",
|
||||||
"_effectAsset": {
|
"_effectAsset": {
|
||||||
"__uuid__": "9638979d-62b3-4e5b-adea-7ad706e66e65"
|
"__uuid__": "9638979d-62b3-4e5b-adea-7ad706e66e65"
|
||||||
},
|
},
|
||||||
"_defines": {
|
"_techniqueIndex": 0,
|
||||||
|
"_techniqueData": {
|
||||||
|
"0": {
|
||||||
|
"props": {
|
||||||
|
"xBlockCount": 40,
|
||||||
|
"yBlockCount": 40
|
||||||
|
},
|
||||||
|
"defines": {
|
||||||
"USE_TEXTURE": true,
|
"USE_TEXTURE": true,
|
||||||
"USE_MOSAIC": true
|
"USE_MOSAIC": true
|
||||||
},
|
}
|
||||||
"_props": {
|
}
|
||||||
"xBlockCount": 50,
|
|
||||||
"yBlockCount": 50
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ver": "1.0.2",
|
"ver": "1.0.3",
|
||||||
"uuid": "f2651803-80c3-4665-bd81-2ad946a12dec",
|
"uuid": "f2651803-80c3-4665-bd81-2ad946a12dec",
|
||||||
"dataAsSubAsset": null,
|
"dataAsSubAsset": null,
|
||||||
"subMetas": {}
|
"subMetas": {}
|
||||||
|
@@ -1,14 +1,18 @@
|
|||||||
{
|
{
|
||||||
"__type__": "cc.Material",
|
"__type__": "cc.Material",
|
||||||
"_name": "",
|
"_name": "sprite-old-photo",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"_native": "",
|
"_native": "",
|
||||||
"_effectAsset": {
|
"_effectAsset": {
|
||||||
"__uuid__": "211eddf3-c53d-46e3-8c09-c1bf38e644e2"
|
"__uuid__": "211eddf3-c53d-46e3-8c09-c1bf38e644e2"
|
||||||
},
|
},
|
||||||
"_defines": {
|
"_techniqueIndex": 0,
|
||||||
|
"_techniqueData": {
|
||||||
|
"0": {
|
||||||
|
"defines": {
|
||||||
"USE_TEXTURE": true,
|
"USE_TEXTURE": true,
|
||||||
"USE_OLD_PHOTO": true
|
"USE_OLD_PHOTO": true
|
||||||
},
|
}
|
||||||
"_props": {}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ver": "1.0.2",
|
"ver": "1.0.3",
|
||||||
"uuid": "268b1aff-299a-4735-9f5c-5aa8d4d51788",
|
"uuid": "268b1aff-299a-4735-9f5c-5aa8d4d51788",
|
||||||
"dataAsSubAsset": null,
|
"dataAsSubAsset": null,
|
||||||
"subMetas": {}
|
"subMetas": {}
|
||||||
|
@@ -1,25 +1,18 @@
|
|||||||
{
|
{
|
||||||
"__type__": "cc.Material",
|
"__type__": "cc.Material",
|
||||||
"_name": "",
|
"_name": "New Material",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"_native": "",
|
"_native": "",
|
||||||
"_effectAsset": {
|
"_effectAsset": {
|
||||||
"__uuid__": "559dcd1e-233b-4e1f-b1da-733c9232f06f"
|
"__uuid__": "34c2ed47-4d59-41c4-b91c-157c32e9d0eb"
|
||||||
},
|
},
|
||||||
"_defines": {
|
"_techniqueIndex": 0,
|
||||||
|
"_techniqueData": {
|
||||||
|
"0": {
|
||||||
|
"defines": {
|
||||||
"USE_TEXTURE": true,
|
"USE_TEXTURE": true,
|
||||||
"USE_ALPHA_TEST": false,
|
|
||||||
"SHOW_OUT_LINE": true
|
"SHOW_OUT_LINE": true
|
||||||
},
|
}
|
||||||
"_props": {
|
}
|
||||||
"texture": null,
|
|
||||||
"outlineColor": {
|
|
||||||
"__type__": "cc.Color",
|
|
||||||
"r": 255,
|
|
||||||
"g": 0,
|
|
||||||
"b": 0,
|
|
||||||
"a": 255
|
|
||||||
},
|
|
||||||
"outlineWidth": 0.002
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"ver": "1.0.2",
|
"ver": "1.0.3",
|
||||||
"uuid": "daf44951-2c80-4778-b99f-52cfc78ab053",
|
"uuid": "df1eb418-ec89-4e04-a579-03fcfbc315fc",
|
||||||
"dataAsSubAsset": null,
|
"dataAsSubAsset": null,
|
||||||
"subMetas": {}
|
"subMetas": {}
|
||||||
}
|
}
|
21
assets/materials/sprite-point-light.mtl
Normal file
21
assets/materials/sprite-point-light.mtl
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"__type__": "cc.Material",
|
||||||
|
"_name": "sprite-point-light",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"_native": "",
|
||||||
|
"_effectAsset": {
|
||||||
|
"__uuid__": "72a182fc-08a6-4faa-8e36-8bd84b4a0b53"
|
||||||
|
},
|
||||||
|
"_techniqueIndex": 0,
|
||||||
|
"_techniqueData": {
|
||||||
|
"0": {
|
||||||
|
"props": {
|
||||||
|
"radius": 0.4
|
||||||
|
},
|
||||||
|
"defines": {
|
||||||
|
"USE_TEXTURE": true,
|
||||||
|
"ENABLE_DIFFUSION": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
6
assets/materials/sprite-point-light.mtl.meta
Normal file
6
assets/materials/sprite-point-light.mtl.meta
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.0.3",
|
||||||
|
"uuid": "d88d982e-4ed7-4f90-9566-2ac2fef4bcb3",
|
||||||
|
"dataAsSubAsset": null,
|
||||||
|
"subMetas": {}
|
||||||
|
}
|
18
assets/materials/sprite-round-corner-crop-v1.mtl
Normal file
18
assets/materials/sprite-round-corner-crop-v1.mtl
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"__type__": "cc.Material",
|
||||||
|
"_name": "sprite-round-corner-crop-v1",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"_native": "",
|
||||||
|
"_effectAsset": {
|
||||||
|
"__uuid__": "a4afedba-5234-44d7-9031-cba83051d521"
|
||||||
|
},
|
||||||
|
"_techniqueIndex": 0,
|
||||||
|
"_techniqueData": {
|
||||||
|
"0": {
|
||||||
|
"defines": {
|
||||||
|
"USE_TEXTURE": true,
|
||||||
|
"ENABLE_ROUNDCORNER": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
6
assets/materials/sprite-round-corner-crop-v1.mtl.meta
Normal file
6
assets/materials/sprite-round-corner-crop-v1.mtl.meta
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.0.3",
|
||||||
|
"uuid": "642c2d0e-7eb6-4d65-96f2-d6e0d0305310",
|
||||||
|
"dataAsSubAsset": null,
|
||||||
|
"subMetas": {}
|
||||||
|
}
|
18
assets/materials/sprite-round-corner-crop-v2.mtl
Normal file
18
assets/materials/sprite-round-corner-crop-v2.mtl
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"__type__": "cc.Material",
|
||||||
|
"_name": "sprite-round-corner-crop-v2",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"_native": "",
|
||||||
|
"_effectAsset": {
|
||||||
|
"__uuid__": "7c24b57e-e819-4fc9-a8d2-b06cf61b782d"
|
||||||
|
},
|
||||||
|
"_techniqueIndex": 0,
|
||||||
|
"_techniqueData": {
|
||||||
|
"0": {
|
||||||
|
"defines": {
|
||||||
|
"USE_TEXTURE": true,
|
||||||
|
"ENABLE_ROUNDCORNER": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
6
assets/materials/sprite-round-corner-crop-v2.mtl.meta
Normal file
6
assets/materials/sprite-round-corner-crop-v2.mtl.meta
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.0.3",
|
||||||
|
"uuid": "a86e8864-5390-443f-b41b-b38e9d584c43",
|
||||||
|
"dataAsSubAsset": null,
|
||||||
|
"subMetas": {}
|
||||||
|
}
|
7669
assets/scenes/FlashLightEffectScene.fire
Executable file
7669
assets/scenes/FlashLightEffectScene.fire
Executable file
File diff suppressed because it is too large
Load Diff
7
assets/scenes/FlashLightEffectScene.fire.meta
Normal file
7
assets/scenes/FlashLightEffectScene.fire.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.2.6",
|
||||||
|
"uuid": "54bdad42-93aa-4869-a465-c0eac37bf0d2",
|
||||||
|
"asyncLoadAssets": false,
|
||||||
|
"autoReleaseAssets": false,
|
||||||
|
"subMetas": {}
|
||||||
|
}
|
2188
assets/scenes/GaussianBlurV1EffectScene.fire
Executable file
2188
assets/scenes/GaussianBlurV1EffectScene.fire
Executable file
File diff suppressed because it is too large
Load Diff
7
assets/scenes/GaussianBlurV1EffectScene.fire.meta
Normal file
7
assets/scenes/GaussianBlurV1EffectScene.fire.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.2.6",
|
||||||
|
"uuid": "147d5b9f-b769-4112-9daf-2e28236161fa",
|
||||||
|
"asyncLoadAssets": false,
|
||||||
|
"autoReleaseAssets": false,
|
||||||
|
"subMetas": {}
|
||||||
|
}
|
@@ -78,10 +78,13 @@
|
|||||||
"_active": true,
|
"_active": true,
|
||||||
"_components": [
|
"_components": [
|
||||||
{
|
{
|
||||||
"__id__": 130
|
"__id__": 124
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__id__": 131
|
"__id__": 125
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__id__": 126
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_prefab": null,
|
"_prefab": null,
|
||||||
@@ -171,7 +174,7 @@
|
|||||||
"array": [
|
"array": [
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
492.17758360225525,
|
324.7595264191645,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
@@ -251,7 +254,7 @@
|
|||||||
"_active": true,
|
"_active": true,
|
||||||
"_components": [
|
"_components": [
|
||||||
{
|
{
|
||||||
"__id__": 129
|
"__id__": 123
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_prefab": null,
|
"_prefab": null,
|
||||||
@@ -670,6 +673,8 @@
|
|||||||
"_isSystemFontUsed": true,
|
"_isSystemFontUsed": true,
|
||||||
"_spacingX": 0,
|
"_spacingX": 0,
|
||||||
"_batchAsBitmap": false,
|
"_batchAsBitmap": false,
|
||||||
|
"_styleFlags": 0,
|
||||||
|
"_underlineHeight": 0,
|
||||||
"_N$horizontalAlign": 2,
|
"_N$horizontalAlign": 2,
|
||||||
"_N$verticalAlign": 1,
|
"_N$verticalAlign": 1,
|
||||||
"_N$fontFamily": "Arial",
|
"_N$fontFamily": "Arial",
|
||||||
@@ -1237,6 +1242,8 @@
|
|||||||
"_isSystemFontUsed": true,
|
"_isSystemFontUsed": true,
|
||||||
"_spacingX": 0,
|
"_spacingX": 0,
|
||||||
"_batchAsBitmap": false,
|
"_batchAsBitmap": false,
|
||||||
|
"_styleFlags": 0,
|
||||||
|
"_underlineHeight": 0,
|
||||||
"_N$horizontalAlign": 0,
|
"_N$horizontalAlign": 0,
|
||||||
"_N$verticalAlign": 1,
|
"_N$verticalAlign": 1,
|
||||||
"_N$fontFamily": "Arial",
|
"_N$fontFamily": "Arial",
|
||||||
@@ -1431,6 +1438,8 @@
|
|||||||
"_isSystemFontUsed": true,
|
"_isSystemFontUsed": true,
|
||||||
"_spacingX": 0,
|
"_spacingX": 0,
|
||||||
"_batchAsBitmap": false,
|
"_batchAsBitmap": false,
|
||||||
|
"_styleFlags": 0,
|
||||||
|
"_underlineHeight": 0,
|
||||||
"_N$horizontalAlign": 2,
|
"_N$horizontalAlign": 2,
|
||||||
"_N$verticalAlign": 1,
|
"_N$verticalAlign": 1,
|
||||||
"_N$fontFamily": "Arial",
|
"_N$fontFamily": "Arial",
|
||||||
@@ -1998,6 +2007,8 @@
|
|||||||
"_isSystemFontUsed": true,
|
"_isSystemFontUsed": true,
|
||||||
"_spacingX": 0,
|
"_spacingX": 0,
|
||||||
"_batchAsBitmap": false,
|
"_batchAsBitmap": false,
|
||||||
|
"_styleFlags": 0,
|
||||||
|
"_underlineHeight": 0,
|
||||||
"_N$horizontalAlign": 0,
|
"_N$horizontalAlign": 0,
|
||||||
"_N$verticalAlign": 1,
|
"_N$verticalAlign": 1,
|
||||||
"_N$fontFamily": "Arial",
|
"_N$fontFamily": "Arial",
|
||||||
@@ -2192,6 +2203,8 @@
|
|||||||
"_isSystemFontUsed": true,
|
"_isSystemFontUsed": true,
|
||||||
"_spacingX": 0,
|
"_spacingX": 0,
|
||||||
"_batchAsBitmap": false,
|
"_batchAsBitmap": false,
|
||||||
|
"_styleFlags": 0,
|
||||||
|
"_underlineHeight": 0,
|
||||||
"_N$horizontalAlign": 2,
|
"_N$horizontalAlign": 2,
|
||||||
"_N$verticalAlign": 1,
|
"_N$verticalAlign": 1,
|
||||||
"_N$fontFamily": "Arial",
|
"_N$fontFamily": "Arial",
|
||||||
@@ -2759,6 +2772,8 @@
|
|||||||
"_isSystemFontUsed": true,
|
"_isSystemFontUsed": true,
|
||||||
"_spacingX": 0,
|
"_spacingX": 0,
|
||||||
"_batchAsBitmap": false,
|
"_batchAsBitmap": false,
|
||||||
|
"_styleFlags": 0,
|
||||||
|
"_underlineHeight": 0,
|
||||||
"_N$horizontalAlign": 0,
|
"_N$horizontalAlign": 0,
|
||||||
"_N$verticalAlign": 1,
|
"_N$verticalAlign": 1,
|
||||||
"_N$fontFamily": "Arial",
|
"_N$fontFamily": "Arial",
|
||||||
@@ -2953,6 +2968,8 @@
|
|||||||
"_isSystemFontUsed": true,
|
"_isSystemFontUsed": true,
|
||||||
"_spacingX": 0,
|
"_spacingX": 0,
|
||||||
"_batchAsBitmap": false,
|
"_batchAsBitmap": false,
|
||||||
|
"_styleFlags": 0,
|
||||||
|
"_underlineHeight": 0,
|
||||||
"_N$horizontalAlign": 2,
|
"_N$horizontalAlign": 2,
|
||||||
"_N$verticalAlign": 1,
|
"_N$verticalAlign": 1,
|
||||||
"_N$fontFamily": "Arial",
|
"_N$fontFamily": "Arial",
|
||||||
@@ -3520,6 +3537,8 @@
|
|||||||
"_isSystemFontUsed": true,
|
"_isSystemFontUsed": true,
|
||||||
"_spacingX": 0,
|
"_spacingX": 0,
|
||||||
"_batchAsBitmap": false,
|
"_batchAsBitmap": false,
|
||||||
|
"_styleFlags": 0,
|
||||||
|
"_underlineHeight": 0,
|
||||||
"_N$horizontalAlign": 0,
|
"_N$horizontalAlign": 0,
|
||||||
"_N$verticalAlign": 1,
|
"_N$verticalAlign": 1,
|
||||||
"_N$fontFamily": "Arial",
|
"_N$fontFamily": "Arial",
|
||||||
@@ -3714,6 +3733,8 @@
|
|||||||
"_isSystemFontUsed": true,
|
"_isSystemFontUsed": true,
|
||||||
"_spacingX": 0,
|
"_spacingX": 0,
|
||||||
"_batchAsBitmap": false,
|
"_batchAsBitmap": false,
|
||||||
|
"_styleFlags": 0,
|
||||||
|
"_underlineHeight": 0,
|
||||||
"_N$horizontalAlign": 2,
|
"_N$horizontalAlign": 2,
|
||||||
"_N$verticalAlign": 1,
|
"_N$verticalAlign": 1,
|
||||||
"_N$fontFamily": "Arial",
|
"_N$fontFamily": "Arial",
|
||||||
@@ -4281,6 +4302,8 @@
|
|||||||
"_isSystemFontUsed": true,
|
"_isSystemFontUsed": true,
|
||||||
"_spacingX": 0,
|
"_spacingX": 0,
|
||||||
"_batchAsBitmap": false,
|
"_batchAsBitmap": false,
|
||||||
|
"_styleFlags": 0,
|
||||||
|
"_underlineHeight": 0,
|
||||||
"_N$horizontalAlign": 0,
|
"_N$horizontalAlign": 0,
|
||||||
"_N$verticalAlign": 1,
|
"_N$verticalAlign": 1,
|
||||||
"_N$fontFamily": "Arial",
|
"_N$fontFamily": "Arial",
|
||||||
@@ -4475,6 +4498,8 @@
|
|||||||
"_isSystemFontUsed": true,
|
"_isSystemFontUsed": true,
|
||||||
"_spacingX": 0,
|
"_spacingX": 0,
|
||||||
"_batchAsBitmap": false,
|
"_batchAsBitmap": false,
|
||||||
|
"_styleFlags": 0,
|
||||||
|
"_underlineHeight": 0,
|
||||||
"_N$horizontalAlign": 2,
|
"_N$horizontalAlign": 2,
|
||||||
"_N$verticalAlign": 1,
|
"_N$verticalAlign": 1,
|
||||||
"_N$fontFamily": "Arial",
|
"_N$fontFamily": "Arial",
|
||||||
@@ -5042,6 +5067,8 @@
|
|||||||
"_isSystemFontUsed": true,
|
"_isSystemFontUsed": true,
|
||||||
"_spacingX": 0,
|
"_spacingX": 0,
|
||||||
"_batchAsBitmap": false,
|
"_batchAsBitmap": false,
|
||||||
|
"_styleFlags": 0,
|
||||||
|
"_underlineHeight": 0,
|
||||||
"_N$horizontalAlign": 0,
|
"_N$horizontalAlign": 0,
|
||||||
"_N$verticalAlign": 1,
|
"_N$verticalAlign": 1,
|
||||||
"_N$fontFamily": "Arial",
|
"_N$fontFamily": "Arial",
|
||||||
@@ -5152,24 +5179,15 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__id__": 119
|
"__id__": 119
|
||||||
},
|
|
||||||
{
|
|
||||||
"__id__": 121
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"__id__": 123
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"__id__": 125
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_active": true,
|
"_active": true,
|
||||||
"_components": [
|
"_components": [
|
||||||
{
|
{
|
||||||
"__id__": 127
|
"__id__": 121
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__id__": 128
|
"__id__": 122
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_prefab": null,
|
"_prefab": null,
|
||||||
@@ -5184,7 +5202,7 @@
|
|||||||
"_contentSize": {
|
"_contentSize": {
|
||||||
"__type__": "cc.Size",
|
"__type__": "cc.Size",
|
||||||
"width": 384,
|
"width": 384,
|
||||||
"height": 435.33
|
"height": 442
|
||||||
},
|
},
|
||||||
"_anchorPoint": {
|
"_anchorPoint": {
|
||||||
"__type__": "cc.Vec2",
|
"__type__": "cc.Vec2",
|
||||||
@@ -5220,100 +5238,6 @@
|
|||||||
"groupIndex": 0,
|
"groupIndex": 0,
|
||||||
"_id": "feymBChPxA1pr6+/rlPqey"
|
"_id": "feymBChPxA1pr6+/rlPqey"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"__type__": "cc.Node",
|
|
||||||
"_name": "ball_0",
|
|
||||||
"_objFlags": 0,
|
|
||||||
"_parent": {
|
|
||||||
"__id__": 114
|
|
||||||
},
|
|
||||||
"_children": [],
|
|
||||||
"_active": false,
|
|
||||||
"_components": [
|
|
||||||
{
|
|
||||||
"__id__": 116
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"_prefab": null,
|
|
||||||
"_opacity": 255,
|
|
||||||
"_color": {
|
|
||||||
"__type__": "cc.Color",
|
|
||||||
"r": 255,
|
|
||||||
"g": 255,
|
|
||||||
"b": 255,
|
|
||||||
"a": 255
|
|
||||||
},
|
|
||||||
"_contentSize": {
|
|
||||||
"__type__": "cc.Size",
|
|
||||||
"width": 60,
|
|
||||||
"height": 60
|
|
||||||
},
|
|
||||||
"_anchorPoint": {
|
|
||||||
"__type__": "cc.Vec2",
|
|
||||||
"x": 0.5,
|
|
||||||
"y": 0.5
|
|
||||||
},
|
|
||||||
"_trs": {
|
|
||||||
"__type__": "TypedArray",
|
|
||||||
"ctor": "Float64Array",
|
|
||||||
"array": [
|
|
||||||
0,
|
|
||||||
-30,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
2,
|
|
||||||
2,
|
|
||||||
1
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"_eulerAngles": {
|
|
||||||
"__type__": "cc.Vec3",
|
|
||||||
"x": 0,
|
|
||||||
"y": 0,
|
|
||||||
"z": 0
|
|
||||||
},
|
|
||||||
"_skewX": 0,
|
|
||||||
"_skewY": 0,
|
|
||||||
"_is3DNode": false,
|
|
||||||
"_groupIndex": 0,
|
|
||||||
"groupIndex": 0,
|
|
||||||
"_id": "49czqIEPBHr6kLJbb+kN8/"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"__type__": "cc.Sprite",
|
|
||||||
"_name": "",
|
|
||||||
"_objFlags": 0,
|
|
||||||
"node": {
|
|
||||||
"__id__": 115
|
|
||||||
},
|
|
||||||
"_enabled": true,
|
|
||||||
"_materials": [
|
|
||||||
{
|
|
||||||
"__uuid__": "2c760728-404d-4553-a1d0-7ab18263845c"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"_srcBlendFactor": 770,
|
|
||||||
"_dstBlendFactor": 771,
|
|
||||||
"_spriteFrame": {
|
|
||||||
"__uuid__": "d0b78623-4e79-4de1-b1d2-ea211bf4652c"
|
|
||||||
},
|
|
||||||
"_type": 0,
|
|
||||||
"_sizeMode": 1,
|
|
||||||
"_fillType": 0,
|
|
||||||
"_fillCenter": {
|
|
||||||
"__type__": "cc.Vec2",
|
|
||||||
"x": 0,
|
|
||||||
"y": 0
|
|
||||||
},
|
|
||||||
"_fillStart": 0,
|
|
||||||
"_fillRange": 0,
|
|
||||||
"_isTrimmedMode": true,
|
|
||||||
"_atlas": null,
|
|
||||||
"_id": "94vIBMHVlAN4EGbkr2wRvX"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"__type__": "cc.Node",
|
"__type__": "cc.Node",
|
||||||
"_name": "cocos_logo",
|
"_name": "cocos_logo",
|
||||||
@@ -5325,7 +5249,7 @@
|
|||||||
"_active": true,
|
"_active": true,
|
||||||
"_components": [
|
"_components": [
|
||||||
{
|
{
|
||||||
"__id__": 118
|
"__id__": 116
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_prefab": null,
|
"_prefab": null,
|
||||||
@@ -5381,12 +5305,12 @@
|
|||||||
"_name": "",
|
"_name": "",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"node": {
|
"node": {
|
||||||
"__id__": 117
|
"__id__": 115
|
||||||
},
|
},
|
||||||
"_enabled": true,
|
"_enabled": true,
|
||||||
"_materials": [
|
"_materials": [
|
||||||
{
|
{
|
||||||
"__uuid__": "2c760728-404d-4553-a1d0-7ab18263845c"
|
"__uuid__": "647e873f-e0ed-4ce7-84cb-9e4d4f8a211f"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_srcBlendFactor": 770,
|
"_srcBlendFactor": 770,
|
||||||
@@ -5419,7 +5343,7 @@
|
|||||||
"_active": true,
|
"_active": true,
|
||||||
"_components": [
|
"_components": [
|
||||||
{
|
{
|
||||||
"__id__": 120
|
"__id__": 118
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_prefab": null,
|
"_prefab": null,
|
||||||
@@ -5475,12 +5399,12 @@
|
|||||||
"_name": "",
|
"_name": "",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"node": {
|
"node": {
|
||||||
"__id__": 119
|
"__id__": 117
|
||||||
},
|
},
|
||||||
"_enabled": true,
|
"_enabled": true,
|
||||||
"_materials": [
|
"_materials": [
|
||||||
{
|
{
|
||||||
"__uuid__": "2c760728-404d-4553-a1d0-7ab18263845c"
|
"__uuid__": "647e873f-e0ed-4ce7-84cb-9e4d4f8a211f"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_srcBlendFactor": 770,
|
"_srcBlendFactor": 770,
|
||||||
@@ -5502,192 +5426,6 @@
|
|||||||
"_atlas": null,
|
"_atlas": null,
|
||||||
"_id": "4bH5hzKe9LsLQeXjLynIHQ"
|
"_id": "4bH5hzKe9LsLQeXjLynIHQ"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"__type__": "cc.Node",
|
|
||||||
"_name": "video_btn",
|
|
||||||
"_objFlags": 0,
|
|
||||||
"_parent": {
|
|
||||||
"__id__": 114
|
|
||||||
},
|
|
||||||
"_children": [],
|
|
||||||
"_active": false,
|
|
||||||
"_components": [
|
|
||||||
{
|
|
||||||
"__id__": 122
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"_prefab": null,
|
|
||||||
"_opacity": 255,
|
|
||||||
"_color": {
|
|
||||||
"__type__": "cc.Color",
|
|
||||||
"r": 255,
|
|
||||||
"g": 255,
|
|
||||||
"b": 255,
|
|
||||||
"a": 255
|
|
||||||
},
|
|
||||||
"_contentSize": {
|
|
||||||
"__type__": "cc.Size",
|
|
||||||
"width": 50,
|
|
||||||
"height": 50
|
|
||||||
},
|
|
||||||
"_anchorPoint": {
|
|
||||||
"__type__": "cc.Vec2",
|
|
||||||
"x": 0.5,
|
|
||||||
"y": 0.5
|
|
||||||
},
|
|
||||||
"_trs": {
|
|
||||||
"__type__": "TypedArray",
|
|
||||||
"ctor": "Float64Array",
|
|
||||||
"array": [
|
|
||||||
0,
|
|
||||||
-559,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"_eulerAngles": {
|
|
||||||
"__type__": "cc.Vec3",
|
|
||||||
"x": 0,
|
|
||||||
"y": 0,
|
|
||||||
"z": 0
|
|
||||||
},
|
|
||||||
"_skewX": 0,
|
|
||||||
"_skewY": 0,
|
|
||||||
"_is3DNode": false,
|
|
||||||
"_groupIndex": 0,
|
|
||||||
"groupIndex": 0,
|
|
||||||
"_id": "c73V7fMuVE0aD5fGtmyzmF"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"__type__": "cc.Sprite",
|
|
||||||
"_name": "",
|
|
||||||
"_objFlags": 0,
|
|
||||||
"node": {
|
|
||||||
"__id__": 121
|
|
||||||
},
|
|
||||||
"_enabled": true,
|
|
||||||
"_materials": [
|
|
||||||
{
|
|
||||||
"__uuid__": "2c760728-404d-4553-a1d0-7ab18263845c"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"_srcBlendFactor": 770,
|
|
||||||
"_dstBlendFactor": 771,
|
|
||||||
"_spriteFrame": {
|
|
||||||
"__uuid__": "54142b08-a163-426e-a75e-4c7b21046413"
|
|
||||||
},
|
|
||||||
"_type": 0,
|
|
||||||
"_sizeMode": 1,
|
|
||||||
"_fillType": 0,
|
|
||||||
"_fillCenter": {
|
|
||||||
"__type__": "cc.Vec2",
|
|
||||||
"x": 0,
|
|
||||||
"y": 0
|
|
||||||
},
|
|
||||||
"_fillStart": 0,
|
|
||||||
"_fillRange": 0,
|
|
||||||
"_isTrimmedMode": true,
|
|
||||||
"_atlas": null,
|
|
||||||
"_id": "f43fJCjNdOS5VHAEhp0yDU"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"__type__": "cc.Node",
|
|
||||||
"_name": "SystemFont",
|
|
||||||
"_objFlags": 0,
|
|
||||||
"_parent": {
|
|
||||||
"__id__": 114
|
|
||||||
},
|
|
||||||
"_children": [],
|
|
||||||
"_active": false,
|
|
||||||
"_components": [
|
|
||||||
{
|
|
||||||
"__id__": 124
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"_prefab": null,
|
|
||||||
"_opacity": 255,
|
|
||||||
"_color": {
|
|
||||||
"__type__": "cc.Color",
|
|
||||||
"r": 255,
|
|
||||||
"g": 255,
|
|
||||||
"b": 255,
|
|
||||||
"a": 255
|
|
||||||
},
|
|
||||||
"_contentSize": {
|
|
||||||
"__type__": "cc.Size",
|
|
||||||
"width": 97.87,
|
|
||||||
"height": 50.4
|
|
||||||
},
|
|
||||||
"_anchorPoint": {
|
|
||||||
"__type__": "cc.Vec2",
|
|
||||||
"x": 0.5,
|
|
||||||
"y": 0.5
|
|
||||||
},
|
|
||||||
"_trs": {
|
|
||||||
"__type__": "TypedArray",
|
|
||||||
"ctor": "Float64Array",
|
|
||||||
"array": [
|
|
||||||
0,
|
|
||||||
-657.2,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"_eulerAngles": {
|
|
||||||
"__type__": "cc.Vec3",
|
|
||||||
"x": 0,
|
|
||||||
"y": 0,
|
|
||||||
"z": 0
|
|
||||||
},
|
|
||||||
"_skewX": 0,
|
|
||||||
"_skewY": 0,
|
|
||||||
"_is3DNode": false,
|
|
||||||
"_groupIndex": 0,
|
|
||||||
"groupIndex": 0,
|
|
||||||
"_id": "5dfIaYLgJPQKk50HqrgyHI"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"__type__": "cc.Label",
|
|
||||||
"_name": "",
|
|
||||||
"_objFlags": 0,
|
|
||||||
"node": {
|
|
||||||
"__id__": 123
|
|
||||||
},
|
|
||||||
"_enabled": true,
|
|
||||||
"_materials": [
|
|
||||||
{
|
|
||||||
"__uuid__": "2c760728-404d-4553-a1d0-7ab18263845c"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"_useOriginalSize": false,
|
|
||||||
"_string": "System Font",
|
|
||||||
"_N$string": "System Font",
|
|
||||||
"_fontSize": 40,
|
|
||||||
"_lineHeight": 40,
|
|
||||||
"_enableWrapText": true,
|
|
||||||
"_N$file": null,
|
|
||||||
"_isSystemFontUsed": true,
|
|
||||||
"_spacingX": 0,
|
|
||||||
"_batchAsBitmap": false,
|
|
||||||
"_N$horizontalAlign": 1,
|
|
||||||
"_N$verticalAlign": 1,
|
|
||||||
"_N$fontFamily": "Arial",
|
|
||||||
"_N$overflow": 0,
|
|
||||||
"_N$cacheMode": 0,
|
|
||||||
"_id": "d1whc7H8RHdrROcYj+2Qh1"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"__type__": "cc.Node",
|
"__type__": "cc.Node",
|
||||||
"_name": "BmFont",
|
"_name": "BmFont",
|
||||||
@@ -5699,7 +5437,7 @@
|
|||||||
"_active": true,
|
"_active": true,
|
||||||
"_components": [
|
"_components": [
|
||||||
{
|
{
|
||||||
"__id__": 126
|
"__id__": 120
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_prefab": null,
|
"_prefab": null,
|
||||||
@@ -5714,7 +5452,7 @@
|
|||||||
"_contentSize": {
|
"_contentSize": {
|
||||||
"__type__": "cc.Size",
|
"__type__": "cc.Size",
|
||||||
"width": 167.5,
|
"width": 167.5,
|
||||||
"height": 33.33
|
"height": 40
|
||||||
},
|
},
|
||||||
"_anchorPoint": {
|
"_anchorPoint": {
|
||||||
"__type__": "cc.Vec2",
|
"__type__": "cc.Vec2",
|
||||||
@@ -5726,7 +5464,7 @@
|
|||||||
"ctor": "Float64Array",
|
"ctor": "Float64Array",
|
||||||
"array": [
|
"array": [
|
||||||
0,
|
0,
|
||||||
-418.665,
|
-422,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
@@ -5755,12 +5493,12 @@
|
|||||||
"_name": "",
|
"_name": "",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"node": {
|
"node": {
|
||||||
"__id__": 125
|
"__id__": 119
|
||||||
},
|
},
|
||||||
"_enabled": true,
|
"_enabled": true,
|
||||||
"_materials": [
|
"_materials": [
|
||||||
{
|
{
|
||||||
"__uuid__": "2c760728-404d-4553-a1d0-7ab18263845c"
|
"__uuid__": "647e873f-e0ed-4ce7-84cb-9e4d4f8a211f"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_useOriginalSize": false,
|
"_useOriginalSize": false,
|
||||||
@@ -5775,6 +5513,8 @@
|
|||||||
"_isSystemFontUsed": false,
|
"_isSystemFontUsed": false,
|
||||||
"_spacingX": 0,
|
"_spacingX": 0,
|
||||||
"_batchAsBitmap": false,
|
"_batchAsBitmap": false,
|
||||||
|
"_styleFlags": 0,
|
||||||
|
"_underlineHeight": 0,
|
||||||
"_N$horizontalAlign": 1,
|
"_N$horizontalAlign": 1,
|
||||||
"_N$verticalAlign": 1,
|
"_N$verticalAlign": 1,
|
||||||
"_N$fontFamily": "Arial",
|
"_N$fontFamily": "Arial",
|
||||||
@@ -5820,7 +5560,7 @@
|
|||||||
"_layoutSize": {
|
"_layoutSize": {
|
||||||
"__type__": "cc.Size",
|
"__type__": "cc.Size",
|
||||||
"width": 384,
|
"width": 384,
|
||||||
"height": 435.33
|
"height": 442
|
||||||
},
|
},
|
||||||
"_resize": 1,
|
"_resize": 1,
|
||||||
"_N$layoutType": 2,
|
"_N$layoutType": 2,
|
||||||
@@ -5878,5 +5618,32 @@
|
|||||||
},
|
},
|
||||||
"_enabled": true,
|
"_enabled": true,
|
||||||
"_id": "1a7ypfDW1DQqGMHUC5Sf0L"
|
"_id": "1a7ypfDW1DQqGMHUC5Sf0L"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.Widget",
|
||||||
|
"_name": "",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"node": {
|
||||||
|
"__id__": 2
|
||||||
|
},
|
||||||
|
"_enabled": true,
|
||||||
|
"alignMode": 1,
|
||||||
|
"_target": null,
|
||||||
|
"_alignFlags": 45,
|
||||||
|
"_left": 0,
|
||||||
|
"_right": 0,
|
||||||
|
"_top": 0,
|
||||||
|
"_bottom": 0,
|
||||||
|
"_verticalCenter": 0,
|
||||||
|
"_horizontalCenter": 0,
|
||||||
|
"_isAbsLeft": true,
|
||||||
|
"_isAbsRight": true,
|
||||||
|
"_isAbsTop": true,
|
||||||
|
"_isAbsBottom": true,
|
||||||
|
"_isAbsHorizontalCenter": true,
|
||||||
|
"_isAbsVerticalCenter": true,
|
||||||
|
"_originalWidth": 0,
|
||||||
|
"_originalHeight": 0,
|
||||||
|
"_id": "314F24pJRBBZaYka0OCTsh"
|
||||||
}
|
}
|
||||||
]
|
]
|
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ver": "1.2.5",
|
"ver": "1.2.6",
|
||||||
"uuid": "69a920f1-0509-4d54-b033-5fb5b1283b72",
|
"uuid": "69a920f1-0509-4d54-b033-5fb5b1283b72",
|
||||||
"asyncLoadAssets": false,
|
"asyncLoadAssets": false,
|
||||||
"autoReleaseAssets": false,
|
"autoReleaseAssets": false,
|
||||||
|
@@ -78,10 +78,13 @@
|
|||||||
"_active": true,
|
"_active": true,
|
||||||
"_components": [
|
"_components": [
|
||||||
{
|
{
|
||||||
"__id__": 130
|
"__id__": 126
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__id__": 131
|
"__id__": 127
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__id__": 128
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_prefab": null,
|
"_prefab": null,
|
||||||
@@ -171,7 +174,7 @@
|
|||||||
"array": [
|
"array": [
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
407.8979651824706,
|
324.7595264191645,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
@@ -251,7 +254,7 @@
|
|||||||
"_active": true,
|
"_active": true,
|
||||||
"_components": [
|
"_components": [
|
||||||
{
|
{
|
||||||
"__id__": 129
|
"__id__": 125
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_prefab": null,
|
"_prefab": null,
|
||||||
@@ -670,6 +673,8 @@
|
|||||||
"_isSystemFontUsed": true,
|
"_isSystemFontUsed": true,
|
||||||
"_spacingX": 0,
|
"_spacingX": 0,
|
||||||
"_batchAsBitmap": false,
|
"_batchAsBitmap": false,
|
||||||
|
"_styleFlags": 0,
|
||||||
|
"_underlineHeight": 0,
|
||||||
"_N$horizontalAlign": 2,
|
"_N$horizontalAlign": 2,
|
||||||
"_N$verticalAlign": 1,
|
"_N$verticalAlign": 1,
|
||||||
"_N$fontFamily": "Arial",
|
"_N$fontFamily": "Arial",
|
||||||
@@ -1237,6 +1242,8 @@
|
|||||||
"_isSystemFontUsed": true,
|
"_isSystemFontUsed": true,
|
||||||
"_spacingX": 0,
|
"_spacingX": 0,
|
||||||
"_batchAsBitmap": false,
|
"_batchAsBitmap": false,
|
||||||
|
"_styleFlags": 0,
|
||||||
|
"_underlineHeight": 0,
|
||||||
"_N$horizontalAlign": 0,
|
"_N$horizontalAlign": 0,
|
||||||
"_N$verticalAlign": 1,
|
"_N$verticalAlign": 1,
|
||||||
"_N$fontFamily": "Arial",
|
"_N$fontFamily": "Arial",
|
||||||
@@ -1431,6 +1438,8 @@
|
|||||||
"_isSystemFontUsed": true,
|
"_isSystemFontUsed": true,
|
||||||
"_spacingX": 0,
|
"_spacingX": 0,
|
||||||
"_batchAsBitmap": false,
|
"_batchAsBitmap": false,
|
||||||
|
"_styleFlags": 0,
|
||||||
|
"_underlineHeight": 0,
|
||||||
"_N$horizontalAlign": 2,
|
"_N$horizontalAlign": 2,
|
||||||
"_N$verticalAlign": 1,
|
"_N$verticalAlign": 1,
|
||||||
"_N$fontFamily": "Arial",
|
"_N$fontFamily": "Arial",
|
||||||
@@ -1998,6 +2007,8 @@
|
|||||||
"_isSystemFontUsed": true,
|
"_isSystemFontUsed": true,
|
||||||
"_spacingX": 0,
|
"_spacingX": 0,
|
||||||
"_batchAsBitmap": false,
|
"_batchAsBitmap": false,
|
||||||
|
"_styleFlags": 0,
|
||||||
|
"_underlineHeight": 0,
|
||||||
"_N$horizontalAlign": 0,
|
"_N$horizontalAlign": 0,
|
||||||
"_N$verticalAlign": 1,
|
"_N$verticalAlign": 1,
|
||||||
"_N$fontFamily": "Arial",
|
"_N$fontFamily": "Arial",
|
||||||
@@ -2192,6 +2203,8 @@
|
|||||||
"_isSystemFontUsed": true,
|
"_isSystemFontUsed": true,
|
||||||
"_spacingX": 0,
|
"_spacingX": 0,
|
||||||
"_batchAsBitmap": false,
|
"_batchAsBitmap": false,
|
||||||
|
"_styleFlags": 0,
|
||||||
|
"_underlineHeight": 0,
|
||||||
"_N$horizontalAlign": 2,
|
"_N$horizontalAlign": 2,
|
||||||
"_N$verticalAlign": 1,
|
"_N$verticalAlign": 1,
|
||||||
"_N$fontFamily": "Arial",
|
"_N$fontFamily": "Arial",
|
||||||
@@ -2759,6 +2772,8 @@
|
|||||||
"_isSystemFontUsed": true,
|
"_isSystemFontUsed": true,
|
||||||
"_spacingX": 0,
|
"_spacingX": 0,
|
||||||
"_batchAsBitmap": false,
|
"_batchAsBitmap": false,
|
||||||
|
"_styleFlags": 0,
|
||||||
|
"_underlineHeight": 0,
|
||||||
"_N$horizontalAlign": 0,
|
"_N$horizontalAlign": 0,
|
||||||
"_N$verticalAlign": 1,
|
"_N$verticalAlign": 1,
|
||||||
"_N$fontFamily": "Arial",
|
"_N$fontFamily": "Arial",
|
||||||
@@ -2953,6 +2968,8 @@
|
|||||||
"_isSystemFontUsed": true,
|
"_isSystemFontUsed": true,
|
||||||
"_spacingX": 0,
|
"_spacingX": 0,
|
||||||
"_batchAsBitmap": false,
|
"_batchAsBitmap": false,
|
||||||
|
"_styleFlags": 0,
|
||||||
|
"_underlineHeight": 0,
|
||||||
"_N$horizontalAlign": 2,
|
"_N$horizontalAlign": 2,
|
||||||
"_N$verticalAlign": 1,
|
"_N$verticalAlign": 1,
|
||||||
"_N$fontFamily": "Arial",
|
"_N$fontFamily": "Arial",
|
||||||
@@ -3520,6 +3537,8 @@
|
|||||||
"_isSystemFontUsed": true,
|
"_isSystemFontUsed": true,
|
||||||
"_spacingX": 0,
|
"_spacingX": 0,
|
||||||
"_batchAsBitmap": false,
|
"_batchAsBitmap": false,
|
||||||
|
"_styleFlags": 0,
|
||||||
|
"_underlineHeight": 0,
|
||||||
"_N$horizontalAlign": 0,
|
"_N$horizontalAlign": 0,
|
||||||
"_N$verticalAlign": 1,
|
"_N$verticalAlign": 1,
|
||||||
"_N$fontFamily": "Arial",
|
"_N$fontFamily": "Arial",
|
||||||
@@ -3714,6 +3733,8 @@
|
|||||||
"_isSystemFontUsed": true,
|
"_isSystemFontUsed": true,
|
||||||
"_spacingX": 0,
|
"_spacingX": 0,
|
||||||
"_batchAsBitmap": false,
|
"_batchAsBitmap": false,
|
||||||
|
"_styleFlags": 0,
|
||||||
|
"_underlineHeight": 0,
|
||||||
"_N$horizontalAlign": 2,
|
"_N$horizontalAlign": 2,
|
||||||
"_N$verticalAlign": 1,
|
"_N$verticalAlign": 1,
|
||||||
"_N$fontFamily": "Arial",
|
"_N$fontFamily": "Arial",
|
||||||
@@ -4281,6 +4302,8 @@
|
|||||||
"_isSystemFontUsed": true,
|
"_isSystemFontUsed": true,
|
||||||
"_spacingX": 0,
|
"_spacingX": 0,
|
||||||
"_batchAsBitmap": false,
|
"_batchAsBitmap": false,
|
||||||
|
"_styleFlags": 0,
|
||||||
|
"_underlineHeight": 0,
|
||||||
"_N$horizontalAlign": 0,
|
"_N$horizontalAlign": 0,
|
||||||
"_N$verticalAlign": 1,
|
"_N$verticalAlign": 1,
|
||||||
"_N$fontFamily": "Arial",
|
"_N$fontFamily": "Arial",
|
||||||
@@ -4475,6 +4498,8 @@
|
|||||||
"_isSystemFontUsed": true,
|
"_isSystemFontUsed": true,
|
||||||
"_spacingX": 0,
|
"_spacingX": 0,
|
||||||
"_batchAsBitmap": false,
|
"_batchAsBitmap": false,
|
||||||
|
"_styleFlags": 0,
|
||||||
|
"_underlineHeight": 0,
|
||||||
"_N$horizontalAlign": 2,
|
"_N$horizontalAlign": 2,
|
||||||
"_N$verticalAlign": 1,
|
"_N$verticalAlign": 1,
|
||||||
"_N$fontFamily": "Arial",
|
"_N$fontFamily": "Arial",
|
||||||
@@ -5042,6 +5067,8 @@
|
|||||||
"_isSystemFontUsed": true,
|
"_isSystemFontUsed": true,
|
||||||
"_spacingX": 0,
|
"_spacingX": 0,
|
||||||
"_batchAsBitmap": false,
|
"_batchAsBitmap": false,
|
||||||
|
"_styleFlags": 0,
|
||||||
|
"_underlineHeight": 0,
|
||||||
"_N$horizontalAlign": 0,
|
"_N$horizontalAlign": 0,
|
||||||
"_N$verticalAlign": 1,
|
"_N$verticalAlign": 1,
|
||||||
"_N$fontFamily": "Arial",
|
"_N$fontFamily": "Arial",
|
||||||
@@ -5155,21 +5182,15 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__id__": 121
|
"__id__": 121
|
||||||
},
|
|
||||||
{
|
|
||||||
"__id__": 123
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"__id__": 125
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_active": true,
|
"_active": true,
|
||||||
"_components": [
|
"_components": [
|
||||||
{
|
{
|
||||||
"__id__": 127
|
"__id__": 123
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__id__": 128
|
"__id__": 124
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_prefab": null,
|
"_prefab": null,
|
||||||
@@ -5292,7 +5313,7 @@
|
|||||||
"_enabled": true,
|
"_enabled": true,
|
||||||
"_materials": [
|
"_materials": [
|
||||||
{
|
{
|
||||||
"__uuid__": "16dd0f06-6280-4d74-8483-a50e23c00733"
|
"__uuid__": "b82b2ec7-1bf3-4840-b9af-66d2a0250c14"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_srcBlendFactor": 770,
|
"_srcBlendFactor": 770,
|
||||||
@@ -5386,7 +5407,7 @@
|
|||||||
"_enabled": true,
|
"_enabled": true,
|
||||||
"_materials": [
|
"_materials": [
|
||||||
{
|
{
|
||||||
"__uuid__": "16dd0f06-6280-4d74-8483-a50e23c00733"
|
"__uuid__": "b82b2ec7-1bf3-4840-b9af-66d2a0250c14"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_srcBlendFactor": 770,
|
"_srcBlendFactor": 770,
|
||||||
@@ -5408,100 +5429,6 @@
|
|||||||
"_atlas": null,
|
"_atlas": null,
|
||||||
"_id": "74+WCqN01NIbcSpr5gcxmE"
|
"_id": "74+WCqN01NIbcSpr5gcxmE"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"__type__": "cc.Node",
|
|
||||||
"_name": "ball_1",
|
|
||||||
"_objFlags": 0,
|
|
||||||
"_parent": {
|
|
||||||
"__id__": 114
|
|
||||||
},
|
|
||||||
"_children": [],
|
|
||||||
"_active": false,
|
|
||||||
"_components": [
|
|
||||||
{
|
|
||||||
"__id__": 120
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"_prefab": null,
|
|
||||||
"_opacity": 255,
|
|
||||||
"_color": {
|
|
||||||
"__type__": "cc.Color",
|
|
||||||
"r": 255,
|
|
||||||
"g": 255,
|
|
||||||
"b": 255,
|
|
||||||
"a": 255
|
|
||||||
},
|
|
||||||
"_contentSize": {
|
|
||||||
"__type__": "cc.Size",
|
|
||||||
"width": 60,
|
|
||||||
"height": 60
|
|
||||||
},
|
|
||||||
"_anchorPoint": {
|
|
||||||
"__type__": "cc.Vec2",
|
|
||||||
"x": 0.5,
|
|
||||||
"y": 0.5
|
|
||||||
},
|
|
||||||
"_trs": {
|
|
||||||
"__type__": "TypedArray",
|
|
||||||
"ctor": "Float64Array",
|
|
||||||
"array": [
|
|
||||||
0,
|
|
||||||
-360,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
2,
|
|
||||||
2,
|
|
||||||
1
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"_eulerAngles": {
|
|
||||||
"__type__": "cc.Vec3",
|
|
||||||
"x": 0,
|
|
||||||
"y": 0,
|
|
||||||
"z": 0
|
|
||||||
},
|
|
||||||
"_skewX": 0,
|
|
||||||
"_skewY": 0,
|
|
||||||
"_is3DNode": false,
|
|
||||||
"_groupIndex": 0,
|
|
||||||
"groupIndex": 0,
|
|
||||||
"_id": "08wsP0gQdCnrq+UzPWkn0+"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"__type__": "cc.Sprite",
|
|
||||||
"_name": "",
|
|
||||||
"_objFlags": 0,
|
|
||||||
"node": {
|
|
||||||
"__id__": 119
|
|
||||||
},
|
|
||||||
"_enabled": true,
|
|
||||||
"_materials": [
|
|
||||||
{
|
|
||||||
"__uuid__": "16dd0f06-6280-4d74-8483-a50e23c00733"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"_srcBlendFactor": 770,
|
|
||||||
"_dstBlendFactor": 771,
|
|
||||||
"_spriteFrame": {
|
|
||||||
"__uuid__": "969fa66a-ae10-4157-b16e-4c1a4665920c"
|
|
||||||
},
|
|
||||||
"_type": 0,
|
|
||||||
"_sizeMode": 1,
|
|
||||||
"_fillType": 0,
|
|
||||||
"_fillCenter": {
|
|
||||||
"__type__": "cc.Vec2",
|
|
||||||
"x": 0,
|
|
||||||
"y": 0
|
|
||||||
},
|
|
||||||
"_fillStart": 0,
|
|
||||||
"_fillRange": 0,
|
|
||||||
"_isTrimmedMode": true,
|
|
||||||
"_atlas": null,
|
|
||||||
"_id": "4bH5hzKe9LsLQeXjLynIHQ"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"__type__": "cc.Node",
|
"__type__": "cc.Node",
|
||||||
"_name": "video_btn",
|
"_name": "video_btn",
|
||||||
@@ -5513,7 +5440,7 @@
|
|||||||
"_active": true,
|
"_active": true,
|
||||||
"_components": [
|
"_components": [
|
||||||
{
|
{
|
||||||
"__id__": 122
|
"__id__": 120
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_prefab": null,
|
"_prefab": null,
|
||||||
@@ -5569,12 +5496,12 @@
|
|||||||
"_name": "",
|
"_name": "",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"node": {
|
"node": {
|
||||||
"__id__": 121
|
"__id__": 119
|
||||||
},
|
},
|
||||||
"_enabled": true,
|
"_enabled": true,
|
||||||
"_materials": [
|
"_materials": [
|
||||||
{
|
{
|
||||||
"__uuid__": "16dd0f06-6280-4d74-8483-a50e23c00733"
|
"__uuid__": "b82b2ec7-1bf3-4840-b9af-66d2a0250c14"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_srcBlendFactor": 770,
|
"_srcBlendFactor": 770,
|
||||||
@@ -5596,98 +5523,6 @@
|
|||||||
"_atlas": null,
|
"_atlas": null,
|
||||||
"_id": "f43fJCjNdOS5VHAEhp0yDU"
|
"_id": "f43fJCjNdOS5VHAEhp0yDU"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"__type__": "cc.Node",
|
|
||||||
"_name": "SystemFont",
|
|
||||||
"_objFlags": 0,
|
|
||||||
"_parent": {
|
|
||||||
"__id__": 114
|
|
||||||
},
|
|
||||||
"_children": [],
|
|
||||||
"_active": false,
|
|
||||||
"_components": [
|
|
||||||
{
|
|
||||||
"__id__": 124
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"_prefab": null,
|
|
||||||
"_opacity": 255,
|
|
||||||
"_color": {
|
|
||||||
"__type__": "cc.Color",
|
|
||||||
"r": 255,
|
|
||||||
"g": 255,
|
|
||||||
"b": 255,
|
|
||||||
"a": 255
|
|
||||||
},
|
|
||||||
"_contentSize": {
|
|
||||||
"__type__": "cc.Size",
|
|
||||||
"width": 97.87,
|
|
||||||
"height": 50.4
|
|
||||||
},
|
|
||||||
"_anchorPoint": {
|
|
||||||
"__type__": "cc.Vec2",
|
|
||||||
"x": 0.5,
|
|
||||||
"y": 0.5
|
|
||||||
},
|
|
||||||
"_trs": {
|
|
||||||
"__type__": "TypedArray",
|
|
||||||
"ctor": "Float64Array",
|
|
||||||
"array": [
|
|
||||||
0,
|
|
||||||
-657.2,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"_eulerAngles": {
|
|
||||||
"__type__": "cc.Vec3",
|
|
||||||
"x": 0,
|
|
||||||
"y": 0,
|
|
||||||
"z": 0
|
|
||||||
},
|
|
||||||
"_skewX": 0,
|
|
||||||
"_skewY": 0,
|
|
||||||
"_is3DNode": false,
|
|
||||||
"_groupIndex": 0,
|
|
||||||
"groupIndex": 0,
|
|
||||||
"_id": "5dfIaYLgJPQKk50HqrgyHI"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"__type__": "cc.Label",
|
|
||||||
"_name": "",
|
|
||||||
"_objFlags": 0,
|
|
||||||
"node": {
|
|
||||||
"__id__": 123
|
|
||||||
},
|
|
||||||
"_enabled": true,
|
|
||||||
"_materials": [
|
|
||||||
{
|
|
||||||
"__uuid__": "16dd0f06-6280-4d74-8483-a50e23c00733"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"_useOriginalSize": false,
|
|
||||||
"_string": "System Font",
|
|
||||||
"_N$string": "System Font",
|
|
||||||
"_fontSize": 40,
|
|
||||||
"_lineHeight": 40,
|
|
||||||
"_enableWrapText": true,
|
|
||||||
"_N$file": null,
|
|
||||||
"_isSystemFontUsed": true,
|
|
||||||
"_spacingX": 0,
|
|
||||||
"_batchAsBitmap": false,
|
|
||||||
"_N$horizontalAlign": 1,
|
|
||||||
"_N$verticalAlign": 1,
|
|
||||||
"_N$fontFamily": "Arial",
|
|
||||||
"_N$overflow": 0,
|
|
||||||
"_N$cacheMode": 0,
|
|
||||||
"_id": "d1whc7H8RHdrROcYj+2Qh1"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"__type__": "cc.Node",
|
"__type__": "cc.Node",
|
||||||
"_name": "BmFont",
|
"_name": "BmFont",
|
||||||
@@ -5699,7 +5534,7 @@
|
|||||||
"_active": true,
|
"_active": true,
|
||||||
"_components": [
|
"_components": [
|
||||||
{
|
{
|
||||||
"__id__": 126
|
"__id__": 122
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_prefab": null,
|
"_prefab": null,
|
||||||
@@ -5755,12 +5590,12 @@
|
|||||||
"_name": "",
|
"_name": "",
|
||||||
"_objFlags": 0,
|
"_objFlags": 0,
|
||||||
"node": {
|
"node": {
|
||||||
"__id__": 125
|
"__id__": 121
|
||||||
},
|
},
|
||||||
"_enabled": true,
|
"_enabled": true,
|
||||||
"_materials": [
|
"_materials": [
|
||||||
{
|
{
|
||||||
"__uuid__": "16dd0f06-6280-4d74-8483-a50e23c00733"
|
"__uuid__": "b82b2ec7-1bf3-4840-b9af-66d2a0250c14"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_useOriginalSize": false,
|
"_useOriginalSize": false,
|
||||||
@@ -5775,6 +5610,8 @@
|
|||||||
"_isSystemFontUsed": false,
|
"_isSystemFontUsed": false,
|
||||||
"_spacingX": 0,
|
"_spacingX": 0,
|
||||||
"_batchAsBitmap": false,
|
"_batchAsBitmap": false,
|
||||||
|
"_styleFlags": 0,
|
||||||
|
"_underlineHeight": 0,
|
||||||
"_N$horizontalAlign": 1,
|
"_N$horizontalAlign": 1,
|
||||||
"_N$verticalAlign": 1,
|
"_N$verticalAlign": 1,
|
||||||
"_N$fontFamily": "Arial",
|
"_N$fontFamily": "Arial",
|
||||||
@@ -5878,5 +5715,32 @@
|
|||||||
},
|
},
|
||||||
"_enabled": true,
|
"_enabled": true,
|
||||||
"_id": "86FdoQVK1Lo6LFPRQ25Wpn"
|
"_id": "86FdoQVK1Lo6LFPRQ25Wpn"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.Widget",
|
||||||
|
"_name": "",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"node": {
|
||||||
|
"__id__": 2
|
||||||
|
},
|
||||||
|
"_enabled": true,
|
||||||
|
"alignMode": 1,
|
||||||
|
"_target": null,
|
||||||
|
"_alignFlags": 45,
|
||||||
|
"_left": 0,
|
||||||
|
"_right": 0,
|
||||||
|
"_top": 0,
|
||||||
|
"_bottom": 0,
|
||||||
|
"_verticalCenter": 0,
|
||||||
|
"_horizontalCenter": 0,
|
||||||
|
"_isAbsLeft": true,
|
||||||
|
"_isAbsRight": true,
|
||||||
|
"_isAbsTop": true,
|
||||||
|
"_isAbsBottom": true,
|
||||||
|
"_isAbsHorizontalCenter": true,
|
||||||
|
"_isAbsVerticalCenter": true,
|
||||||
|
"_originalWidth": 0,
|
||||||
|
"_originalHeight": 0,
|
||||||
|
"_id": "5f1iMtZkxEdIa7zsEtvN72"
|
||||||
}
|
}
|
||||||
]
|
]
|
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ver": "1.2.5",
|
"ver": "1.2.6",
|
||||||
"uuid": "6c0134dc-238e-4bed-b9a3-3f09c1e320a3",
|
"uuid": "6c0134dc-238e-4bed-b9a3-3f09c1e320a3",
|
||||||
"asyncLoadAssets": false,
|
"asyncLoadAssets": false,
|
||||||
"autoReleaseAssets": false,
|
"autoReleaseAssets": false,
|
||||||
|
@@ -82,6 +82,9 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__id__": 46
|
"__id__": 46
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__id__": 47
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_prefab": null,
|
"_prefab": null,
|
||||||
@@ -2058,5 +2061,31 @@
|
|||||||
},
|
},
|
||||||
"_enabled": true,
|
"_enabled": true,
|
||||||
"_id": "15Zc5pRfhPD5BBaIqSPNrC"
|
"_id": "15Zc5pRfhPD5BBaIqSPNrC"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.Widget",
|
||||||
|
"_name": "",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"node": {
|
||||||
|
"__id__": 2
|
||||||
|
},
|
||||||
|
"_enabled": true,
|
||||||
|
"alignMode": 1,
|
||||||
|
"_target": null,
|
||||||
|
"_alignFlags": 45,
|
||||||
|
"_left": 0,
|
||||||
|
"_right": 0,
|
||||||
|
"_top": 0,
|
||||||
|
"_bottom": 0,
|
||||||
|
"_verticalCenter": 0,
|
||||||
|
"_horizontalCenter": 0,
|
||||||
|
"_isAbsLeft": true,
|
||||||
|
"_isAbsRight": true,
|
||||||
|
"_isAbsTop": true,
|
||||||
|
"_isAbsBottom": true,
|
||||||
|
"_isAbsHorizontalCenter": true,
|
||||||
|
"_isAbsVerticalCenter": true,
|
||||||
|
"_originalWidth": 0,
|
||||||
|
"_originalHeight": 0
|
||||||
}
|
}
|
||||||
]
|
]
|
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ver": "1.2.5",
|
"ver": "1.2.6",
|
||||||
"uuid": "46f3cebd-8cc8-462a-885d-9a2984712368",
|
"uuid": "46f3cebd-8cc8-462a-885d-9a2984712368",
|
||||||
"asyncLoadAssets": false,
|
"asyncLoadAssets": false,
|
||||||
"autoReleaseAssets": false,
|
"autoReleaseAssets": false,
|
||||||
|
@@ -82,6 +82,9 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__id__": 80
|
"__id__": 80
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__id__": 81
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_prefab": null,
|
"_prefab": null,
|
||||||
@@ -3586,5 +3589,31 @@
|
|||||||
},
|
},
|
||||||
"_enabled": true,
|
"_enabled": true,
|
||||||
"_id": "67qshjCz5HzY6Lsg7VINZL"
|
"_id": "67qshjCz5HzY6Lsg7VINZL"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.Widget",
|
||||||
|
"_name": "",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"node": {
|
||||||
|
"__id__": 2
|
||||||
|
},
|
||||||
|
"_enabled": true,
|
||||||
|
"alignMode": 1,
|
||||||
|
"_target": null,
|
||||||
|
"_alignFlags": 45,
|
||||||
|
"_left": 0,
|
||||||
|
"_right": 0,
|
||||||
|
"_top": 0,
|
||||||
|
"_bottom": 0,
|
||||||
|
"_verticalCenter": 0,
|
||||||
|
"_horizontalCenter": 0,
|
||||||
|
"_isAbsLeft": true,
|
||||||
|
"_isAbsRight": true,
|
||||||
|
"_isAbsTop": true,
|
||||||
|
"_isAbsBottom": true,
|
||||||
|
"_isAbsHorizontalCenter": true,
|
||||||
|
"_isAbsVerticalCenter": true,
|
||||||
|
"_originalWidth": 0,
|
||||||
|
"_originalHeight": 0
|
||||||
}
|
}
|
||||||
]
|
]
|
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ver": "1.2.5",
|
"ver": "1.2.6",
|
||||||
"uuid": "4dcbd4ff-0bf9-4429-8c1f-44ad1b7a2192",
|
"uuid": "4dcbd4ff-0bf9-4429-8c1f-44ad1b7a2192",
|
||||||
"asyncLoadAssets": false,
|
"asyncLoadAssets": false,
|
||||||
"autoReleaseAssets": false,
|
"autoReleaseAssets": false,
|
||||||
|
@@ -82,6 +82,9 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__id__": 46
|
"__id__": 46
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__id__": 47
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_prefab": null,
|
"_prefab": null,
|
||||||
@@ -2058,5 +2061,31 @@
|
|||||||
},
|
},
|
||||||
"_enabled": true,
|
"_enabled": true,
|
||||||
"_id": "3aYHIG9t9FUI79rHpB2dpu"
|
"_id": "3aYHIG9t9FUI79rHpB2dpu"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.Widget",
|
||||||
|
"_name": "",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"node": {
|
||||||
|
"__id__": 2
|
||||||
|
},
|
||||||
|
"_enabled": true,
|
||||||
|
"alignMode": 1,
|
||||||
|
"_target": null,
|
||||||
|
"_alignFlags": 45,
|
||||||
|
"_left": 0,
|
||||||
|
"_right": 0,
|
||||||
|
"_top": 0,
|
||||||
|
"_bottom": 0,
|
||||||
|
"_verticalCenter": 0,
|
||||||
|
"_horizontalCenter": 0,
|
||||||
|
"_isAbsLeft": true,
|
||||||
|
"_isAbsRight": true,
|
||||||
|
"_isAbsTop": true,
|
||||||
|
"_isAbsBottom": true,
|
||||||
|
"_isAbsHorizontalCenter": true,
|
||||||
|
"_isAbsVerticalCenter": true,
|
||||||
|
"_originalWidth": 0,
|
||||||
|
"_originalHeight": 0
|
||||||
}
|
}
|
||||||
]
|
]
|
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ver": "1.2.5",
|
"ver": "1.2.6",
|
||||||
"uuid": "7f52e736-cdaf-44df-bd73-e2120e59267b",
|
"uuid": "7f52e736-cdaf-44df-bd73-e2120e59267b",
|
||||||
"asyncLoadAssets": false,
|
"asyncLoadAssets": false,
|
||||||
"autoReleaseAssets": false,
|
"autoReleaseAssets": false,
|
||||||
|
@@ -82,6 +82,9 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"__id__": 46
|
"__id__": 46
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__id__": 47
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_prefab": null,
|
"_prefab": null,
|
||||||
@@ -171,7 +174,7 @@
|
|||||||
"array": [
|
"array": [
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
492.17758360225525,
|
324.7595264191645,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
@@ -655,6 +658,8 @@
|
|||||||
"_isSystemFontUsed": true,
|
"_isSystemFontUsed": true,
|
||||||
"_spacingX": 0,
|
"_spacingX": 0,
|
||||||
"_batchAsBitmap": false,
|
"_batchAsBitmap": false,
|
||||||
|
"_styleFlags": 0,
|
||||||
|
"_underlineHeight": 0,
|
||||||
"_N$horizontalAlign": 2,
|
"_N$horizontalAlign": 2,
|
||||||
"_N$verticalAlign": 1,
|
"_N$verticalAlign": 1,
|
||||||
"_N$fontFamily": "Arial",
|
"_N$fontFamily": "Arial",
|
||||||
@@ -1222,6 +1227,8 @@
|
|||||||
"_isSystemFontUsed": true,
|
"_isSystemFontUsed": true,
|
||||||
"_spacingX": 0,
|
"_spacingX": 0,
|
||||||
"_batchAsBitmap": false,
|
"_batchAsBitmap": false,
|
||||||
|
"_styleFlags": 0,
|
||||||
|
"_underlineHeight": 0,
|
||||||
"_N$horizontalAlign": 0,
|
"_N$horizontalAlign": 0,
|
||||||
"_N$verticalAlign": 1,
|
"_N$verticalAlign": 1,
|
||||||
"_N$fontFamily": "Arial",
|
"_N$fontFamily": "Arial",
|
||||||
@@ -1364,7 +1371,7 @@
|
|||||||
"_contentSize": {
|
"_contentSize": {
|
||||||
"__type__": "cc.Size",
|
"__type__": "cc.Size",
|
||||||
"width": 384,
|
"width": 384,
|
||||||
"height": 583.73
|
"height": 590.4
|
||||||
},
|
},
|
||||||
"_anchorPoint": {
|
"_anchorPoint": {
|
||||||
"__type__": "cc.Vec2",
|
"__type__": "cc.Vec2",
|
||||||
@@ -1472,7 +1479,7 @@
|
|||||||
"_enabled": true,
|
"_enabled": true,
|
||||||
"_materials": [
|
"_materials": [
|
||||||
{
|
{
|
||||||
"__uuid__": "daf44951-2c80-4778-b99f-52cfc78ab053"
|
"__uuid__": "df1eb418-ec89-4e04-a579-03fcfbc315fc"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_srcBlendFactor": 770,
|
"_srcBlendFactor": 770,
|
||||||
@@ -1566,7 +1573,7 @@
|
|||||||
"_enabled": true,
|
"_enabled": true,
|
||||||
"_materials": [
|
"_materials": [
|
||||||
{
|
{
|
||||||
"__uuid__": "daf44951-2c80-4778-b99f-52cfc78ab053"
|
"__uuid__": "df1eb418-ec89-4e04-a579-03fcfbc315fc"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_srcBlendFactor": 770,
|
"_srcBlendFactor": 770,
|
||||||
@@ -1660,7 +1667,7 @@
|
|||||||
"_enabled": true,
|
"_enabled": true,
|
||||||
"_materials": [
|
"_materials": [
|
||||||
{
|
{
|
||||||
"__uuid__": "daf44951-2c80-4778-b99f-52cfc78ab053"
|
"__uuid__": "df1eb418-ec89-4e04-a579-03fcfbc315fc"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_srcBlendFactor": 770,
|
"_srcBlendFactor": 770,
|
||||||
@@ -1754,7 +1761,7 @@
|
|||||||
"_enabled": true,
|
"_enabled": true,
|
||||||
"_materials": [
|
"_materials": [
|
||||||
{
|
{
|
||||||
"__uuid__": "daf44951-2c80-4778-b99f-52cfc78ab053"
|
"__uuid__": "df1eb418-ec89-4e04-a579-03fcfbc315fc"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_srcBlendFactor": 770,
|
"_srcBlendFactor": 770,
|
||||||
@@ -1848,7 +1855,7 @@
|
|||||||
"_enabled": true,
|
"_enabled": true,
|
||||||
"_materials": [
|
"_materials": [
|
||||||
{
|
{
|
||||||
"__uuid__": "daf44951-2c80-4778-b99f-52cfc78ab053"
|
"__uuid__": "df1eb418-ec89-4e04-a579-03fcfbc315fc"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_useOriginalSize": false,
|
"_useOriginalSize": false,
|
||||||
@@ -1861,6 +1868,8 @@
|
|||||||
"_isSystemFontUsed": true,
|
"_isSystemFontUsed": true,
|
||||||
"_spacingX": 0,
|
"_spacingX": 0,
|
||||||
"_batchAsBitmap": false,
|
"_batchAsBitmap": false,
|
||||||
|
"_styleFlags": 0,
|
||||||
|
"_underlineHeight": 0,
|
||||||
"_N$horizontalAlign": 1,
|
"_N$horizontalAlign": 1,
|
||||||
"_N$verticalAlign": 1,
|
"_N$verticalAlign": 1,
|
||||||
"_N$fontFamily": "Arial",
|
"_N$fontFamily": "Arial",
|
||||||
@@ -1894,7 +1903,7 @@
|
|||||||
"_contentSize": {
|
"_contentSize": {
|
||||||
"__type__": "cc.Size",
|
"__type__": "cc.Size",
|
||||||
"width": 167.5,
|
"width": 167.5,
|
||||||
"height": 33.33
|
"height": 40
|
||||||
},
|
},
|
||||||
"_anchorPoint": {
|
"_anchorPoint": {
|
||||||
"__type__": "cc.Vec2",
|
"__type__": "cc.Vec2",
|
||||||
@@ -1906,7 +1915,7 @@
|
|||||||
"ctor": "Float64Array",
|
"ctor": "Float64Array",
|
||||||
"array": [
|
"array": [
|
||||||
0,
|
0,
|
||||||
-567.065,
|
-570.4000000000001,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
@@ -1940,7 +1949,7 @@
|
|||||||
"_enabled": true,
|
"_enabled": true,
|
||||||
"_materials": [
|
"_materials": [
|
||||||
{
|
{
|
||||||
"__uuid__": "daf44951-2c80-4778-b99f-52cfc78ab053"
|
"__uuid__": "df1eb418-ec89-4e04-a579-03fcfbc315fc"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_useOriginalSize": false,
|
"_useOriginalSize": false,
|
||||||
@@ -1955,6 +1964,8 @@
|
|||||||
"_isSystemFontUsed": false,
|
"_isSystemFontUsed": false,
|
||||||
"_spacingX": 0,
|
"_spacingX": 0,
|
||||||
"_batchAsBitmap": false,
|
"_batchAsBitmap": false,
|
||||||
|
"_styleFlags": 0,
|
||||||
|
"_underlineHeight": 0,
|
||||||
"_N$horizontalAlign": 1,
|
"_N$horizontalAlign": 1,
|
||||||
"_N$verticalAlign": 1,
|
"_N$verticalAlign": 1,
|
||||||
"_N$fontFamily": "Arial",
|
"_N$fontFamily": "Arial",
|
||||||
@@ -2000,7 +2011,7 @@
|
|||||||
"_layoutSize": {
|
"_layoutSize": {
|
||||||
"__type__": "cc.Size",
|
"__type__": "cc.Size",
|
||||||
"width": 384,
|
"width": 384,
|
||||||
"height": 583.73
|
"height": 590.4
|
||||||
},
|
},
|
||||||
"_resize": 1,
|
"_resize": 1,
|
||||||
"_N$layoutType": 2,
|
"_N$layoutType": 2,
|
||||||
@@ -2058,5 +2069,32 @@
|
|||||||
},
|
},
|
||||||
"_enabled": true,
|
"_enabled": true,
|
||||||
"_id": "580AzT6xFJvb7ohciGgehV"
|
"_id": "580AzT6xFJvb7ohciGgehV"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.Widget",
|
||||||
|
"_name": "",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"node": {
|
||||||
|
"__id__": 2
|
||||||
|
},
|
||||||
|
"_enabled": true,
|
||||||
|
"alignMode": 1,
|
||||||
|
"_target": null,
|
||||||
|
"_alignFlags": 45,
|
||||||
|
"_left": 0,
|
||||||
|
"_right": 0,
|
||||||
|
"_top": 0,
|
||||||
|
"_bottom": 0,
|
||||||
|
"_verticalCenter": 0,
|
||||||
|
"_horizontalCenter": 0,
|
||||||
|
"_isAbsLeft": true,
|
||||||
|
"_isAbsRight": true,
|
||||||
|
"_isAbsTop": true,
|
||||||
|
"_isAbsBottom": true,
|
||||||
|
"_isAbsHorizontalCenter": true,
|
||||||
|
"_isAbsVerticalCenter": true,
|
||||||
|
"_originalWidth": 0,
|
||||||
|
"_originalHeight": 0,
|
||||||
|
"_id": "f7GTkBg4hJMpPgwjS3Vbiz"
|
||||||
}
|
}
|
||||||
]
|
]
|
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ver": "1.2.5",
|
"ver": "1.2.6",
|
||||||
"uuid": "dbecc9f5-b74f-4e1d-a024-bf3d5eac0847",
|
"uuid": "dbecc9f5-b74f-4e1d-a024-bf3d5eac0847",
|
||||||
"asyncLoadAssets": false,
|
"asyncLoadAssets": false,
|
||||||
"autoReleaseAssets": false,
|
"autoReleaseAssets": false,
|
||||||
|
6319
assets/scenes/PointLightEffectScene.fire
Executable file
6319
assets/scenes/PointLightEffectScene.fire
Executable file
File diff suppressed because it is too large
Load Diff
7
assets/scenes/PointLightEffectScene.fire.meta
Normal file
7
assets/scenes/PointLightEffectScene.fire.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.2.6",
|
||||||
|
"uuid": "7d64bd80-8e2c-4c7c-8d65-ea69b0c4b3d3",
|
||||||
|
"asyncLoadAssets": false,
|
||||||
|
"autoReleaseAssets": false,
|
||||||
|
"subMetas": {}
|
||||||
|
}
|
3703
assets/scenes/PreviewEffectScene.fire
Executable file
3703
assets/scenes/PreviewEffectScene.fire
Executable file
File diff suppressed because it is too large
Load Diff
7
assets/scenes/PreviewEffectScene.fire.meta
Normal file
7
assets/scenes/PreviewEffectScene.fire.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.2.6",
|
||||||
|
"uuid": "3bf0537b-ca38-4d1d-9c51-4e6c8a6369b0",
|
||||||
|
"asyncLoadAssets": false,
|
||||||
|
"autoReleaseAssets": false,
|
||||||
|
"subMetas": {}
|
||||||
|
}
|
1802
assets/scenes/RoundCornerCropV1EffectScene.fire
Executable file
1802
assets/scenes/RoundCornerCropV1EffectScene.fire
Executable file
File diff suppressed because it is too large
Load Diff
7
assets/scenes/RoundCornerCropV1EffectScene.fire.meta
Normal file
7
assets/scenes/RoundCornerCropV1EffectScene.fire.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.2.6",
|
||||||
|
"uuid": "6c351889-b6c8-409f-b36c-4263b06d0b23",
|
||||||
|
"asyncLoadAssets": false,
|
||||||
|
"autoReleaseAssets": false,
|
||||||
|
"subMetas": {}
|
||||||
|
}
|
1802
assets/scenes/RoundCornerCropV2EffectScene.fire
Executable file
1802
assets/scenes/RoundCornerCropV2EffectScene.fire
Executable file
File diff suppressed because it is too large
Load Diff
7
assets/scenes/RoundCornerCropV2EffectScene.fire.meta
Normal file
7
assets/scenes/RoundCornerCropV2EffectScene.fire.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.2.6",
|
||||||
|
"uuid": "c2dec4ed-8129-40a2-9a1e-2440da772015",
|
||||||
|
"asyncLoadAssets": false,
|
||||||
|
"autoReleaseAssets": false,
|
||||||
|
"subMetas": {}
|
||||||
|
}
|
97
assets/scripts/FlashLightCtrlComponent.ts
Normal file
97
assets/scripts/FlashLightCtrlComponent.ts
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
const { ccclass, property } = cc._decorator;
|
||||||
|
|
||||||
|
@ccclass
|
||||||
|
export default class FlashLightCtrlComponent extends cc.Component {
|
||||||
|
private _flashLightUBO: FlashLightUBO = new FlashLightUBO();
|
||||||
|
|
||||||
|
onEnable() {
|
||||||
|
this.node.on(cc.Node.EventType.TOUCH_START, this._onTouchStart, this);
|
||||||
|
this.node.on(cc.Node.EventType.TOUCH_MOVE, this._onTouchMove, this);
|
||||||
|
this.node.on("on_property_change", this._onPropertyChange, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
onDisable() {
|
||||||
|
this.node.off(cc.Node.EventType.TOUCH_START, this._onTouchStart, this);
|
||||||
|
this.node.off(cc.Node.EventType.TOUCH_MOVE, this._onTouchMove, this);
|
||||||
|
this.node.off("on_property_change", this._onPropertyChange, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
private _onTouchStart(event: cc.Event.EventTouch) {
|
||||||
|
this._onTouchMove(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
private _onTouchMove(event: cc.Event.EventTouch) {
|
||||||
|
let touchPointInWorldSpace = event.getLocation();
|
||||||
|
let touchPointInNodeSpace = this.node.convertToNodeSpaceAR(touchPointInWorldSpace);
|
||||||
|
|
||||||
|
// 将触摸点转换为OPENGL坐标系并归一化
|
||||||
|
// OpenGl 坐标系原点在左上角
|
||||||
|
this._flashLightUBO.lightCenterPoint = cc.v2(
|
||||||
|
this.node.anchorX + touchPointInNodeSpace.x / this.node.width,
|
||||||
|
1 - (this.node.anchorY + touchPointInNodeSpace.y / this.node.height)
|
||||||
|
);
|
||||||
|
|
||||||
|
this._updateMaterial();
|
||||||
|
}
|
||||||
|
|
||||||
|
private _onPropertyChange(localDiffusionUniform: FlashLightUBO) {
|
||||||
|
this._flashLightUBO.lightColor = localDiffusionUniform.lightColor;
|
||||||
|
this._flashLightUBO.lightAngle = localDiffusionUniform.lightAngle;
|
||||||
|
this._flashLightUBO.lightWidth = localDiffusionUniform.lightWidth;
|
||||||
|
this._flashLightUBO.enableGradient = localDiffusionUniform.enableGradient;
|
||||||
|
this._flashLightUBO.cropAlpha = localDiffusionUniform.cropAlpha;
|
||||||
|
this._flashLightUBO.enableFog = localDiffusionUniform.enableFog;
|
||||||
|
this._updateMaterial();
|
||||||
|
}
|
||||||
|
|
||||||
|
private _updateMaterial() {
|
||||||
|
this.getComponents(cc.RenderComponent).forEach(renderComponent => {
|
||||||
|
let material: cc.Material = renderComponent.getMaterial(0);
|
||||||
|
material.setProperty("lightColor", this._flashLightUBO.lightColor);
|
||||||
|
material.setProperty("lightCenterPoint", this._flashLightUBO.lightCenterPoint);
|
||||||
|
material.setProperty("lightAngle", this._flashLightUBO.lightAngle);
|
||||||
|
material.setProperty("lightWidth", this._flashLightUBO.lightWidth);
|
||||||
|
material.setProperty("enableGradient", this._flashLightUBO.enableGradient);
|
||||||
|
material.setProperty("cropAlpha", this._flashLightUBO.cropAlpha);
|
||||||
|
material.setProperty("enableFog", this._flashLightUBO.enableFog);
|
||||||
|
renderComponent.setMaterial(0, material);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class FlashLightUBO {
|
||||||
|
/**
|
||||||
|
* 中心点颜色
|
||||||
|
*/
|
||||||
|
lightColor: cc.Color = cc.Color.YELLOW;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 中心点坐标 ([0.0, 1.0], [0.0, 1.0])
|
||||||
|
*/
|
||||||
|
lightCenterPoint: cc.Vec2 = cc.v2(0.5, 0.5);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 光束角度 [0.0, 180.0]
|
||||||
|
*/
|
||||||
|
lightAngle: number = 45;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 光束宽度 [0.0, +∞]
|
||||||
|
*/
|
||||||
|
lightWidth: number = 0.5;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否启用光束渐变
|
||||||
|
*/
|
||||||
|
enableGradient: boolean = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否裁剪掉透明区域上的点光
|
||||||
|
*/
|
||||||
|
cropAlpha: boolean = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否开启战争迷雾效果
|
||||||
|
*/
|
||||||
|
enableFog: boolean = false;
|
||||||
|
}
|
9
assets/scripts/FlashLightCtrlComponent.ts.meta
Normal file
9
assets/scripts/FlashLightCtrlComponent.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.0.5",
|
||||||
|
"uuid": "3edca38f-0f12-489f-847a-0d89d9e55c6c",
|
||||||
|
"isPlugin": false,
|
||||||
|
"loadPluginInWeb": true,
|
||||||
|
"loadPluginInNative": true,
|
||||||
|
"loadPluginInEditor": false,
|
||||||
|
"subMetas": {}
|
||||||
|
}
|
111
assets/scripts/FlashLightEffectScene.ts
Normal file
111
assets/scripts/FlashLightEffectScene.ts
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
import FlashLightCtrlComponent, { FlashLightUBO } from "./FlashLightCtrlComponent";
|
||||||
|
|
||||||
|
const { ccclass, property } = cc._decorator;
|
||||||
|
|
||||||
|
@ccclass
|
||||||
|
export default class FlashLightEffectScene extends cc.Component {
|
||||||
|
private _redSlider: cc.Slider = null;
|
||||||
|
private _redSliderLabel: cc.Label = null;
|
||||||
|
private _greenSlider: cc.Slider = null;
|
||||||
|
private _greenSliderLabel: cc.Label = null;
|
||||||
|
private _blueSlider: cc.Slider = null;
|
||||||
|
private _blueSliderLabel: cc.Label = null;
|
||||||
|
private _alphaSlider: cc.Slider = null;
|
||||||
|
private _alphaSliderLabel: cc.Label = null;
|
||||||
|
private _lightWidthSlider: cc.Slider = null;
|
||||||
|
private _lightWidthSliderLabel: cc.Label = null;
|
||||||
|
private _lightAngleSlider: cc.Slider = null;
|
||||||
|
private _lightAngleSliderLabel: cc.Label = null;
|
||||||
|
|
||||||
|
private _enableGradientToggle: cc.Toggle = null;
|
||||||
|
private _cropAlphaToggle: cc.Toggle = null;
|
||||||
|
private _enableFogToggle: cc.Toggle = null;
|
||||||
|
|
||||||
|
private _examplesParentNode: cc.Node = null;
|
||||||
|
|
||||||
|
onLoad() {
|
||||||
|
cc.dynamicAtlasManager.enabled = false;
|
||||||
|
|
||||||
|
this._redSlider = cc.find("Canvas/Content/Controller/ColorRedSlider/Slider").getComponent(cc.Slider);
|
||||||
|
this._redSliderLabel = cc.find("Canvas/Content/Controller/ColorRedSlider/ValueLabel").getComponent(cc.Label);
|
||||||
|
this._greenSlider = cc.find("Canvas/Content/Controller/ColorGreenSlider/Slider").getComponent(cc.Slider);
|
||||||
|
this._greenSliderLabel = cc.find("Canvas/Content/Controller/ColorGreenSlider/ValueLabel").getComponent(cc.Label);
|
||||||
|
this._blueSlider = cc.find("Canvas/Content/Controller/ColorBlueSlider/Slider").getComponent(cc.Slider);
|
||||||
|
this._blueSliderLabel = cc.find("Canvas/Content/Controller/ColorBlueSlider/ValueLabel").getComponent(cc.Label);
|
||||||
|
this._alphaSlider = cc.find("Canvas/Content/Controller/ColorAlphaSlider/Slider").getComponent(cc.Slider);
|
||||||
|
this._alphaSliderLabel = cc.find("Canvas/Content/Controller/ColorAlphaSlider/ValueLabel").getComponent(cc.Label);
|
||||||
|
this._lightWidthSlider = cc.find("Canvas/Content/Controller/LightWidthSlider/Slider").getComponent(cc.Slider);
|
||||||
|
this._lightWidthSliderLabel = cc.find("Canvas/Content/Controller/LightWidthSlider/ValueLabel").getComponent(cc.Label);
|
||||||
|
this._lightAngleSlider = cc.find("Canvas/Content/Controller/LightAngleSlider/Slider").getComponent(cc.Slider);
|
||||||
|
this._lightAngleSliderLabel = cc.find("Canvas/Content/Controller/LightAngleSlider/ValueLabel").getComponent(cc.Label);
|
||||||
|
|
||||||
|
this._enableGradientToggle = cc.find("Canvas/Content/Controller/EnableGradientToggle/Toggle").getComponent(cc.Toggle);
|
||||||
|
this._cropAlphaToggle = cc.find("Canvas/Content/Controller/CropAlphaToggle/Toggle").getComponent(cc.Toggle);
|
||||||
|
this._enableFogToggle = cc.find("Canvas/Content/Controller/EnableFogToggle/Toggle").getComponent(cc.Toggle);
|
||||||
|
|
||||||
|
// 代码添加控制脚本
|
||||||
|
this._examplesParentNode = cc.find("Canvas/Content/Examples");
|
||||||
|
this._examplesParentNode.children.forEach(childNode => {
|
||||||
|
childNode.addComponent(FlashLightCtrlComponent);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
onEnable() {
|
||||||
|
this._redSlider.node.on("slide", this._onPropertyChanged, this);
|
||||||
|
this._greenSlider.node.on("slide", this._onPropertyChanged, this);
|
||||||
|
this._blueSlider.node.on("slide", this._onPropertyChanged, this);
|
||||||
|
this._alphaSlider.node.on("slide", this._onPropertyChanged, this);
|
||||||
|
this._lightWidthSlider.node.on("slide", this._onPropertyChanged, this);
|
||||||
|
this._lightAngleSlider.node.on("slide", this._onPropertyChanged, this);
|
||||||
|
|
||||||
|
this._enableGradientToggle.node.on("toggle", this._onPropertyChanged, this);
|
||||||
|
this._cropAlphaToggle.node.on("toggle", this._onPropertyChanged, this);
|
||||||
|
this._enableFogToggle.node.on("toggle", this._onPropertyChanged, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
onDisable() {
|
||||||
|
this._redSlider.node.off("slide", this._onPropertyChanged, this);
|
||||||
|
this._greenSlider.node.off("slide", this._onPropertyChanged, this);
|
||||||
|
this._blueSlider.node.off("slide", this._onPropertyChanged, this);
|
||||||
|
this._alphaSlider.node.off("slide", this._onPropertyChanged, this);
|
||||||
|
this._lightWidthSlider.node.off("slide", this._onPropertyChanged, this);
|
||||||
|
this._lightAngleSlider.node.off("slide", this._onPropertyChanged, this);
|
||||||
|
|
||||||
|
this._enableGradientToggle.node.off("toggle", this._onPropertyChanged, this);
|
||||||
|
this._cropAlphaToggle.node.off("toggle", this._onPropertyChanged, this);
|
||||||
|
this._enableFogToggle.node.off("toggle", this._onPropertyChanged, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
start() {
|
||||||
|
this._onPropertyChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
private _onPropertyChanged() {
|
||||||
|
// 更新进度条值 Label 文本
|
||||||
|
this._redSliderLabel.string = `${this._redSlider.progress.toFixed(2)} | ${Math.round(255 * this._redSlider.progress)}`;
|
||||||
|
this._greenSliderLabel.string = `${this._greenSlider.progress.toFixed(2)} | ${Math.round(255 * this._greenSlider.progress)}`;
|
||||||
|
this._blueSliderLabel.string = `${this._blueSlider.progress.toFixed(2)} | ${Math.round(255 * this._blueSlider.progress)}`;
|
||||||
|
this._alphaSliderLabel.string = `${this._alphaSlider.progress.toFixed(2)} | ${Math.round(255 * this._alphaSlider.progress)}`;
|
||||||
|
this._lightWidthSliderLabel.string = `${this._lightWidthSlider.progress.toFixed(2)}`;
|
||||||
|
|
||||||
|
let angle = 180 * this._lightAngleSlider.progress;
|
||||||
|
this._lightAngleSliderLabel.string = `${this._lightAngleSlider.progress.toFixed(2)} | ${angle.toFixed(2)}`;
|
||||||
|
|
||||||
|
// 通知子节点更新材质
|
||||||
|
this._examplesParentNode.children.forEach(childNode => {
|
||||||
|
childNode.emit("on_property_change", <FlashLightUBO>{
|
||||||
|
lightColor: cc.color(
|
||||||
|
Math.round(255 * this._redSlider.progress),
|
||||||
|
Math.round(255 * this._greenSlider.progress),
|
||||||
|
Math.round(255 * this._blueSlider.progress),
|
||||||
|
Math.round(255 * this._alphaSlider.progress)
|
||||||
|
),
|
||||||
|
lightAngle: angle,
|
||||||
|
lightWidth: this._lightWidthSlider.progress,
|
||||||
|
enableGradient: this._enableGradientToggle.isChecked,
|
||||||
|
cropAlpha: this._cropAlphaToggle.isChecked,
|
||||||
|
enableFog: this._enableFogToggle.isChecked
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
9
assets/scripts/FlashLightEffectScene.ts.meta
Normal file
9
assets/scripts/FlashLightEffectScene.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.0.5",
|
||||||
|
"uuid": "6d3aff77-2683-4417-8960-2a5fd5d0757c",
|
||||||
|
"isPlugin": false,
|
||||||
|
"loadPluginInWeb": true,
|
||||||
|
"loadPluginInNative": true,
|
||||||
|
"loadPluginInEditor": false,
|
||||||
|
"subMetas": {}
|
||||||
|
}
|
54
assets/scripts/GaussianBlurV1EffectScene.ts
Normal file
54
assets/scripts/GaussianBlurV1EffectScene.ts
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
const { ccclass, property } = cc._decorator;
|
||||||
|
|
||||||
|
@ccclass
|
||||||
|
export default class GaussianBlurV1EffectScene extends cc.Component {
|
||||||
|
private _blurSlider: cc.Slider = null;
|
||||||
|
private _blurSliderLabel: cc.Label = null;
|
||||||
|
|
||||||
|
private _examplesParentNode: cc.Node = null;
|
||||||
|
|
||||||
|
onLoad() {
|
||||||
|
cc.dynamicAtlasManager.enabled = false;
|
||||||
|
|
||||||
|
this._blurSlider = cc.find("Canvas/Content/Controller/BlurSlider/Slider").getComponent(cc.Slider);
|
||||||
|
this._blurSliderLabel = cc.find("Canvas/Content/Controller/BlurSlider/ValueLabel").getComponent(cc.Label);
|
||||||
|
|
||||||
|
this._examplesParentNode = cc.find("Canvas/Content/Examples");
|
||||||
|
}
|
||||||
|
|
||||||
|
onEnable() {
|
||||||
|
this._blurSlider.node.on("slide", this._onSliderChanged, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
onDisable() {
|
||||||
|
this._blurSlider.node.off("slide", this._onSliderChanged, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
start() {
|
||||||
|
this._onSliderChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
private _onSliderChanged() {
|
||||||
|
this._blurSliderLabel.string = `${this._blurSlider.progress.toFixed(2)}`;
|
||||||
|
|
||||||
|
// 更新材质
|
||||||
|
this._updateRenderComponentMaterial({});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新渲染组件的材质
|
||||||
|
*
|
||||||
|
* 1. 获取材质
|
||||||
|
* 2. 给材质的 unitform 变量赋值
|
||||||
|
* 3. 重新将材质赋值回去
|
||||||
|
*/
|
||||||
|
private _updateRenderComponentMaterial(param: {}) {
|
||||||
|
this._examplesParentNode.children.forEach(childNode => {
|
||||||
|
childNode.getComponents(cc.RenderComponent).forEach(renderComponent => {
|
||||||
|
let material: cc.Material = renderComponent.getMaterial(0);
|
||||||
|
material.setProperty("textureSize", cc.v2(childNode.width, childNode.height));
|
||||||
|
renderComponent.setMaterial(0, material);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
9
assets/scripts/GaussianBlurV1EffectScene.ts.meta
Normal file
9
assets/scripts/GaussianBlurV1EffectScene.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.0.5",
|
||||||
|
"uuid": "f460d8cf-51f7-4476-ba59-170dec68f562",
|
||||||
|
"isPlugin": false,
|
||||||
|
"loadPluginInWeb": true,
|
||||||
|
"loadPluginInNative": true,
|
||||||
|
"loadPluginInEditor": false,
|
||||||
|
"subMetas": {}
|
||||||
|
}
|
83
assets/scripts/PointLightCtrlComponent.ts
Normal file
83
assets/scripts/PointLightCtrlComponent.ts
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
const { ccclass, property } = cc._decorator;
|
||||||
|
|
||||||
|
@ccclass
|
||||||
|
export default class PointLightCtrlComponent extends cc.Component {
|
||||||
|
private _pointLightUBO: PointLightUBO = new PointLightUBO();
|
||||||
|
|
||||||
|
onEnable() {
|
||||||
|
this.node.on(cc.Node.EventType.TOUCH_START, this._onTouchStart, this);
|
||||||
|
this.node.on(cc.Node.EventType.TOUCH_MOVE, this._onTouchMove, this);
|
||||||
|
this.node.on("on_property_change", this._onPropertyChange, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
onDisable() {
|
||||||
|
this.node.off(cc.Node.EventType.TOUCH_START, this._onTouchStart, this);
|
||||||
|
this.node.off(cc.Node.EventType.TOUCH_MOVE, this._onTouchMove, this);
|
||||||
|
this.node.off("on_property_change", this._onPropertyChange, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
private _onTouchStart(event: cc.Event.EventTouch) {
|
||||||
|
this._onTouchMove(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
private _onTouchMove(event: cc.Event.EventTouch) {
|
||||||
|
let touchPointInWorldSpace = event.getLocation();
|
||||||
|
let touchPointInNodeSpace = this.node.convertToNodeSpaceAR(touchPointInWorldSpace);
|
||||||
|
|
||||||
|
// 将触摸点转换为OPENGL坐标系并归一化
|
||||||
|
// OpenGl 坐标系原点在左上角
|
||||||
|
this._pointLightUBO.centerPoint = cc.v2(
|
||||||
|
this.node.anchorX + touchPointInNodeSpace.x / this.node.width,
|
||||||
|
1 - (this.node.anchorY + touchPointInNodeSpace.y / this.node.height)
|
||||||
|
);
|
||||||
|
|
||||||
|
this._updateMaterial();
|
||||||
|
}
|
||||||
|
|
||||||
|
private _onPropertyChange(pointLightUBO: PointLightUBO) {
|
||||||
|
this._pointLightUBO.centerColor = pointLightUBO.centerColor;
|
||||||
|
this._pointLightUBO.radius = pointLightUBO.radius;
|
||||||
|
this._pointLightUBO.cropAlpha = pointLightUBO.cropAlpha;
|
||||||
|
this._pointLightUBO.enableFog = pointLightUBO.enableFog;
|
||||||
|
this._updateMaterial();
|
||||||
|
}
|
||||||
|
|
||||||
|
private _updateMaterial() {
|
||||||
|
this.getComponents(cc.RenderComponent).forEach(renderComponent => {
|
||||||
|
let material: cc.Material = renderComponent.getMaterial(0);
|
||||||
|
material.setProperty("centerColor", this._pointLightUBO.centerColor);
|
||||||
|
material.setProperty("centerPoint", this._pointLightUBO.centerPoint);
|
||||||
|
material.setProperty("radius", this._pointLightUBO.radius);
|
||||||
|
material.setProperty("cropAlpha", this._pointLightUBO.cropAlpha);
|
||||||
|
material.setProperty("enableFog", this._pointLightUBO.enableFog);
|
||||||
|
renderComponent.setMaterial(0, material);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class PointLightUBO {
|
||||||
|
/**
|
||||||
|
* 中心点颜色
|
||||||
|
*/
|
||||||
|
centerColor: cc.Color = cc.Color.YELLOW;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 中心点坐标 ([0.0, 1.0], [0.0, 1.0])
|
||||||
|
*/
|
||||||
|
centerPoint: cc.Vec2 = cc.v2(0.5, 0.5);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 扩散半径 [0.0, 1.0]
|
||||||
|
*/
|
||||||
|
radius: number = 0.5;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否裁剪掉透明区域上的点光
|
||||||
|
*/
|
||||||
|
cropAlpha: boolean = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否开启战争迷雾效果
|
||||||
|
*/
|
||||||
|
enableFog: boolean = false;
|
||||||
|
}
|
9
assets/scripts/PointLightCtrlComponent.ts.meta
Normal file
9
assets/scripts/PointLightCtrlComponent.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.0.5",
|
||||||
|
"uuid": "ababac41-a736-4cbf-ad03-248962dd06e7",
|
||||||
|
"isPlugin": false,
|
||||||
|
"loadPluginInWeb": true,
|
||||||
|
"loadPluginInNative": true,
|
||||||
|
"loadPluginInEditor": false,
|
||||||
|
"subMetas": {}
|
||||||
|
}
|
94
assets/scripts/PointLightEffectScene.ts
Normal file
94
assets/scripts/PointLightEffectScene.ts
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
import PointLightCtrlComponent, { PointLightUBO } from "./PointLightCtrlComponent";
|
||||||
|
|
||||||
|
const { ccclass, property } = cc._decorator;
|
||||||
|
|
||||||
|
@ccclass
|
||||||
|
export default class PointLightEffectScene extends cc.Component {
|
||||||
|
private _redSlider: cc.Slider = null;
|
||||||
|
private _redSliderLabel: cc.Label = null;
|
||||||
|
private _greenSlider: cc.Slider = null;
|
||||||
|
private _greenSliderLabel: cc.Label = null;
|
||||||
|
private _blueSlider: cc.Slider = null;
|
||||||
|
private _blueSliderLabel: cc.Label = null;
|
||||||
|
private _alphaSlider: cc.Slider = null;
|
||||||
|
private _alphaSliderLabel: cc.Label = null;
|
||||||
|
private _radiuSlider: cc.Slider = null;
|
||||||
|
private _radiuSliderLabel: cc.Label = null;
|
||||||
|
|
||||||
|
private _cropAlphaToggle: cc.Toggle = null;
|
||||||
|
private _enableFogToggle: cc.Toggle = null;
|
||||||
|
|
||||||
|
private _examplesParentNode: cc.Node = null;
|
||||||
|
|
||||||
|
onLoad() {
|
||||||
|
cc.dynamicAtlasManager.enabled = false;
|
||||||
|
|
||||||
|
this._redSlider = cc.find("Canvas/Content/Controller/ColorRedSlider/Slider").getComponent(cc.Slider);
|
||||||
|
this._redSliderLabel = cc.find("Canvas/Content/Controller/ColorRedSlider/ValueLabel").getComponent(cc.Label);
|
||||||
|
this._greenSlider = cc.find("Canvas/Content/Controller/ColorGreenSlider/Slider").getComponent(cc.Slider);
|
||||||
|
this._greenSliderLabel = cc.find("Canvas/Content/Controller/ColorGreenSlider/ValueLabel").getComponent(cc.Label);
|
||||||
|
this._blueSlider = cc.find("Canvas/Content/Controller/ColorBlueSlider/Slider").getComponent(cc.Slider);
|
||||||
|
this._blueSliderLabel = cc.find("Canvas/Content/Controller/ColorBlueSlider/ValueLabel").getComponent(cc.Label);
|
||||||
|
this._alphaSlider = cc.find("Canvas/Content/Controller/ColorAlphaSlider/Slider").getComponent(cc.Slider);
|
||||||
|
this._alphaSliderLabel = cc.find("Canvas/Content/Controller/ColorAlphaSlider/ValueLabel").getComponent(cc.Label);
|
||||||
|
this._radiuSlider = cc.find("Canvas/Content/Controller/RadiuSlider/Slider").getComponent(cc.Slider);
|
||||||
|
this._radiuSliderLabel = cc.find("Canvas/Content/Controller/RadiuSlider/ValueLabel").getComponent(cc.Label);
|
||||||
|
|
||||||
|
this._cropAlphaToggle = cc.find("Canvas/Content/Controller/CropAlphaToggle/Toggle").getComponent(cc.Toggle);
|
||||||
|
this._enableFogToggle = cc.find("Canvas/Content/Controller/EnableFogToggle/Toggle").getComponent(cc.Toggle);
|
||||||
|
|
||||||
|
// 代码添加控制脚本
|
||||||
|
this._examplesParentNode = cc.find("Canvas/Content/Examples");
|
||||||
|
this._examplesParentNode.children.forEach(childNode => {
|
||||||
|
childNode.addComponent(PointLightCtrlComponent);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
onEnable() {
|
||||||
|
this._redSlider.node.on("slide", this._onPropertyChanged, this);
|
||||||
|
this._greenSlider.node.on("slide", this._onPropertyChanged, this);
|
||||||
|
this._blueSlider.node.on("slide", this._onPropertyChanged, this);
|
||||||
|
this._alphaSlider.node.on("slide", this._onPropertyChanged, this);
|
||||||
|
this._radiuSlider.node.on("slide", this._onPropertyChanged, this);
|
||||||
|
this._cropAlphaToggle.node.on("toggle", this._onPropertyChanged, this);
|
||||||
|
this._enableFogToggle.node.on("toggle", this._onPropertyChanged, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
onDisable() {
|
||||||
|
this._redSlider.node.off("slide", this._onPropertyChanged, this);
|
||||||
|
this._greenSlider.node.off("slide", this._onPropertyChanged, this);
|
||||||
|
this._blueSlider.node.off("slide", this._onPropertyChanged, this);
|
||||||
|
this._alphaSlider.node.off("slide", this._onPropertyChanged, this);
|
||||||
|
this._radiuSlider.node.off("slide", this._onPropertyChanged, this);
|
||||||
|
this._cropAlphaToggle.node.off("toggle", this._onPropertyChanged, this);
|
||||||
|
this._enableFogToggle.node.off("toggle", this._onPropertyChanged, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
start() {
|
||||||
|
this._onPropertyChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
private _onPropertyChanged() {
|
||||||
|
// 更新进度条值 Label 文本
|
||||||
|
this._redSliderLabel.string = `${this._redSlider.progress.toFixed(2)} | ${Math.round(255 * this._redSlider.progress)}`;
|
||||||
|
this._greenSliderLabel.string = `${this._greenSlider.progress.toFixed(2)} | ${Math.round(255 * this._greenSlider.progress)}`;
|
||||||
|
this._blueSliderLabel.string = `${this._blueSlider.progress.toFixed(2)} | ${Math.round(255 * this._blueSlider.progress)}`;
|
||||||
|
this._alphaSliderLabel.string = `${this._alphaSlider.progress.toFixed(2)} | ${Math.round(255 * this._alphaSlider.progress)}`;
|
||||||
|
this._radiuSliderLabel.string = `${this._radiuSlider.progress.toFixed(2)}`;
|
||||||
|
|
||||||
|
// 通知子节点更新材质
|
||||||
|
this._examplesParentNode.children.forEach(childNode => {
|
||||||
|
childNode.emit("on_property_change", <PointLightUBO>{
|
||||||
|
centerColor: cc.color(
|
||||||
|
Math.round(255 * this._redSlider.progress),
|
||||||
|
Math.round(255 * this._greenSlider.progress),
|
||||||
|
Math.round(255 * this._blueSlider.progress),
|
||||||
|
Math.round(255 * this._alphaSlider.progress)
|
||||||
|
),
|
||||||
|
radius: this._radiuSlider.progress,
|
||||||
|
cropAlpha: this._cropAlphaToggle.isChecked,
|
||||||
|
enableFog: this._enableFogToggle.isChecked
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
9
assets/scripts/PointLightEffectScene.ts.meta
Normal file
9
assets/scripts/PointLightEffectScene.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.0.5",
|
||||||
|
"uuid": "3a212efa-8118-4c79-a0f7-a51f36262ff7",
|
||||||
|
"isPlugin": false,
|
||||||
|
"loadPluginInWeb": true,
|
||||||
|
"loadPluginInNative": true,
|
||||||
|
"loadPluginInEditor": false,
|
||||||
|
"subMetas": {}
|
||||||
|
}
|
9
assets/scripts/PreviewEffectScene.ts
Normal file
9
assets/scripts/PreviewEffectScene.ts
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
const { ccclass, property } = cc._decorator;
|
||||||
|
|
||||||
|
@ccclass
|
||||||
|
export default class PreviewEffectScene extends cc.Component {
|
||||||
|
onLoad() {
|
||||||
|
// 关闭动态合图
|
||||||
|
cc.dynamicAtlasManager.enabled = false;
|
||||||
|
}
|
||||||
|
}
|
9
assets/scripts/PreviewEffectScene.ts.meta
Normal file
9
assets/scripts/PreviewEffectScene.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.0.5",
|
||||||
|
"uuid": "7d1a13dd-0ba0-4812-b685-31d59a70ecef",
|
||||||
|
"isPlugin": false,
|
||||||
|
"loadPluginInWeb": true,
|
||||||
|
"loadPluginInNative": true,
|
||||||
|
"loadPluginInEditor": false,
|
||||||
|
"subMetas": {}
|
||||||
|
}
|
62
assets/scripts/RoundCornerCropV1EffectScene.ts
Normal file
62
assets/scripts/RoundCornerCropV1EffectScene.ts
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
const { ccclass, property } = cc._decorator;
|
||||||
|
|
||||||
|
@ccclass
|
||||||
|
export default class RoundCornerCropV1EffectScene extends cc.Component {
|
||||||
|
private _radiuSlider: cc.Slider = null;
|
||||||
|
private _radiuLabel: cc.Label = null;
|
||||||
|
|
||||||
|
private _examplesParentNode: cc.Node = null;
|
||||||
|
|
||||||
|
onLoad() {
|
||||||
|
// 关闭动态合图
|
||||||
|
cc.dynamicAtlasManager.enabled = false;
|
||||||
|
|
||||||
|
this._radiuSlider = cc.find("Canvas/Content/Controller/RadiusSlider/Slider").getComponent(cc.Slider);
|
||||||
|
this._radiuLabel = cc.find("Canvas/Content/Controller/RadiusSlider/ValueLabel").getComponent(cc.Label);
|
||||||
|
|
||||||
|
this._examplesParentNode = cc.find("Canvas/Content/Examples");
|
||||||
|
}
|
||||||
|
|
||||||
|
onEnable() {
|
||||||
|
this._radiuSlider.node.on("slide", this._onSliderChanged, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
onDisable() {
|
||||||
|
this._radiuSlider.node.off("slide", this._onSliderChanged, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
start() {
|
||||||
|
this._onSliderChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
private _onSliderChanged() {
|
||||||
|
this._radiuLabel.string = `${this._radiuSlider.progress.toFixed(2)}`;
|
||||||
|
|
||||||
|
// 更新材质
|
||||||
|
this._updateRenderComponentMaterial({
|
||||||
|
radius: this._radiuSlider.progress
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新渲染组件的材质
|
||||||
|
*
|
||||||
|
* 1. 获取材质
|
||||||
|
* 2. 给材质的 unitform 变量赋值
|
||||||
|
* 3. 重新将材质赋值回去
|
||||||
|
*/
|
||||||
|
private _updateRenderComponentMaterial(param: {
|
||||||
|
/**
|
||||||
|
* 圆角半径 [0.0, 0.5] ,0.5 表示圆形裁剪
|
||||||
|
*/
|
||||||
|
radius: number;
|
||||||
|
}) {
|
||||||
|
this._examplesParentNode.children.forEach(childNode => {
|
||||||
|
childNode.getComponents(cc.RenderComponent).forEach(renderComponent => {
|
||||||
|
let material: cc.Material = renderComponent.getMaterial(0);
|
||||||
|
material.setProperty("radius", param.radius);
|
||||||
|
renderComponent.setMaterial(0, material);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
9
assets/scripts/RoundCornerCropV1EffectScene.ts.meta
Normal file
9
assets/scripts/RoundCornerCropV1EffectScene.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.0.5",
|
||||||
|
"uuid": "d27658c5-a966-4e50-a162-09c7af01579e",
|
||||||
|
"isPlugin": false,
|
||||||
|
"loadPluginInWeb": true,
|
||||||
|
"loadPluginInNative": true,
|
||||||
|
"loadPluginInEditor": false,
|
||||||
|
"subMetas": {}
|
||||||
|
}
|
80
assets/scripts/RoundCornerCropV2EffectScene.ts
Normal file
80
assets/scripts/RoundCornerCropV2EffectScene.ts
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
const { ccclass, property } = cc._decorator;
|
||||||
|
|
||||||
|
@ccclass
|
||||||
|
export default class RoundCornerCropV2EffectScene extends cc.Component {
|
||||||
|
private _radiuSlider: cc.Slider = null;
|
||||||
|
private _radiuLabel: cc.Label = null;
|
||||||
|
|
||||||
|
private _examplesParentNode: cc.Node = null;
|
||||||
|
|
||||||
|
onLoad() {
|
||||||
|
// 关闭动态合图
|
||||||
|
cc.dynamicAtlasManager.enabled = false;
|
||||||
|
|
||||||
|
this._radiuSlider = cc.find("Canvas/Content/Controller/RadiusSlider/Slider").getComponent(cc.Slider);
|
||||||
|
this._radiuLabel = cc.find("Canvas/Content/Controller/RadiusSlider/ValueLabel").getComponent(cc.Label);
|
||||||
|
|
||||||
|
this._examplesParentNode = cc.find("Canvas/Content/Examples");
|
||||||
|
}
|
||||||
|
|
||||||
|
onEnable() {
|
||||||
|
this._radiuSlider.node.on("slide", this._onSliderChanged, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
onDisable() {
|
||||||
|
this._radiuSlider.node.off("slide", this._onSliderChanged, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
start() {
|
||||||
|
this._onSliderChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
private _onSliderChanged() {
|
||||||
|
// 计算半径px
|
||||||
|
let radiusInPx = Math.floor(100 * this._radiuSlider.progress);
|
||||||
|
this._radiuLabel.string = radiusInPx + "";
|
||||||
|
|
||||||
|
// 更新材质
|
||||||
|
this._updateRenderComponentMaterial({
|
||||||
|
radiusInPx: radiusInPx
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新渲染组件的材质
|
||||||
|
*
|
||||||
|
* 1. 获取材质
|
||||||
|
* 2. 给材质的 unitform 变量赋值
|
||||||
|
* 3. 重新将材质赋值回去
|
||||||
|
*/
|
||||||
|
private _updateRenderComponentMaterial(param: {
|
||||||
|
/**
|
||||||
|
* 圆角半径px
|
||||||
|
*/
|
||||||
|
radiusInPx: number;
|
||||||
|
}) {
|
||||||
|
this._examplesParentNode.children.forEach(childNode => {
|
||||||
|
childNode.getComponents(cc.RenderComponent).forEach(renderComponent => {
|
||||||
|
// 计算半径px分别相对于纹理宽高的比例(也叫归一化)
|
||||||
|
let xRadiux = param.radiusInPx / childNode.width;
|
||||||
|
// 约束范围在区间 [0.0, 0.5]
|
||||||
|
xRadiux = xRadiux >= 0.5 ? 0.5 : xRadiux;
|
||||||
|
|
||||||
|
let yRadius = param.radiusInPx / childNode.height;
|
||||||
|
yRadius = yRadius >= 0.5 ? 0.5 : yRadius;
|
||||||
|
|
||||||
|
if (childNode.name === "Rectangle1") cc.log(`${childNode.name} : (${xRadiux}, ${yRadius})`);
|
||||||
|
|
||||||
|
// 更新材质
|
||||||
|
let material: cc.Material = renderComponent.getMaterial(0);
|
||||||
|
|
||||||
|
// 圆角x轴半径长度(相对于纹理宽度)[0.0, 0.5]
|
||||||
|
material.setProperty("xRadius", xRadiux);
|
||||||
|
|
||||||
|
// 圆角y轴半径长度(相对于纹理高度)[0.0, 0.5]
|
||||||
|
material.setProperty("yRadius", yRadius);
|
||||||
|
renderComponent.setMaterial(0, material);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
9
assets/scripts/RoundCornerCropV2EffectScene.ts.meta
Normal file
9
assets/scripts/RoundCornerCropV2EffectScene.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.0.5",
|
||||||
|
"uuid": "24bbe7ba-5d1e-42d9-b2dd-f219fef90367",
|
||||||
|
"isPlugin": false,
|
||||||
|
"loadPluginInWeb": true,
|
||||||
|
"loadPluginInNative": true,
|
||||||
|
"loadPluginInEditor": false,
|
||||||
|
"subMetas": {}
|
||||||
|
}
|
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ver": "2.3.3",
|
"ver": "2.3.4",
|
||||||
"uuid": "c996c862-3d09-4bc6-915d-e8a8e7226933",
|
"uuid": "c996c862-3d09-4bc6-915d-e8a8e7226933",
|
||||||
"type": "sprite",
|
"type": "sprite",
|
||||||
"wrapMode": "clamp",
|
"wrapMode": "clamp",
|
||||||
@@ -7,6 +7,8 @@
|
|||||||
"premultiplyAlpha": false,
|
"premultiplyAlpha": false,
|
||||||
"genMipmaps": false,
|
"genMipmaps": false,
|
||||||
"packable": true,
|
"packable": true,
|
||||||
|
"width": 60,
|
||||||
|
"height": 60,
|
||||||
"platformSettings": {},
|
"platformSettings": {},
|
||||||
"subMetas": {
|
"subMetas": {
|
||||||
"ball_0": {
|
"ball_0": {
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ver": "2.3.3",
|
"ver": "2.3.4",
|
||||||
"uuid": "bdfd3151-8c13-406b-8f94-1f101c972e7e",
|
"uuid": "bdfd3151-8c13-406b-8f94-1f101c972e7e",
|
||||||
"type": "sprite",
|
"type": "sprite",
|
||||||
"wrapMode": "clamp",
|
"wrapMode": "clamp",
|
||||||
@@ -7,6 +7,8 @@
|
|||||||
"premultiplyAlpha": false,
|
"premultiplyAlpha": false,
|
||||||
"genMipmaps": false,
|
"genMipmaps": false,
|
||||||
"packable": true,
|
"packable": true,
|
||||||
|
"width": 80,
|
||||||
|
"height": 80,
|
||||||
"platformSettings": {},
|
"platformSettings": {},
|
||||||
"subMetas": {
|
"subMetas": {
|
||||||
"ball_1": {
|
"ball_1": {
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ver": "2.3.3",
|
"ver": "2.3.4",
|
||||||
"uuid": "a8027877-d8d6-4645-97a0-52d4a0123dba",
|
"uuid": "a8027877-d8d6-4645-97a0-52d4a0123dba",
|
||||||
"type": "sprite",
|
"type": "sprite",
|
||||||
"wrapMode": "clamp",
|
"wrapMode": "clamp",
|
||||||
@@ -7,6 +7,8 @@
|
|||||||
"premultiplyAlpha": false,
|
"premultiplyAlpha": false,
|
||||||
"genMipmaps": false,
|
"genMipmaps": false,
|
||||||
"packable": true,
|
"packable": true,
|
||||||
|
"width": 2,
|
||||||
|
"height": 2,
|
||||||
"platformSettings": {},
|
"platformSettings": {},
|
||||||
"subMetas": {
|
"subMetas": {
|
||||||
"bg": {
|
"bg": {
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ver": "2.3.3",
|
"ver": "2.3.4",
|
||||||
"uuid": "6aa0aa6a-ebee-4155-a088-a687a6aadec4",
|
"uuid": "6aa0aa6a-ebee-4155-a088-a687a6aadec4",
|
||||||
"type": "sprite",
|
"type": "sprite",
|
||||||
"wrapMode": "clamp",
|
"wrapMode": "clamp",
|
||||||
@@ -7,6 +7,8 @@
|
|||||||
"premultiplyAlpha": false,
|
"premultiplyAlpha": false,
|
||||||
"genMipmaps": false,
|
"genMipmaps": false,
|
||||||
"packable": true,
|
"packable": true,
|
||||||
|
"width": 195,
|
||||||
|
"height": 270,
|
||||||
"platformSettings": {},
|
"platformSettings": {},
|
||||||
"subMetas": {
|
"subMetas": {
|
||||||
"cocos_logo": {
|
"cocos_logo": {
|
||||||
|
BIN
assets/textures/freedom.jpg
Normal file
BIN
assets/textures/freedom.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 160 KiB |
36
assets/textures/freedom.jpg.meta
Normal file
36
assets/textures/freedom.jpg.meta
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"ver": "2.3.4",
|
||||||
|
"uuid": "caf42253-1569-497e-83da-2d1696f5866b",
|
||||||
|
"type": "sprite",
|
||||||
|
"wrapMode": "clamp",
|
||||||
|
"filterMode": "bilinear",
|
||||||
|
"premultiplyAlpha": false,
|
||||||
|
"genMipmaps": false,
|
||||||
|
"packable": true,
|
||||||
|
"width": 755,
|
||||||
|
"height": 755,
|
||||||
|
"platformSettings": {},
|
||||||
|
"subMetas": {
|
||||||
|
"freedom": {
|
||||||
|
"ver": "1.0.4",
|
||||||
|
"uuid": "dbc8f785-d78b-4179-bfce-ffbf69396712",
|
||||||
|
"rawTextureUuid": "caf42253-1569-497e-83da-2d1696f5866b",
|
||||||
|
"trimType": "auto",
|
||||||
|
"trimThreshold": 1,
|
||||||
|
"rotated": false,
|
||||||
|
"offsetX": 0,
|
||||||
|
"offsetY": 0,
|
||||||
|
"trimX": 0,
|
||||||
|
"trimY": 0,
|
||||||
|
"width": 755,
|
||||||
|
"height": 755,
|
||||||
|
"rawWidth": 755,
|
||||||
|
"rawHeight": 755,
|
||||||
|
"borderTop": 0,
|
||||||
|
"borderBottom": 0,
|
||||||
|
"borderLeft": 0,
|
||||||
|
"borderRight": 0,
|
||||||
|
"subMetas": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
BIN
assets/textures/gaussian_blur.png
Normal file
BIN
assets/textures/gaussian_blur.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 130 KiB |
36
assets/textures/gaussian_blur.png.meta
Normal file
36
assets/textures/gaussian_blur.png.meta
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"ver": "2.3.4",
|
||||||
|
"uuid": "c879710d-0419-46be-bf96-92ee1ca52324",
|
||||||
|
"type": "sprite",
|
||||||
|
"wrapMode": "clamp",
|
||||||
|
"filterMode": "bilinear",
|
||||||
|
"premultiplyAlpha": false,
|
||||||
|
"genMipmaps": false,
|
||||||
|
"packable": true,
|
||||||
|
"width": 317,
|
||||||
|
"height": 178,
|
||||||
|
"platformSettings": {},
|
||||||
|
"subMetas": {
|
||||||
|
"gaussian_blur": {
|
||||||
|
"ver": "1.0.4",
|
||||||
|
"uuid": "91f28953-0d5f-4379-9ae6-f3f6afb3241c",
|
||||||
|
"rawTextureUuid": "c879710d-0419-46be-bf96-92ee1ca52324",
|
||||||
|
"trimType": "auto",
|
||||||
|
"trimThreshold": 1,
|
||||||
|
"rotated": false,
|
||||||
|
"offsetX": 0,
|
||||||
|
"offsetY": 0,
|
||||||
|
"trimX": 0,
|
||||||
|
"trimY": 0,
|
||||||
|
"width": 317,
|
||||||
|
"height": 178,
|
||||||
|
"rawWidth": 317,
|
||||||
|
"rawHeight": 178,
|
||||||
|
"borderTop": 0,
|
||||||
|
"borderBottom": 0,
|
||||||
|
"borderLeft": 0,
|
||||||
|
"borderRight": 0,
|
||||||
|
"subMetas": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ver": "2.3.3",
|
"ver": "2.3.4",
|
||||||
"uuid": "2453b01d-4364-4d87-ab53-391d1a42d07d",
|
"uuid": "2453b01d-4364-4d87-ab53-391d1a42d07d",
|
||||||
"type": "sprite",
|
"type": "sprite",
|
||||||
"wrapMode": "clamp",
|
"wrapMode": "clamp",
|
||||||
@@ -7,6 +7,8 @@
|
|||||||
"premultiplyAlpha": false,
|
"premultiplyAlpha": false,
|
||||||
"genMipmaps": false,
|
"genMipmaps": false,
|
||||||
"packable": true,
|
"packable": true,
|
||||||
|
"width": 60,
|
||||||
|
"height": 60,
|
||||||
"platformSettings": {},
|
"platformSettings": {},
|
||||||
"subMetas": {
|
"subMetas": {
|
||||||
"video_btn": {
|
"video_btn": {
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ver": "2.3.3",
|
"ver": "2.3.4",
|
||||||
"uuid": "a5454758-921f-46ab-a314-0a7936d03be7",
|
"uuid": "a5454758-921f-46ab-a314-0a7936d03be7",
|
||||||
"type": "sprite",
|
"type": "sprite",
|
||||||
"wrapMode": "clamp",
|
"wrapMode": "clamp",
|
||||||
@@ -7,6 +7,8 @@
|
|||||||
"premultiplyAlpha": false,
|
"premultiplyAlpha": false,
|
||||||
"genMipmaps": false,
|
"genMipmaps": false,
|
||||||
"packable": true,
|
"packable": true,
|
||||||
|
"width": 1114,
|
||||||
|
"height": 512,
|
||||||
"platformSettings": {},
|
"platformSettings": {},
|
||||||
"subMetas": {
|
"subMetas": {
|
||||||
"xmlBMFont": {
|
"xmlBMFont": {
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"engine": "cocos2d-html5",
|
"engine": "cocos2d-html5",
|
||||||
"packages": "packages",
|
"packages": "packages",
|
||||||
"version": "2.2.1",
|
"version": "2.3.0",
|
||||||
"id": "7e74e9ed-5c28-4e81-ae0e-5a67f548022c"
|
"id": "7e74e9ed-5c28-4e81-ae0e-5a67f548022c"
|
||||||
}
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user