我在場景上有一個大的Sprite - 例如200x200,在應用程序中我有一個數組[200] [200],其中我爲每個像素存儲0或1精靈。Andengine爲精靈中的每個像素設置了阿爾法
我想繪製一個更多紋理精靈(例如10x10)高於現有的一個,但我想計算eache像素在新的精靈如果它需要繪製它在這個場景取決於提供的數組(如果在相應的位置在數組中的新精靈像素是'1' - 我需要繪製這個像素,如果'0' - 我不想繪製它(也許設置alpha = 0))。
我想我可以爲每個新的精靈使用片段着色器,但我無法理解如何向着色器提供數組數據以計算每個像素的顏色。 我覺得也可以在整個場景中使用片段着色器(如果渲染爲紋理)。
我在opengl中很新,不知道移動方式。
當我創建的場景資源 - 我嘗試創建我的面具:當我在現場繪製新的項目,我使用着色器
mask = new float[512*512*4];
for (int i = 0; i < mask.length; i++)
{
mask[i] = 2f;
}
GLES20.glActiveTexture(GLES20.GL_TEXTURE1);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 1029384756);
GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 1, GLES20.GL_RGBA, 512, 512, 0, GLES20.GL_RGBA, GLES20.GL_FLOAT, FloatBuffer.wrap(mask));
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
然後:
setShaderProgram(ShaderProgram.getInstance());
GLES20.glActiveTexture(GLES20.GL_TEXTURE1);
GLES20.glUniform1i(RadialBlurExample.RadialBlurShaderProgram.sUniformMask, GLES20.GL_TEXTURE1);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 1029384756);
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
,但我不能在場景中查看新項目(maskVal是< 0.5)。
我試圖找到工作方式來傳遞數組作爲紋理,但我找不到它。
謝謝你 - 這是一個好主意,但我怎麼知道 - 「如果」是OpenGL的非常繁重的操作,我想在這種情況下,像「step」一樣適用。如果對我來說一切正常,我會試試並標記爲答案。 – dilix 2012-08-10 07:44:31
@dilix那麼如果你不想畫像素,那麼你必須使用'discard'語句,你必須把它放在一個if塊中。 – Tim 2012-08-10 08:01:51
我不能繪製它,但使其透明? – dilix 2012-08-10 08:06:10