【发布时间】:2011-04-18 16:10:27
【问题描述】:
我有一个我在 android 中反复玩过的应用程序,它使用 opengl-es。
目前我从这样的位图中加载纹理:
//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。
【问题讨论】:
标签: android opengl-es bitmap textures