2015-02-07 54 views
1

我有原始圖像: http://i.stack.imgur.com/7qYW2.png如何油漆過的紋理[Libgdx]

我怎樣才能畫了這張圖片,而不是得到如下: http://i.stack.imgur.com/w3ij3.png

PS:此代碼無效:

public void render() { 
    Gdx.gl.glClearColor(1, 1, 1, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

    batcher.begin(); 
    batcher.setColor(Color.BLUE); 
    batcher.draw(texture, x, y, width, height); 
    batcher.end(); 
} 
+0

什麼是你到底想幹什麼?這段代碼應該做那件事。 – Veljko 2015-02-07 13:02:53

+0

@Veljko,此代碼只是色調。 – Berelem00 2015-02-08 01:21:11

+0

是的,那麼你必須使用簡單的片段着色器。這覆蓋了紋理像素的顏色。 – Veljko 2015-02-08 03:49:28

回答

0

完全合法的代碼:

 String vertexShader = "attribute vec4 a_position;\n" + 
       "attribute vec4 a_color;\n" + 
       "attribute vec2 a_texCoord0;\n" + 
       "\n" + 
       "uniform mat4 u_projTrans;\n" + 
       "\n" + 
       "varying vec4 v_color;\n" + 
       "varying vec2 v_texCoords;\n" + 
       "\n" + 
       "void main() {\n" + 
       " v_color = a_color;\n" + 
       " v_texCoords = a_texCoord0;\n" + 
       " gl_Position = u_projTrans * a_position;\n" + 
       "}"; 

     String fragmentShader = "#ifdef GL_ES\n" + 
       "precision mediump float;\n" + 
       "#endif\n" + 
       "\n" + 
       "varying vec4 v_color;\n" + 
       "varying vec2 v_texCoords;\n" + 
       "uniform sampler2D u_texture;\n" + 
       "uniform mat4 u_projTrans;\n" + 
       "\n" + 
       "void main() {\n" + 
       "  vec4 color = v_color * texture2D(u_texture, v_texCoords);\n" + 
       "  if(color.a == 0.0) gl_FragColor = vec4(color.r, color.g, color.b, 0.0);\n" + 
       "  else gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);" + 
       "}"; 

     ShaderProgram shaderProgram = new ShaderProgram(vertexShader,fragmentShader); 

     public void render() { 
      Gdx.gl.glClearColor(0, 0, 0, 1); 
      Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

      batch.begin(); 
      batch.setShader(shaderProgram); 
      batch.draw(texture, x, y, width, height); 
      batch.end(); 

     } 
0

您可以使用一個片段着色器具有以下邏輯:

if(alpha of the pixel is 1.0) then pixel=cyan 
else pixel=white 

當然,這需要圍繞企鵝是透明的空間(有= 0)

varying vec4 v_color; 
varying vec2 v_texCoords; 
uniform sampler2D u_texture; 

void main() { 
    vec4 color=v_color * texture2D(u_texture, v_texCoords); 
    if(color.a==1.0)gl_FragColor=vec4(0.5,0.5,1,1); 
    else gl_FragColor=vec(0.0,0.0,0.0,0.0); 
} 
+0

雖然鏈接圖片中有一個很大的灰色陰影。如果alpha恰好爲1,則將顏色設置爲青色可能會更好,否則將其設置爲(0,0,0,0)。 (沒有檢查鏈接圖片中的Alpha通道,所以不確定)。 – MPeti 2015-02-07 13:31:37

+0

@MPeti,聽起來更好,答案已被編輯。 – SteveL 2015-02-07 13:34:44