我有一個應用程序,我一直在android中一直玩,它使用opengl-es。Android Opengl-es加載2紋理的非電源
目前我加載紋理從位圖如下所示:
//Load up and flip the texture - then dispose the temp
Bitmap temp = BitmapFactory.decodeResource(Deflecticon.getContext().getResources(), resourceID);
Bitmap bmp = Bitmap.createBitmap(temp, 0, 0, temp.getWidth(), temp.getHeight(), flip, true);
temp.recycle();
//Bind the texture in memory
gl.glBindTexture(GL10.GL_TEXTURE_2D, id);
//Set the parameters of the texture.
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
//On to the GPU
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bmp, 0);
最明顯的問題是,我使用的紋理必須是2的冪此刻我的預編輯在Photoshop中的紋理是2的冪,並且只是有空的邊框。然而,這是一個有點乏味,我想能夠加載它們,因爲它們是..認識到它們不是2的力量,並將它們加載到一個紋理。
我知道我可以將位圖縮放成2倍大小的力量,並且簡單地拉伸紋理,但是我不希望拉伸紋理,並且在某些情況下可能想要將幾個紋理放入一個「圖集」中。
我知道我可以使用glTexSubImage2D()將我想要的數據粘貼到紋理中。這很棒!
但是我不知道如何在Android中初始化沒有數據的紋理?
在這個問題previously asked建議調用glTexImage2D()沒有數據,然後填寫它。
但是在android中調用「GLUtils.texImage2D(GL10.GL_TEXTURE_2D,0,bmp,0);」你不指定寬度/高度。它從我假設的位圖中讀取。
這樣做的最好方法是什麼?我可以創建一個新的2位大小權利的位圖,只有空白,沒有填充任何數據,並使用它來初始化紋理,然後使用subImage粘貼到它?或者我應該創建一個新的位圖以某種方式將我想要的像素(不確定是否可以輕鬆地執行此操作)複製到此新位圖(離開邊界),然後使用它?
編輯:澄清我正在使用opengl。
沒有太多,只是我們希望能在以後的日子裏改變它們,如果調整大小做的很好,它會變得更容易!這種方法說它需要nonPOTBitmap的一個子集,這是否意味着如果子集位圖小於指定的xSize和ySize,它會有空白邊緣?還是會拉伸它? (我會嘗試,但可悲的是不在我的編碼電腦)。 – iexus 2011-04-19 16:16:44
除非將它們扔到createScaledBitmap方法,否則位圖不應伸展。剩餘的空間將是空的。 – AedonEtLIRA 2011-04-20 02:19:33
對不起,延遲迴復,我已經與其他事情一起,但是我到處去實際執行這個,它不能通過這種方法工作。你不能將一個位圖分成一個比它看起來更大尺寸的位圖...我現在處於一個不知所措的狀態。 – iexus 2011-05-05 15:55:10