2011-12-16 161 views
0

我正在製作一個OpenGL ES 2.0 android carousel。我有一個「for」函數,在每次迭代中都會調用「drawSquares」函數來繪製圓圈中的正方形。每當一個新的方塊被繪製時,通過改變模型矩陣來完成。 (用於繪製正方形我使用相同的頂點和片段着色器)opengl es 2.0紋理加載

我需要在正方形上應用紋理,但是每個正方形都要有不同的紋理。我似乎無法做到這一點。我試圖在調用drawSquare之前更改紋理數據的句柄值。

mTextureDataHandle = TextureHelper.loadTexture(context, item.getTexture()); 

但是每個正方形都具有相同的紋理。

有些人可以提出一些建議,或者告訴我實施這個的最好方法。我現在正在閱讀關於opengl es 2.0的書,現在大約兩個月了,但是仍然有很多我不明白的東西。請幫助,我會深深地感謝每一個建議。謝謝你!!!

回答

2

開始Here。你有兩個選擇 -

  1. glBindTexture - 每次加載一個新的紋理到您的處理時間,你將不得不再次綁定它
  2. 使用句柄的數組 - 你可以設置mTextureDataHandle了作爲INT [],填補它,然後綁定每個紋理到一個單獨的GL紋理:

    mTextureDataHandle[0] = ...; //Load textures - repeat for [1..N] 
    /* 
    * Select which GL texture spot to use - GL has 30 pointers to use, your device 
    * likely won't support that many 
    */ 
    GLES20.glSetActiveTexture(GLES20.GL_TEXTURE0); 
    GLES20.glBindTexture(GL_TEXTURE_2D, mTextureDataHandle[0]); 
    
    GLES20.glSetActiveTexture(GLES20.GL_TEXTURE1); 
    GLES20.gBindTexture(GL_TEXTURE_2D, mTextureDataHandle[1]); 
    
    //To draw with the right texture select which GL texture to point to (index): 
    GLES20.glUniform1i(mtextureUniformHandle, index); 
    drawStuff(); 
    

    您將在這裏通過設備所支持的紋理的數量限制 - 使用

    IntBuffer max = IntBuffer.allocate(1); 
    GLES20.glGetIntegerv(GLES20.GL_MAX_TEXTURE_IMAGE_UNITS, max); 
    Log.d("tag","Texture units: " + max.get()); 
    
  3. 或者兩個選項的某種組合 - 即通過預加載紋理數組來減少加載處理器的時間,但您可能需要動態綁定至少一些選項以避免用盡可用紋理。

+0

謝謝你的回覆。我會嘗試上述建議,並希望他們能夠工作。 – Sandra 2012-05-16 08:19:54