2012-05-02 43 views
0

我发现带有模糊效果的andengine示例,它工作正常,我发现我可以使用ShaderProgram类并在Sprite的PreDraw中使用一些着色器(setShaders)。AndEngine - 如何使用独立着色器

我可以使用相同的ShaderProgramm类并使用着色器而不附加到精灵?

例如在onDraw中使用仅在场景中绘制grenn三角形的Shader(就像在android opengl示例中一样)。是否有这种方式使用ShaderProgram的简单方法(我如何将着色器从Sprite的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

这似乎是我的问题的解决方案,thx,我会尝试 – dilix