我在使用纹理地图集在OpenGL中创建纹理对象时出现问题,我创建了2D游戏,并且知道如何纹理POT位图到对象,但是,我似乎无法找到教程在转换我的代码使用纹理地图集出于性能原因,这是我的代码为我的当前工作对象创建和纹理实现。在Android中使用纹理地图集和openGL 1.1的纹理示例
public void createTexture(Bitmap bmp, GL10 gls, int texturename)
{
this.gl = (GL11) gls;
this.TextureName = texturename;
bombBmp = bmp;
VertexBuffer = null;
TextureBuffer = null;
IndexBuffer = null;
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(12 * 4);
byteBuffer.order(ByteOrder.nativeOrder());
VertexBuffer = byteBuffer.asFloatBuffer();
VertexBuffer.put(new float[] { 0, 0, 0.0f, 0, -h, 0.0f, w, 0, 0.0f, w, -h, 0.0f });
VertexBuffer.position(0);
byteBuffer = ByteBuffer.allocateDirect(8 * 4);
byteBuffer.order(ByteOrder.nativeOrder());
TextureBuffer = byteBuffer.asFloatBuffer();
TextureBuffer.put(new float[] { 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f });
TextureBuffer.position(0);
byteBuffer = ByteBuffer.allocateDirect(6 * 2);
byteBuffer.order(ByteOrder.nativeOrder());
IndexBuffer = byteBuffer.asShortBuffer();
IndexBuffer.put(new short[] { 0, 1, 2, 1, 3, 2 });
IndexBuffer.position(0);
gl.glBindTexture(GL10.GL_TEXTURE_2D, this.TextureName);
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);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bombBmp, 0);
bombBmp.recycle();
bombBmp = null;
}
我生成genTexture我Texturename和POT位图传递给这个函数
gl.glGenTextures(1, textures, 0);
bomb.createTexture(bombBmp, gl, textures[0]);
这是我应该的纹理位图
关于纹理图集的具体内容你不明白吗?你知道纹理坐标是如何工作的吗?我不认为有人会为你重写你的代码,但如果有一些你不明白的特定概念,你可能会找到一些帮助。 – Tim 2012-03-12 06:17:50
我不知道如何绑定纹理图集的子图像,我只知道如何将图像作为一个整体进行绑定,比如,我必须先使用texImage2d然后使用texSubImage?或者我必须立即使用texSubImage?谢谢 – Keiichi 2012-03-12 07:01:58
你是怎么解决这个问题的? – hadez30 2014-10-08 11:37:31