From 6e7785e527b34c5414061aecef2d6ba825b38f95 Mon Sep 17 00:00:00 2001 From: caizhitao Date: Thu, 12 Dec 2019 22:52:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E6=AD=A5=E5=AE=9E=E7=8E=B0=E6=8F=8F?= =?UTF-8?q?=E8=BE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/effects/sprite-example.effect | 3 +- assets/effects/sprite-outline.effect | 24 +++- assets/effects/sprite-outline.effect.meta | 4 +- assets/materials/sprite-outline.mtl | 5 +- assets/scenes/MainScene.fire | 124 +++++++++++++++--- assets/textures/ball_00.png | Bin 0 -> 4558 bytes ...{prestige_02.png.meta => ball_00.png.meta} | 8 +- assets/textures/prestige_01.png | Bin 6086 -> 0 bytes assets/textures/prestige_01.png.meta | 34 ----- assets/textures/prestige_02.png | Bin 5276 -> 0 bytes 10 files changed, 133 insertions(+), 69 deletions(-) create mode 100644 assets/textures/ball_00.png rename assets/textures/{prestige_02.png.meta => ball_00.png.meta} (75%) delete mode 100644 assets/textures/prestige_01.png delete mode 100644 assets/textures/prestige_01.png.meta delete mode 100644 assets/textures/prestige_02.png diff --git a/assets/effects/sprite-example.effect b/assets/effects/sprite-example.effect index ef7a75a..8e2009f 100644 --- a/assets/effects/sprite-example.effect +++ b/assets/effects/sprite-example.effect @@ -48,7 +48,7 @@ CCProgram vs %{ // 顶点坐标 in vec3 a_position; - // 顶点颜色 + // 顶点颜色,实际为对应节点的颜色 in vec4 a_color; // out 用在函数的参数中,表示该参数是输出参数,值是会改变的 @@ -120,6 +120,7 @@ CCProgram fs %{ #endif #endif + // 纹理颜色 和 节点颜色进行混合得出最终颜色 o *= v_color; // 这个方法来自 alpha-test 头文件 diff --git a/assets/effects/sprite-outline.effect b/assets/effects/sprite-outline.effect index db4a533..32cd6a7 100644 --- a/assets/effects/sprite-outline.effect +++ b/assets/effects/sprite-outline.effect @@ -65,9 +65,8 @@ CCProgram fs %{ uniform sampler2D texture; #endif - - #if SHOW_OUT_LINE + uniform Outline { // 描边颜色 vec4 outlineColor; @@ -75,9 +74,11 @@ CCProgram fs %{ float outlineSize; // 特别地,必须是 vec4 先于 float 声明 }; - #endif // 获取背面颜色 + // 取当前点上、下、左、右、上左、上右、下左、下右共计8个方向,距离为 outlineSize 的8个点,求他们的透明度之和 + // 由此可以得到当前点是否属于图像往八个方向做偏移后得到的放大图区域,并且能得到该点最终透明度值 + // 最终对应的为图像偏移/放大后的背景区域 float getBackArea() { vec4 color_up = texture(texture, v_uv0 + vec2(0, outlineSize)); vec4 color_down = texture(texture, v_uv0 - vec2(0, outlineSize)); @@ -91,6 +92,8 @@ CCProgram fs %{ return clamp(total, 0.0, 1.0); } + #endif + void main () { vec4 o = vec4(1, 1, 1, 1); @@ -107,8 +110,17 @@ CCProgram fs %{ gl_FragColor = o; - // 正常的rgb + 正常的透明区域 * 背面颜色 * 描边颜色 - // gl_FragColor = vec4(o.rgb + (1.0 - o.a) * outlineColor.rgb * getBackArea(), 1.0); - // gl_FragColor = vec4(o.rgb + outlineColor.rgb * getBackArea(), 1.0); + #if SHOW_OUT_LINE + // 给放大后的区域填我们的背景颜色(实际为描边颜色) + gl_FragColor = outlineColor * getBackArea(); + + // 然后在这个区域上,叠加上我们原来图像 + gl_FragColor = o + (1.0 - o.a) * gl_FragColor; + + // gl_FragColor = o +(1.0 - o.a) * outlineColor * getBackArea(); + + // 原来的实现 + // gl_FragColor = vec4(o.rgb + (1.0 - o.a) * outlineColor.rgb * getBackArea(), 1.0); + #endif } }% diff --git a/assets/effects/sprite-outline.effect.meta b/assets/effects/sprite-outline.effect.meta index 48be7dc..e4b0899 100644 --- a/assets/effects/sprite-outline.effect.meta +++ b/assets/effects/sprite-outline.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 SHOW_OUT_LINE\nuniform float outlineSize;\n\n#endif\n\nfloat getBackArea() {\n vec4 color_up = texture2D(texture, v_uv0 + vec2(0, outlineSize)); \n vec4 color_down = texture2D(texture, v_uv0 - vec2(0, outlineSize)); \n vec4 color_left = texture2D(texture, v_uv0 - vec2(outlineSize, 0)); \n vec4 color_right = texture2D(texture, v_uv0 + vec2(outlineSize, 0)); \n vec4 color_up_left = texture2D(texture, v_uv0 + vec2(outlineSize, -outlineSize)); \n vec4 color_up_right = texture2D(texture, v_uv0 + vec2(outlineSize, outlineSize)); \n vec4 color_down_left = texture2D(texture, v_uv0 + vec2(-outlineSize, -outlineSize)); \n vec4 color_down_right = texture2D(texture, v_uv0 + vec2(-outlineSize, outlineSize)); \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\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}\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 outlineSize;\n\nfloat getBackArea() {\n vec4 color_up = texture2D(texture, v_uv0 + vec2(0, outlineSize)); \n vec4 color_down = texture2D(texture, v_uv0 - vec2(0, outlineSize)); \n vec4 color_left = texture2D(texture, v_uv0 - vec2(outlineSize, 0)); \n vec4 color_right = texture2D(texture, v_uv0 + vec2(outlineSize, 0)); \n vec4 color_up_left = texture2D(texture, v_uv0 + vec2(outlineSize, -outlineSize)); \n vec4 color_up_right = texture2D(texture, v_uv0 + vec2(outlineSize, outlineSize)); \n vec4 color_down_left = texture2D(texture, v_uv0 + vec2(-outlineSize, -outlineSize)); \n vec4 color_down_right = texture2D(texture, v_uv0 + vec2(-outlineSize, outlineSize)); \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 gl_FragColor = outlineColor * getBackArea();\n\n gl_FragColor = o + (1.0 - o.a) * gl_FragColor;\n\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 SHOW_OUT_LINE\nuniform Outline {\n\n vec4 outlineColor;\n\n float outlineSize;\n\n};\n#endif\n\nfloat getBackArea() {\n vec4 color_up = texture(texture, v_uv0 + vec2(0, outlineSize)); \n vec4 color_down = texture(texture, v_uv0 - vec2(0, outlineSize)); \n vec4 color_left = texture(texture, v_uv0 - vec2(outlineSize, 0)); \n vec4 color_right = texture(texture, v_uv0 + vec2(outlineSize, 0)); \n vec4 color_up_left = texture(texture, v_uv0 + vec2(outlineSize, -outlineSize)); \n vec4 color_up_right = texture(texture, v_uv0 + vec2(outlineSize, outlineSize)); \n vec4 color_down_left = texture(texture, v_uv0 + vec2(-outlineSize, -outlineSize)); \n vec4 color_down_right = texture(texture, v_uv0 + vec2(-outlineSize, outlineSize)); \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\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}\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 outlineSize;\n\n};\n\nfloat getBackArea() {\n vec4 color_up = texture(texture, v_uv0 + vec2(0, outlineSize)); \n vec4 color_down = texture(texture, v_uv0 - vec2(0, outlineSize)); \n vec4 color_left = texture(texture, v_uv0 - vec2(outlineSize, 0)); \n vec4 color_right = texture(texture, v_uv0 + vec2(outlineSize, 0)); \n vec4 color_up_left = texture(texture, v_uv0 + vec2(outlineSize, -outlineSize)); \n vec4 color_up_right = texture(texture, v_uv0 + vec2(outlineSize, outlineSize)); \n vec4 color_down_left = texture(texture, v_uv0 + vec2(-outlineSize, -outlineSize)); \n vec4 color_down_right = texture(texture, v_uv0 + vec2(-outlineSize, outlineSize)); \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 gl_FragColor = outlineColor * getBackArea();\n\n gl_FragColor = o + (1.0 - o.a) * gl_FragColor;\n\n #endif\n}\n" } } ], diff --git a/assets/materials/sprite-outline.mtl b/assets/materials/sprite-outline.mtl index 1ece673..0207d49 100644 --- a/assets/materials/sprite-outline.mtl +++ b/assets/materials/sprite-outline.mtl @@ -8,6 +8,7 @@ }, "_defines": { "USE_TEXTURE": true, + "USE_ALPHA_TEST": false, "SHOW_OUT_LINE": true }, "_props": { @@ -15,10 +16,10 @@ "outlineColor": { "__type__": "cc.Vec4", "x": 1, - "y": 1, + "y": 0, "z": 0, "w": 1 }, - "outlineSize": 0.01 + "outlineSize": 0.02 } } \ No newline at end of file diff --git a/assets/scenes/MainScene.fire b/assets/scenes/MainScene.fire index af51dd7..d2be163 100755 --- a/assets/scenes/MainScene.fire +++ b/assets/scenes/MainScene.fire @@ -78,16 +78,19 @@ "__id__": 8 }, { - "__id__": 11 + "__id__": 10 + }, + { + "__id__": 12 } ], "_active": true, "_components": [ { - "__id__": 13 + "__id__": 14 }, { - "__id__": 14 + "__id__": 15 } ], "_prefab": null, @@ -177,7 +180,7 @@ "array": [ 0, 0, - 394.90758412570403, + 351.60631393648214, 0, 0, 0, @@ -372,9 +375,6 @@ "_components": [ { "__id__": 9 - }, - { - "__id__": 10 } ], "_prefab": null, @@ -457,16 +457,6 @@ "_atlas": null, "_id": "c5wu68mipC4qBjTD+u0rFa" }, - { - "__type__": "93154zKEUxNspOL91D2hv6b", - "_name": "", - "_objFlags": 0, - "node": { - "__id__": 8 - }, - "_enabled": true, - "_id": "4aQ0ah9X1FT4GFrlS5JCi9" - }, { "__type__": "cc.Node", "_name": "HelloLabel", @@ -478,7 +468,7 @@ "_active": true, "_components": [ { - "__id__": 12 + "__id__": 11 } ], "_prefab": null, @@ -534,7 +524,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 11 + "__id__": 10 }, "_enabled": true, "_materials": [ @@ -559,6 +549,100 @@ "_N$cacheMode": 0, "_id": "9fH5zrVThO/I9ly3o3xhIT" }, + { + "__type__": "cc.Node", + "_name": "ball_00", + "_objFlags": 0, + "_parent": { + "__id__": 2 + }, + "_children": [], + "_active": true, + "_components": [ + { + "__id__": 13 + } + ], + "_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": [ + -243, + 106, + 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": "7c8OSA1YJNqKRZUzDDNpTz" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 12 + }, + "_enabled": true, + "_materials": [ + { + "__uuid__": "daf44951-2c80-4778-b99f-52cfc78ab053" + } + ], + "_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": "07Kzm51XBOGJMcszXVW8uC" + }, { "__type__": "cc.Canvas", "_name": "", @@ -585,7 +669,7 @@ }, "_enabled": true, "label": { - "__id__": 12 + "__id__": 11 }, "text": "hello", "_id": "aa8ulaDR9JcbRoT7r3pqZq" diff --git a/assets/textures/ball_00.png b/assets/textures/ball_00.png new file mode 100644 index 0000000000000000000000000000000000000000..08b77dc427d75b8dc7b1e9f1e0fde35287fa9359 GIT binary patch literal 4558 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 literal 0 HcmV?d00001 diff --git a/assets/textures/prestige_02.png.meta b/assets/textures/ball_00.png.meta similarity index 75% rename from assets/textures/prestige_02.png.meta rename to assets/textures/ball_00.png.meta index e29e080..7e70c4e 100644 --- a/assets/textures/prestige_02.png.meta +++ b/assets/textures/ball_00.png.meta @@ -1,6 +1,6 @@ { "ver": "2.3.3", - "uuid": "268e9b44-3120-4787-87cb-eb9c00d9fbaf", + "uuid": "c996c862-3d09-4bc6-915d-e8a8e7226933", "type": "sprite", "wrapMode": "clamp", "filterMode": "bilinear", @@ -9,10 +9,10 @@ "packable": true, "platformSettings": {}, "subMetas": { - "prestige_02": { + "ball_00": { "ver": "1.0.4", - "uuid": "24e1449a-64d2-4df5-bcf9-8ce55ecb6637", - "rawTextureUuid": "268e9b44-3120-4787-87cb-eb9c00d9fbaf", + "uuid": "d0b78623-4e79-4de1-b1d2-ea211bf4652c", + "rawTextureUuid": "c996c862-3d09-4bc6-915d-e8a8e7226933", "trimType": "auto", "trimThreshold": 1, "rotated": false, diff --git a/assets/textures/prestige_01.png b/assets/textures/prestige_01.png deleted file mode 100644 index 510b523afe801ef9cc3ae3052e9bac1d00c26b63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6086 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 Q??3D6Dmu#LiZ6ry2k?+)#sB~S diff --git a/assets/textures/prestige_01.png.meta b/assets/textures/prestige_01.png.meta deleted file mode 100644 index a5ae94f..0000000 --- a/assets/textures/prestige_01.png.meta +++ /dev/null @@ -1,34 +0,0 @@ -{ - "ver": "2.3.3", - "uuid": "9e216a31-1e40-4350-b20c-629287c96706", - "type": "sprite", - "wrapMode": "clamp", - "filterMode": "bilinear", - "premultiplyAlpha": false, - "genMipmaps": false, - "packable": true, - "platformSettings": {}, - "subMetas": { - "prestige_01": { - "ver": "1.0.4", - "uuid": "89478038-ff44-410d-8044-8fb4dd82c1e8", - "rawTextureUuid": "9e216a31-1e40-4350-b20c-629287c96706", - "trimType": "auto", - "trimThreshold": 1, - "rotated": false, - "offsetX": -0.5, - "offsetY": 0.5, - "trimX": 0, - "trimY": 1, - "width": 59, - "height": 57, - "rawWidth": 60, - "rawHeight": 60, - "borderTop": 0, - "borderBottom": 0, - "borderLeft": 0, - "borderRight": 0, - "subMetas": {} - } - } -} \ No newline at end of file diff --git a/assets/textures/prestige_02.png b/assets/textures/prestige_02.png deleted file mode 100644 index 90f3f58691894cd885f865e0b928d0bf025b4d7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5276 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 jUY@jub6q$p1zZ3O|FX@ig`4O9{$GgH&_k5mv