2017-01-20 8 views
0

私は赤の色を塗りたいです。 GL10を使用して要素を描画すると、問題はありませんが、GLES20を使用すると図形は赤色ではなく黒色になります。OpenGLEsは私のポイントをよく色付けしません。

ここに私のコードがある:色のfloat配列やバッファを設定するには :

for (int i=0;i<colors.length;i++) 
     { 
      colors[i]=1f; 
      colors[++i]=0f; 
      colors[++i]=0f; 
      colors[++i]=1f; 
     } 
byteBuffer=ByteBuffer.allocateDirect(4*colors.length); 
     byteBuffer.order(ByteOrder.nativeOrder()); 

     colors_buff=byteBuffer.asFloatBuffer(); 
     colors_buff.put(colors); 
     colors_buff.position(0); 

マイ頂点とフラグメントシェーダ:

private String v_shader="" + 
     "attribute vec4 verte;" + 
     "attribute vec4 colors;" + 
     "varying vec4 vcolor;" + 
     "void main(){" + 
     "gl_Position=verte;" + 
     "vcolor=colors;" + 
     "}"; 

private String c_shader="" + 
     "precision mediump float;" + 
     "varying vec4 vcolor;" + 
     "void main(){" + 
     "gl_FragColor=vcolor;" + 
     "}"; 

My機能要素描画する:

public void DrawShader(){ 
     GLES20.glUseProgram(progra); 

     int v_handler=GLES20.glGetAttribLocation(progra,"verte"); 
     int f_handler=GLES20.glGetUniformLocation(progra,"colors"); 

     GLES20.glEnableVertexAttribArray(v_handler); 
     GLES20.glEnableVertexAttribArray(f_handler); 

     GLES20.glVertexAttribPointer(v_handler,3,GLES20.GL_FLOAT,false,12,vertexbuffer); 
     GLES20.glVertexAttribPointer(f_handler,4,GLES20.GL_FLOAT,false,16,colors_buff); 

     GLES20.glDrawElements(GLES20.GL_LINES,indicies.length,GLES20.GL_UNSIGNED_SHORT,indicies_buff); 

     GLES20.glDisableVertexAttribArray(v_handler); 
     GLES20.glDisableVertexAttribArray(f_handler); 
    } 

カラー配列を変更して、バッファに入れると私はGL10を使って要素を描いていましたが、drwという色は変わりません。 ありがとうございました。

答えて

0

uniformsattributesを混合しています。持っているものを決めてください。

attributeattribute vec4 colors;をシェーダで使用しました。これをユニフォームに変更するには、フラグメントシェーダにuniform vec4 uColor;として移動します。

ロケーションを取得するときに、uniformint f_handler=GLES20.glGetUniformLocation(progra,"colors");として属性に変更する場合は、int f_handler=GLES20.glGetAttribLocation(progra,"colors");を使用してください。均一として使用する場合は、属性を削除して有効にしてください:GLES20.glEnableVertexAttribArray(f_handler);

ポインタを属性GLES20.glVertexAttribPointer(f_handler,4,GLES20.GL_FLOAT,false,16,colors_buff);として割り当て、ユニフォームを使用する場合はGLES20.glUniform4f(f_handler, 1.0f, .0f, .0f, 1.0f);として使用し、カラーバッファを削除することができます。

どちらを使用するかを選択するには、2つの定義(uniformおよびattribute)を調べる必要があります。しかし、ユニフォームを使用するときにそれを非常に短くするために、値は描画呼び出し全体の定数として設定されます。あなたの場合は、あなたの形が全面に1つの色を持つことを意味します。属性は頂点ごとに使用され、各頂点は特定の色を持ち、頂点間のピクセルは値が異なる場合に補間値(勾配)を持ちます。