2012-05-02 5 views
0

ぼかし効果を持つandengineサンプルが見つかりました。うまくいきました。私はShaderProgramクラスを使用でき、SpriteのPreDrawではいくつかのシェーダ(setShaders)を使用しています。AndEngine - スタンドアロンシェーダの使い方

同じクラスのShaderProgrammを使用し、スプライトにアタッチすることなくシェーダを使用できますか?

たとえばonDrawでは、シーン上にグレンの三角形を描画するだけのShaderを使用します(android openglのように)。この方法でShaderProgramを使用する簡単な方法はありますか(スプライトのPreDrawからシェーダをどのように取り付けることができますか)。

私はこのようななめらかを試してみた:

BrushShaderProgram bs = BrushShaderProgram.getInstance(); 
bs.link(pGLState); 
GLES20.glUseProgram(bs.getId()); 
GLES20.glVertexAttribPointer(bs.maPositionHandle, 3, GLES20.GL_FLOAT, false, 12, triangleVB); 
GLES20.glEnableVertexAttribArray(bs.maPositionHandle); 
GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, 3); 

シェーダは単純です:

public static final String VERTEXSHADER = 
       "attribute vec4 vPosition; \n" + 
       "void main(){    \n" + 
       " gl_Position = vPosition; \n" + 
       "}       \n"; 

public static final String FRAGMENTSHADER = "precision mediump float; \n" + 
       "void main(){    \n" + 
       " gl_FragColor = vec4 (0.63671875, 0.76953125, 0.22265625, 1.0); \n" + 
       "}       \n"; 

答えて

2

理由だけではなく、Rectangleクラスと同様に、トライアングルクラスを作成していませんか?

+0

最後の目的は、頂点配列をシェーダに渡すことです(4 * n個の数値 - n個の矩形の座標)。この配列を描画し、フラグメントシェーダは各矩形にビットマップテクスチャを描画します。 n個のシェイプを段階的に描画し、それぞれにスプライトを作成するよりも同時にn個のシェイプを渡して描画するほうが速くなります – dilix

+2

SpriteBatchクラスを検索したいのですか? –

+0

それは私の問題の解決策であると思われる、それを試してみよう – dilix