我正在制作一个OpenGL ES 2.0安卓旋转木马。我有一个“for”函数,在每次迭代中都会调用“drawSquares”函数来绘制圆形中的正方形。这是通过每次绘制新方块时更改modelMatrix来完成的。 (为了绘制正方形,我使用相同的顶点和片段着色器)
我需要在正方形上应用纹理,但是每个正方形都有不同的纹理。我似乎无法做到这一点。我尝试在调用drawSquare之前更改纹理数据的句柄值。
mTextureDataHandle = TextureHelper.loadTexture(context, item.getTexture());
但每个方块都有相同的纹理。
有些人可以提出建议吗,或告诉我实施此方法的最佳方法。我现在正在阅读有关opengl es 2.0大约两个月的内容,但仍然认为有很多我不理解的事情。请帮助,我会非常感谢每一个建议。谢谢你!!!
答案 0 :(得分:2)
开始Here。你有几个选择 -
使用句柄数组 - 您可以将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());
或两个选项的某种组合 - 即通过预先加载的纹理数组来节省加载时的处理器时间,但您可能需要动态绑定至少其中一些以避免耗尽可用纹理。