簡體   English   中英

opengl es 2.0紋理加載

[英]opengl es 2.0 texture loading

我正在制作一個OpenGL ES 2.0安卓旋轉木馬。 我有一個“for”函數,在每次迭代中都會調用“drawSquares”函數來繪制圓形中的正方形。 這是通過每次繪制新方塊時更改modelMatrix來完成的。 (為了繪制正方形,我使用相同的頂點和片段着色器)

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

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

但每個方塊都有相同的紋理。

有些人可以提出建議,或者告訴我實現這一點的最佳方法。 我現在正在閱讀有關opengl es 2.0大約兩個月的內容,但仍然認為有很多我不理解的事情。 請幫助,我會非常感謝每一個建議。 感謝你!!!

這里開始。 你有幾個選擇 -

  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. 或者兩個選項的某種組合 - 即通過使用預加載的紋理數組來節省加載時的處理器時間,但是您可能需要動態地綁定它們中的至少一些以避免耗盡可用紋理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM