您可以像這樣創建着色器來更改所有像素的顏色,而不是將它們乘以該顏色。通過調用spriteBatch.setShader(shader);
將此着色器與SpriteBatch一起使用。
這基本上是默認的SpriteBatch着色器,除了最終的顏色替換所有非alpha像素。
要使用此方法,您必須將您的彩色精靈與正常精靈分開批處理。致電spriteBatch.setShader(null);
回到繪製常規小精靈。
String vertexShader = "attribute vec4 " + ShaderProgram.POSITION_ATTRIBUTE + ";\n" //
+ "attribute vec4 " + ShaderProgram.COLOR_ATTRIBUTE + ";\n" //
+ "attribute vec2 " + ShaderProgram.TEXCOORD_ATTRIBUTE + "0;\n" //
+ "uniform mat4 u_projTrans;\n" //
+ "varying vec4 v_color;\n" //
+ "varying vec2 v_texCoords;\n" //
+ "\n" //
+ "void main()\n" //
+ "{\n" //
+ " v_color = " + ShaderProgram.COLOR_ATTRIBUTE + ";\n" //
+ " v_texCoords = " + ShaderProgram.TEXCOORD_ATTRIBUTE + "0;\n" //
+ " gl_Position = u_projTrans * " + ShaderProgram.POSITION_ATTRIBUTE + ";\n" //
+ "}\n";
String fragmentShader = "#ifdef GL_ES\n" //
+ "#define LOWP lowp\n" //
+ "precision mediump float;\n" //
+ "#else\n" //
+ "#define LOWP \n" //
+ "#endif\n" //
+ "varying LOWP vec4 v_color;\n" //
+ "varying vec2 v_texCoords;\n" //
+ "uniform sampler2D u_texture;\n" //
+ "void main()\n"//
+ "{\n" //
+ " gl_FragColor = v_color * texture2D(u_texture, v_texCoords).a;\n" //
+ "}";
ShaderProgram shader = new ShaderProgram(vertexShader, fragmentShader);
您是否將蝙蝠的顏色手動設置爲變量batBlack,batGrey,batRed?如果是這樣,請更改這些值以表示您想要的效果。 – Hayden
圖像是一個簡單的PNG雪碧與固定的顏色,我想要做的是不修改像素的源或顏色像素。我想我需要一個面具或類似的東西 –
使用着色器 - https://www.youtube.com/watch?v=1mIdNru2VO0 –