From 7e197c0892887453215f8954f11d98164bcdb1a7 Mon Sep 17 00:00:00 2001 From: caizhitao Date: Sat, 11 Jan 2020 18:58:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96demo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/effects/sprite-local-diffusion.effect | 18 +- .../sprite-local-diffusion.effect.meta | 4 +- assets/scenes/LocalDiffusionEffectScene.fire | 3187 ++++++++++++++++- assets/scripts/LocalDiffusionCtrl.ts | 37 +- assets/scripts/LocalDiffusionEffectScene.ts | 115 +- 5 files changed, 3207 insertions(+), 154 deletions(-) diff --git a/assets/effects/sprite-local-diffusion.effect b/assets/effects/sprite-local-diffusion.effect index 6376995..4edb2b3 100644 --- a/assets/effects/sprite-local-diffusion.effect +++ b/assets/effects/sprite-local-diffusion.effect @@ -1,9 +1,9 @@ // Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. -// 老照片特效 +// 点光/点扩散 // 原理: -// r = 0.393 * r + 0.769 * g + 0.189 * b; -// g = 0.349 * r + 0.686 * g + 0.168 * b; -// b = 0.272 * r + 0.534 * g + 0.131 * b; +// 1. 画圆 +// 2. 圆心高亮(透明度=1.0),圆边缘不亮(透明度=0.0) +// 3. 在原图像上方叠加圆 CCEffect %{ techniques: @@ -21,7 +21,7 @@ CCEffect %{ # 扩散颜色 centerColor: { - value: [1.0, 1.0, 0.0, 1.0], + value: [1.0, 0.0, 0.0, 1.0], inspector: { type: color, tooltip: "发光颜色" @@ -98,6 +98,10 @@ CCProgram fs %{ // 扩散颜色 vec4 centerColor; + // // 因为现在cc不支持 vec2 数组,所以只能用 vec4 数组 + // // 而一个 vec4 就包含两个 vec2 ,共计 4 个属性,所以如果数组是4,就表示有8个点了 + // vec4 points[4]; + // 扩散起点坐标 vec2 centerPoint; @@ -153,10 +157,6 @@ CCProgram fs %{ #if ENABLE_DIFFUSION gl_FragColor = addDiffusionColor(gl_FragColor, centerPoint, radius, centerColor); - // gl_FragColor = addDiffusionColor(gl_FragColor, vec2(0.7, 0.), 0.2, vec4(1.0, 1.0, 0.0, 1.0)); - // gl_FragColor = addDiffusionColor(gl_FragColor, vec2(0.8, 0.), 0.2, vec4(1.0, 1.0, 0.0, 1.0)); - // gl_FragColor = addDiffusionColor(gl_FragColor, vec2(0.9, 0.), 0.2, vec4(1.0, 1.0, 0.0, 1.0)); - // gl_FragColor = addDiffusionColor(gl_FragColor, vec2(0.2, 0.), 0.2, vec4(1.0, 1.0, 0.0, 1.0)); #endif } }% diff --git a/assets/effects/sprite-local-diffusion.effect.meta b/assets/effects/sprite-local-diffusion.effect.meta index 95e30e4..a06c7ea 100644 --- a/assets/effects/sprite-local-diffusion.effect.meta +++ b/assets/effects/sprite-local-diffusion.effect.meta @@ -5,11 +5,11 @@ { "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", - "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 ENABLE_DIFFUSION\nuniform vec4 centerColor;\nuniform vec2 centerPoint;\nuniform float radius;\n/**\n * 添加某个扩散点后混合后的纹理颜色\n */\nvec4 addDiffusionColor(vec4 textureColor, vec2 centerPoint, float radius, vec4 centerColor) {\n\n float dis = distance(v_uv0, centerPoint);\n\n float a = step(dis, radius);\n\n a *= 1.0 - (dis / radius);\n\n vec4 diffusionColor = centerColor * a;\n\n return textureColor * textureColor.a + diffusionColor;\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 ENABLE_DIFFUSION\n gl_FragColor = addDiffusionColor(gl_FragColor, centerPoint, radius, centerColor);\n\n #endif\n}\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 ENABLE_DIFFUSION\nuniform vec4 centerColor;\nuniform vec2 centerPoint;\nuniform float radius;\n/**\n * 添加某个扩散点后混合后的纹理颜色\n */\nvec4 addDiffusionColor(vec4 textureColor, vec2 centerPoint, float radius, vec4 centerColor) {\n\n float dis = distance(v_uv0, centerPoint);\n\n float a = step(dis, radius);\n\n a *= 1.0 - (dis / radius);\n\n vec4 diffusionColor = centerColor * a;\n\n return textureColor * textureColor.a + diffusionColor;\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 ENABLE_DIFFUSION\n gl_FragColor = addDiffusionColor(gl_FragColor, centerPoint, radius, centerColor);\n #endif\n}\n" }, "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", - "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 ENABLE_DIFFUSION\nuniform Diffusion {\n\n vec4 centerColor;\n\n vec2 centerPoint;\n\n float radius;\n}\n\n/**\n * 添加某个扩散点后混合后的纹理颜色\n */\nvec4 addDiffusionColor(vec4 textureColor, vec2 centerPoint, float radius, vec4 centerColor) {\n\n float dis = distance(v_uv0, centerPoint);\n\n float a = step(dis, radius);\n\n a *= 1.0 - (dis / radius);\n\n vec4 diffusionColor = centerColor * a;\n\n return textureColor * textureColor.a + diffusionColor;\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 ENABLE_DIFFUSION\n gl_FragColor = addDiffusionColor(gl_FragColor, centerPoint, radius, centerColor);\n\n #endif\n}\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 ENABLE_DIFFUSION\nuniform Diffusion {\n\n vec4 centerColor;\n\n vec2 centerPoint;\n\n float radius;\n}\n\n/**\n * 添加某个扩散点后混合后的纹理颜色\n */\nvec4 addDiffusionColor(vec4 textureColor, vec2 centerPoint, float radius, vec4 centerColor) {\n\n float dis = distance(v_uv0, centerPoint);\n\n float a = step(dis, radius);\n\n a *= 1.0 - (dis / radius);\n\n vec4 diffusionColor = centerColor * a;\n\n return textureColor * textureColor.a + diffusionColor;\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 ENABLE_DIFFUSION\n gl_FragColor = addDiffusionColor(gl_FragColor, centerPoint, radius, centerColor);\n #endif\n}\n" } } ], diff --git a/assets/scenes/LocalDiffusionEffectScene.fire b/assets/scenes/LocalDiffusionEffectScene.fire index e49fa89..2208a6d 100755 --- a/assets/scenes/LocalDiffusionEffectScene.fire +++ b/assets/scenes/LocalDiffusionEffectScene.fire @@ -78,10 +78,10 @@ "_active": true, "_components": [ { - "__id__": 46 + "__id__": 113 }, { - "__id__": 47 + "__id__": 114 } ], "_prefab": null, @@ -171,7 +171,7 @@ "array": [ 0, 0, - 351.60631393648214, + 393.5138244914885, 0, 0, 0, @@ -245,13 +245,13 @@ "__id__": 9 }, { - "__id__": 29 + "__id__": 97 } ], "_active": true, "_components": [ { - "__id__": 45 + "__id__": 112 } ], "_prefab": null, @@ -436,15 +436,27 @@ "_children": [ { "__id__": 10 + }, + { + "__id__": 27 + }, + { + "__id__": 44 + }, + { + "__id__": 61 + }, + { + "__id__": 78 } ], "_active": true, "_components": [ { - "__id__": 27 + "__id__": 95 }, { - "__id__": 28 + "__id__": 96 } ], "_prefab": null, @@ -459,7 +471,7 @@ "_contentSize": { "__type__": "cc.Size", "width": 576, - "height": 60 + "height": 444 }, "_anchorPoint": { "__type__": "cc.Vec2", @@ -497,7 +509,7 @@ }, { "__type__": "cc.Node", - "_name": "OldLevelSlider", + "_name": "ColorRedSlider", "_objFlags": 0, "_parent": { "__id__": 9 @@ -565,7 +577,7 @@ "_is3DNode": false, "_groupIndex": 0, "groupIndex": 0, - "_id": "669o93+gJMWJFGUDKSDUJ7" + "_id": "2eIycconpP8Ltw3aHtZvvq" }, { "__type__": "cc.Node", @@ -630,11 +642,11 @@ "_is3DNode": false, "_groupIndex": 0, "groupIndex": 0, - "_id": "d9MLgZpaFCEZu70E0LAUbn" + "_id": "49FUY/2e1Dl7xW+0TPwF4y" }, { "__type__": "cc.Label", - "_name": "SliderDescLabel