diff --git a/assets/effects/sprite-outline.effect b/assets/effects/sprite-outline.effect index ecb774f..75b865b 100644 --- a/assets/effects/sprite-outline.effect +++ b/assets/effects/sprite-outline.effect @@ -11,8 +11,10 @@ CCEffect %{ rasterizerState: cullMode: none properties: - texture: { value: white } + texture: { value: grey } alphaThreshold: { value: 0.5 } + outlineColor: { value: [1, 1, 1, 1], editor: { type: color } } + outlineSize: { value: 5.0 } }% @@ -63,6 +65,42 @@ CCProgram fs %{ uniform sampler2D texture; #endif + + + #if SHOW_OUT_LINE + uniform Outline { + // 描边颜色 + vec4 outlineColor; + // 描边偏移大小 + float outlineSize; + // 特别地,必须是 vec4 先于 float 声明 + }; + #endif + + // // 获取背面颜色 + // float getBackArea() { + // vec4 color_up; + // vec4 color_down; + // vec4 color_left; + // vec4 color_right; + // vec4 color_up_left; + // vec4 color_up_right; + // vec4 color_down_left; + // vec4 color_down_right; + // float total = 0 ; + + // color_up = texture(texture, v_uv0 + vec2(0, outlineSize)); + // color_down = texture(texture, v_uv0 - vec2(0, outlineSize)); + // color_left = texture(texture, v_uv0 - vec2(outlineSize, 0)); + // color_right = texture(texture, v_uv0 + vec2(outlineSize, 0)); + // color_up_left = texture(texture, v_uv0 + vec2(outlineSize, -outlineSize)); + // color_up_right = texture(texture, v_uv0 + vec2(outlineSize, outlineSize)); + // color_down_left = texture(texture, v_uv0 + vec2(-outlineSize, -outlineSize)); + // color_down_right = texture(texture, v_uv0 + vec2(-outlineSize, outlineSize)); + // 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; + // return clamp(total, 0.0, 1.0); + // } + void main () { vec4 o = vec4(1, 1, 1, 1); @@ -77,7 +115,7 @@ CCProgram fs %{ ALPHA_TEST(o); - // gl_FragColor = o; - gl_FragColor = vec4(0.0, 0.0, 1.0, 1.0); + gl_FragColor = o; + // gl_FragColor = vec4(0.0, 0.0, 1.0, 1.0); } }% diff --git a/assets/effects/sprite-outline.effect.meta b/assets/effects/sprite-outline.effect.meta index 520572e..0c948c8 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\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 = vec4(0.0, 0.0, 1.0, 1.0);\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\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}\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\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 = vec4(0.0, 0.0, 1.0, 1.0);\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\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" } } ], diff --git a/assets/materials/sprite-outline.mtl b/assets/materials/sprite-outline.mtl index b0389b9..4c091d2 100644 --- a/assets/materials/sprite-outline.mtl +++ b/assets/materials/sprite-outline.mtl @@ -7,7 +7,10 @@ "__uuid__": "559dcd1e-233b-4e1f-b1da-733c9232f06f" }, "_defines": { - "USE_TEXTURE": true + "USE_TEXTURE": true, + "SHOW_OUT_LINE": true }, - "_props": {} + "_props": { + "texture": null + } } \ No newline at end of file diff --git a/assets/scenes/MainScene.fire b/assets/scenes/MainScene.fire index 26b8d63..5f61001 100755 --- a/assets/scenes/MainScene.fire +++ b/assets/scenes/MainScene.fire @@ -177,7 +177,7 @@ "array": [ 0, 0, - 554.2562584220408, + 493.63448015713004, 0, 0, 0,