我在使用紋理地圖集在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